<!DOCTYPE html>

<html>
  <style type="text/css" media="screen">
    .test {
      position: relative;
      top: -10px; /* overlap composited layer */
      width: 100px;
      height: 100px;
      background-color: white;
      text-indent: -10000px;
    }

    .compositing {
      width: 1px;
      height: 1px;
      will-change: transform;
    }

    #fading {
      opacity: 0;
      transition: opacity 0.1s;
    }
  </style>
  <script type="text/javascript" charset="utf-8">
    if (window.testRunner) {
      testRunner.waitUntilDone();
      testRunner.dumpAsText();
    }

    function startFade()
    {
      // At the end of this fade we are interested in the size of .test in the layer dump.
      // It should be constrained to the size of the view, so not tiled.
      var fader = document.getElementById('fading');
      fader.addEventListener('transitionend', fadeDone, false);
      document.getElementById('fading').style.opacity = 1;
    }
    
    function fadeDone()
    {
      if (window.testRunner) {
        document.getElementById('layers').innerText = internals.layerTreeAsText(document);
        testRunner.notifyDone();
      }
    }
  </script>
<head>
</head>
<body>

  <!-- Go into compositing. -->
  <div class="compositing"></div>

  <div class="test">
    Test
  </div>
  
  <div id="fading">
    Fader
  </div>

  <pre id="layers">Layer tree goes here in DRT</pre>
  <script>
    window.onload = startFade;
  </script>
</body>
</html>
