<!DOCTYPE html>
<html>
<body>
<script src="../../../resources/js-test-pre.js"></script>
<div id="description"></div>
<pre id="console"></pre>
<script>
description('No popstate event should be fired when WebKit navigates back to a stateless history entry.');

var testWindow;

onload = function()
{
    if (window.testRunner)
        testRunner.setCanOpenWindows();
    testWindow = window.open('resources/no-popstate-when-back-to-stateless-entry-1.html');
    if (!testWindow)
        testFailed('Could not open test window');
}

var testWindowLoadFireCount = 0;

function onTestWindowLoad(event)
{
    debug('load fired');
    testWindowLoadFireCount++;

    switch (testWindowLoadFireCount) {
    case 1:
        debug('going to page 2');
        // Set the location in a timeout to generate a history entry
        setTimeout(function() {testWindow.location.href = 'resources/no-popstate-when-back-to-stateless-entry-2.html';}, 0);
        break;
    case 2:
        debug('going back to page 1');
        setTimeout(function() {testWindow.history.back();}, 0);
        break;
    default:
        debug('back at page 1');
        // Close the window in a timeout to guarantee that the test will not finish before a potential popstate event.
        setTimeout(function() {
            testWindow.close();
            finishJSTest();
        }, 0);
        break;
    }
}

function onTestWindowPopState(event)
{
    testFailed('unexpected pop state event state');
}

var jsTestIsAsync = true;
</script>
<script src="../../../resources/js-test-post.js"></script>
</html>