<!DOCTYPE html>

<html>
<head>
  <style type="text/css" media="screen">
    body {
      position: relative;
    }
    .container {
      position: relative;
      width: 100px;
      height: 100px;
      padding: 20px;
      z-index: 0;
      border: 1px solid black;
    }
    
    .compositing {
      position: absolute;
      top: 21px;
      left: 21px;
      width: 100px;
      height: 100px;
      -webkit-transform: translateZ(0);
    }
    
    #far-left {
      position: relative;
      left: -1000px;
      width: 1200px;
      height: 100px;
      background-color: green;
    }
    
    #far-left.moved {
      -webkit-transform: translateX(200px);
    }
    
    .indicator {
      position: absolute;
      top: 21px;
      left: 21px;
      width: 100px;
      height: 100px;
      background-color: red;
    }
  </style>
  <script type="text/javascript" charset="utf-8">
    if (window.testRunner) {
      testRunner.dumpAsText();
      testRunner.waitUntilDone();
    }

    function doTest()
    {
      document.getElementById('far-left').className = 'moved';
      if (window.testRunner) {
        document.getElementById('layers').innerText = window.internals.layerTreeAsText(document);
        testRunner.notifyDone();
      }
    }

    window.addEventListener('load', doTest, false);
  </script>
</head>

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

  <div class="indicator"></div>

  <!-- Test that layers get updated on the addition of a transform -->
  <!-- The green layer should extend to the left edge of the page -->
  <div class="container">
    <div id="far-left">
      Text here
    </div>
  </div>
  <pre id="layers">Layer tree goes here in DRT</pre>
</body>
</html>

