<!DOCTYPE html>

<html>
<head>
  <style type="text/css" media="screen">
    html, body {
      overflow: hidden;
      margin: 0;
    }

    .container {
      position: absolute;
      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);
    }
    
    .test {
      position: relative;
      width: 100px;
      height: 100px;
      background-color: green;
    }
    
    .indicator {
      position: absolute;
      top: 21px;
      left: 21px;
      width: 100px;
      height: 100px;
      background-color: red;
    }
    
    #layers {
      position: absolute;
    }
  </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>

  <!-- Tests with absolute positioning between the compositing layer and the element with overflow. -->
  <!-- You should see a green square. -->
  <div class="container">
    <div class="test">
    </div>
  </div>
  <pre id="layers">Layer tree goes here in DRT</pre>
</body>
</html>

