<script src="resources/redirect-updates-history-item.js"></script>
<script>

// Test that we properly update a history item when reloading the history item
// results in a redirect to a different document.  We verify that the resulting
// document is not treated as the same document as the original document in
// history.  See redirect-on-reload-updates-history-item.py for more details.

if (window.testRunner) {
    testRunner.dumpAsText();
    testRunner.dumpBackForwardList();
    testRunner.waitUntilDone();
}
onload = function() {
    setTimeout(function() {
        // These fields are used by subsequent pages in this test.  Clear them
        // to avoid confusing the test with old state.
        clearLocationCookie();
        delete sessionStorage.done;

        location = 'resources/redirect-on-reload-updates-history-item.py';
    }, 0);
}
</script>
