<!DOCTYPE html>

<html>
<head>
  <style>
    .container {
      position: relative;
    }
    .box {
      position: absolute;
      height: 150px;
      width: 100px;
      background-color: gray;
    }
    .green {
      height: 100px;
      background-color: green;
    }
    .composited {
      -webkit-transform: translateZ(-1px);
    }
    .rotated-3d {
      -webkit-transform: translateZ(-1px) rotate(45deg);
    }
    .top {
      top: 0px;
    }
    .bottom {
      top: 150px;
    }
    .left {
      left: 0px;
    }
    .right {
      left: 200px;
    }
    .center {
      left: 100px;
      top: 100px;
    }
    #layers {
      position: absolute;
      top: 350px;
    }
  </style>
  <script>
    if (window.testRunner)
      testRunner.dumpAsText();

    function runTest()
    {
      var layerTrees = "";

      if (window.testRunner)
        layerTrees = "Before:\n" + window.internals.layerTreeAsText(document);

      // Rotate the first green box, so that it overlaps the first gray box in the container.
      // That should force the creation of composited layers for all the other green boxes.
      document.getElementById("green-box").classList.add("rotated-3d");

      if (window.testRunner) {
        layerTrees += "\nAfter:\n" + window.internals.layerTreeAsText(document);
        document.getElementById('layers').innerText = layerTrees;
        testRunner.notifyDone();
      }
    }
    window.addEventListener('load', runTest, false);
  </script>
</head>
<body>
  <!--  
    Testing that 3D transforms are not forcing layers to become composited without checking for overlapping areas first.
    In the first state, the green box is not rotated, so it doesn't overlap the gray ones, meaning that only the gray box
    will become composited.
    In the second state, the green box is rotated and will overlap the following layers, meaning that they are all forced to
    get composited.
    In the end there should be one rotated green box in the middle and two gray bars on the margins. Gray boxes
    should display in front.
  -->
  <div class="container">
    <div id="green-box" class="box green center composited"></div>
    <div class="box top left"></div>
    <div class="box top right"></div>
    <div class="box bottom left"></div>
    <div class="box bottom right"></div>
  </div>
  <pre id="layers">Layer tree goes here in DRT</pre>
</body>
</html>