<html>
<head>
    <script>
        if (window.testRunner)
            testRunner.dumpAsText();

        if (window.internals)
            internals.setPagination("LeftToRightPaginated", 0);

        function dumpLayers()
        {
            if (window.testRunner)
                document.getElementById('layers').innerText = window.internals.layerTreeAsText(document);
        }
        window.addEventListener('load', dumpLayers, false);
    </script>
    <style>
    .spacer {
        height: 350px;
        width: 100%;
        margin: 10px;
        background-color: silver;
    }
    
    .box {
        height: 100px;
        width: 100px;
        margin: 10px;
        background-color: blue;
    }

    .wrapper {
        position: relative;
        border: 1px solid black;
        padding: 10px;
    }

    .second {
        position: relative;
        top: -10px;
        background-color: orange;
    }

    .composited {
        -webkit-transform: rotate3d(0, 0, 1, 45deg);
    }
    </style>
</head>
<body>

  <div class="spacer"></div>
  <div class="spacer"></div>

  <div class="wrapper">
      <div class="composited box"></div>
      <div class="second box"></div>
  </div>

<pre id="layers">Layer tree goes here in DRT</pre>

</body>
</html>
