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

    iframe {
        position: absolute;
        top: 0px;
        left: 0px;
        height: 300px;
        width: 300px;
    }

    #overlap {
        left: 250px;
    }

    pre {
        position: absolute;
        bottom: 2000px;
        left: 0px;
    }
  </style>
  <script>
    if (window.testRunner) {
        testRunner.waitUntilDone();
        testRunner.dumpAsText();
    }

    function doTest()
    {
        // For some reason this delay is required for AppKit to not short-circuit the display which is required
        // for overlap testing to kick in.
        window.setTimeout(function() {
            if (window.testRunner) {
                testRunner.displayAndTrackRepaints();
                document.getElementById('layers').innerHTML = window.internals.layerTreeAsText(document);
                testRunner.notifyDone();
            }
        }, 0);
    }

    window.addEventListener('load', doTest, false);
  </script>
</head>
<body>

    <iframe src="resources/composited-subframe.html"></iframe>
    <!-- this iframe should become composited because it overlaps the other iframe -->
    <iframe id="overlap" src="resources/subframe.html"></iframe>

    <pre id="layers">Layer tree appears here in DRT.</pre>
</body>
</html>
