<!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;
    }
    
    video {
      position: absolute;
      top: 121px;
      left: 21px;
      width: 100px;
      height: 100px;
    }
    
    .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 without transforms. -->
  <video src="../resources/video.mp4"></video>

  <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>

