| <html> |
| <head> |
| <script> |
| |
| if (window.testRunner) { |
| if (!sessionStorage.stage) |
| testRunner.clearBackForwardList(); |
| testRunner.dumpAsText(); |
| testRunner.waitUntilDone(); |
| } |
| |
| function lastPathComponent() |
| { |
| return window.location.href.split('/').pop(); |
| } |
| |
| function runFirstStageOfTest() |
| { |
| history.replaceState("FirstEntry", null, "?FirstEntry"); |
| history.pushState("SecondEntry", null, "?SecondEntry"); |
| history.back(); |
| } |
| |
| function runSecondStageOfTest() |
| { |
| alert("Last path component of location is " + lastPathComponent()); |
| } |
| |
| function runThirdStageOfTest() |
| { |
| alert("Final stage of test loaded"); |
| } |
| |
| function runTest() |
| { |
| if (!sessionStorage.stage) { |
| // Location changes need to happen outside the onload handler to generate history entries. |
| setTimeout(runFirstStageOfTest, 0); |
| } else if (sessionStorage.stage == 2) |
| runSecondStageOfTest(); |
| else if (sessionStorage.stage == 3) |
| runThirdStageOfTest(); |
| } |
| |
| function statePopped() |
| { |
| alert("State popped - " + event.state + " (type " + typeof event.state + ")"); |
| if (event.state == "FirstEntry") { |
| history.replaceState("FirstEntryWillLaterBeReactivated", null, "?FirstEntryWillLaterBeReactivated"); |
| history.forward(); |
| } else if (event.state == "SecondEntry") { |
| history.replaceState("SecondEntryWillLaterBeReactivated", null, "?SecondEntryWillLaterBeReactivated"); |
| window.location = "resources/navigate-back.html"; |
| } else if (event.state == "SecondEntryWillLaterBeReactivated") |
| history.back(); |
| else if (event.state == "FirstEntryWillLaterBeReactivated") { |
| alert("Test complete"); |
| sessionStorage.clear(); |
| if (window.testRunner) |
| testRunner.notifyDone(); |
| } |
| } |
| |
| </script> |
| <body onload="runTest();" onpopstate="statePopped();" onunload="/* disable page cache */"> |
| <pre> |
| This test: |
| -Builds up a list of state object entries with fragment URLs. |
| -Navigates through them to verify that the popstate event is fired. |
| -Navigates away to a new document, with the old document being destroyed. |
| -Navigates back to the state object entries and verifies the popstate event is fired even on the new documents. |
| </pre><br> |
| <pre id="logger"></pre> |
| </body> |
| </html> |