<!DOCTYPE html>

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

    function doTest()
    {
      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>

