<html>
<head>
<script>

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

function log(txt)
{
    document.getElementById("logger").innerText += txt + "\n";
}

function runTest()
{
    history.pushState("StateStringData", "New title");
    log("History length is " + history.length);
    history.back();
}

var beganTest = false;

function statePopped()
{
    // The first time popstate fires, it's because the page has finished loading.
    // Only then can we begin the test.
    if (!beganTest) {
        beganTest = true;
        runTest();
        return;
    }

    log("State popped - " + event.state + " (type " + typeof event.state + ")");
    if (event.state == null)
        history.forward();
    else if (window.testRunner)
        testRunner.notifyDone();
}

window.onpopstate = statePopped;

</script>
<body>
<pre>
This test does the following:
-Uses window.onpopstate to add a popstate handler
-Makes a call to pushState()
-Makes sure the history length is correct
-Goes back, and makes sure the popstate event is correct
-Goes forward, and makes sure the popstate event is correct
</pre><br>
<pre id="logger"></pre>
</body>
</html>
