<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();
}

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

</script>
<body onload="runTest();" onpopstate="statePopped();">
<pre>
This test does the following:
-Uses body.onpopstate to add a popstate handler (both by using the inline attribute and a script-assigned attribute)
-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>
