<!DOCTYPE html>

<html>
<head>
  <style type="text/css" media="screen">
    body {
      position: relative;
      height: 1000px;
    }
    .container {
      position: fixed;
      width: 100px;
      height: 100px;
      padding: 20px;
      z-index: 0;
      border: 1px solid black;
    }
    
    .compositing {
      position: absolute;
      top: 121px;
      left: 21px;
      width: 100px;
      height: 100px;
      -webkit-transform: translateZ(0);
    }
    
    .far-left {
      position: relative;
      left: -1000px;
      width: 1100px;
      height: 100px;
      background-color: green;
    }
    
    .indicator {
      position: absolute;
      top: 121px;
      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()
    {
      window.scrollBy(0, 100);

      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 clipping to viewport with some intermediate layers. -->
  <!-- Green box should extend to the left edge. No red visible. -->
  <div class="container">
    <div class="far-left">
      Text here
    </div>
  </div>
  <pre id="layers">Layer tree goes here in DRT</pre>
</body>
</html>

