<!-- webkit-test-runner [ enableBackForwardCache=true ] -->
<html>
<body>
Test pageshow/pagehide event behavior when navigating away from a page with frames, putting the page in the page cache, then back to it.
<pre id="log"></pre>
</body>
<script>

if (window.testRunner) {
    testRunner.dumpAsText();
    testRunner.waitUntilDone();
}

// We explicitly chain the loading of the subframes to ensure consistent test results between runs.
var didLoadSubframes = appendIframe("resources/pageshow-pagehide-subframe-cachable.html").then(() => appendIframe("resources/pageshow-pagehide-subframe-cachable-2.html"));

function appendIframe(url)
{
    var promise = new Promise((resolve, reject) => {
        var iframe = document.createElement("iframe");
        iframe.onload = resolve;
        iframe.src = url;
        document.body.appendChild(iframe);
    });
    return promise;
}

function log(message)
{
    // Logging to the console instead of the "log" DIV in the DOM because
    // otherwise we trigger the assert mentioned at http://webkit.org/b/43152
    // (since we log during pagehide)
    console.log(message);
}

log("***Top level frame being parsed for the initial page load***");

window.onload = function(evt) {
    log("Main frame window.onload");
}

window.onpageshow = function(evt) {
    log("Main frame window.onpageshow" + ", target = " + evt.target + ", persisted = " + evt.persisted);
    if (evt.persisted) {
        if (window.testRunner)
            testRunner.notifyDone();
    } else {
        log("***Navigating top-level frame to a page that will immediately navigate back to this one***");
        didLoadSubframes.then(() => {
            // Location changes need to happen outside the onload handler to generate history entries.
            setTimeout(() => { window.location.href = "data:text/html,<script>history.back();</scr" + "ipt>"; }, 0);
        });
    }
}

window.onpagehide = function(evt) {
    log("Main frame window.onpagehide" + ", target = " + evt.target + ", persisted = " + evt.persisted);
}

</script>
</html>
