<!DOCTYPE html>
<html>
  <head>
    <title>Test of very large layer resizing</title>

    <style type="text/css" media="screen">

    #container {
      width: 500px;
      height: 500px;
      border: 1px solid black;
      background-color: yellow;
      -webkit-transform:translateZ(0);
    }
    
    .box {
        position: absolute;
        left:50px;
        width: 200px;
        height: 200px;
    }
    
    .at-the-top {
        top: 100px;
        background-color: red;
    }
    </style>
    <script type="text/javascript" charset="utf-8">
        if (window.testRunner)
            testRunner.dumpAsText();
        
        function testOnLoad()
        {
            // Small layer first
            var result = recordLayerTree("First (small layer):<br>");

            // Huge layer second
            document.getElementById('container').style.height = "5000px";
            result += recordLayerTree("<br><br>Second (huge layer):<br>");

            // Small layer third
            document.getElementById('container').style.height = "500px";
            result += recordLayerTree("<br><br>Third (small layer):<br>");

            document.getElementById('layers').innerHTML = result;
        }

        function recordLayerTree(messagePrefix)
        {
            if (!window.testRunner)
                return "";

            // Force a layout and a paint to make sure the compositing layers
            // have been updated.
            document.body.offsetLeft;
            testRunner.display();

            return messagePrefix + window.internals.layerTreeAsText(document);
        }
      
        window.addEventListener('load', testOnLoad, false);
    </script>
  </head>
  <body>
      <p>
        The yellow box should be 500 x 500 on startup. Then it should 
        stretch to be 500 x 5000, then shrink back down to 500 x 500. 
        This tests that we can resize to a huge layer and back again
        and still maintain integrity of the layer tree.
      </p>
        <div id="container">
          <div class="box at-the-top"></div>
        </div>
        <pre id="layers">Layer tree appears here in DRT.</pre>
  </body>
</html>
