<!-- webkit-test-runner [ enablePageCache=true ] -->
<!DOCTYPE html>
<html>
<body>
<p>This tests navigation while being restored from a page cache. WebKit should not hit any debug assertions.</p>
<div id="result">
<input id="input">
<button onclick="delete sessionStorage.testStage; runTest()">Start test</button>
</div>
<script>

if (window.testRunner) {
    testRunner.clearBackForwardList();
    testRunner.dumpAsText();
    testRunner.waitUntilDone();
    internals.clearPageCache();
}
sessionStorage.testStage = 'initial';
let persisted = false;

window.addEventListener("pageshow", () => {
    switch (sessionStorage.testStage) {
    case 'initial':
        if (window.testRunner)
            setTimeout(runTest, 0);
        break;
    case 'navigate':
        location.href = 'resources/navigate-back-with-finish-test-stage.html';
        break;
    case 'finish':
        document.getElementById('result').textContent = persisted ? 'PASS' : 'FAIL - Not put into the page cache';
        delete sessionStorage.testStage;
        if (window.testRunner)
            testRunner.notifyDone();
        break;
    }
});

function runTest()
{
    sessionStorage.testStage = 'navigate';
    input.setAttribute('autofocus', '');
    document.getElementById('input').addEventListener('focus', navigate);
    persisted = true;
    location.href = 'resources/page-cache-helper.html';
}

function navigate()
{
    if (sessionStorage.testStage != 'navigate')
        return;
    location.href = 'resources/navigate-back-with-finish-test-stage.html';
    document.getElementById('result').textContent = 'FAIL';
}

function finish() {
    document.getElementById('result').textContent = 'PASS';
    setTimeout(() => {
        delete sessionStorage.testStage;
        if (window.testRunner)
            testRunner.notifyDone();
    }, 0);
}

</script>
</body>
</html>
