<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.replaceState(1, "Replaced title");
    log("History length is " + history.length);
    history.back();
}

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

</script>
<body onload="runTest();">
<pre>
This test does the following:
-Makes a call to pushState()
-Makes sure the history length is correct
-Makes a call to replaceState()
-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 represents the replaced state object
</pre><br>
<pre id="logger"></pre>
</body>
</html>
