<!-- webkit-test-runner [ enablePageCache=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>
