<!-- webkit-test-runner [ enableBackForwardCache=true ] -->
<!DOCTYPE html>
<html>
<head>
    <style>
    iframe {
        border: 10px solid black;
        padding: 5px;
        margin: 20px;
        height: 150px;
        width: 300px;
        -webkit-box-shadow: 0 0 20px black;
    }

    .container {
        position: relative;
    }

    .overlay {
        position: absolute;
        width: 50px;
        height: 50px;
        top: 5px;
        left: 5px;
        background-color: rgba(0, 0, 0, 0.2);
    }
    </style>
</head>
<body>

    <p>
        This tests that layers are rebuilt properly after the page
        is restored from the page cache.
    </p>

    <!-- Some iframes with composited content. -->
    <div class="container">
        <iframe src="resources/page-cache-iframe.html"></iframe>
        <div class="overlay"></div>
    </div>
    <div class="container">
        <iframe src="resources/large-composited-subframe.html"></iframe>
        <div class="overlay"></div>
    </div>

    <!-- Dump the layer tree output here. -->
    <pre id="output"></pre>

    <script>
    if (window.testRunner) {
        window.testRunner.dumpAsText();
        window.testRunner.waitUntilDone();
    }

    function finishTest() {
        var output = document.getElementById("output");
        output.innerText = window.internals.layerTreeAsText(document);

        if (window.testRunner)
            window.testRunner.notifyDone();        
    }

    window.addEventListener("pageshow", function(event) {
        alert("pageshow - " + (event.persisted ? "" : "not ") + "from cache");
        if (event.persisted)
            setTimeout(finishTest, 0);
    }, false);

    window.addEventListener("pagehide", function(event) {
        alert("pagehide - " + (event.persisted ? "" : "not ") + "entering cache");
    }, false);

    // Force a back navigation back to this page.
    window.addEventListener("load", function(event) {
        setTimeout(function() {
            window.location.href = "../resources/go-back.html";
        }, 0);
    }, false);
    </script>

</body>
</html>
