<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.php for more details.

if (window.testRunner) {
    testRunner.dumpAsText();
    testRunner.dumpBackForwardList();
    window.internals.setResourceLoadStatisticsEnabled(true);
    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-statistics.php';
    }, 0);
}
</script>
