diff options
Diffstat (limited to 'dom/tests/mochitest/general/historyframes.html')
-rw-r--r-- | dom/tests/mochitest/general/historyframes.html | 156 |
1 files changed, 156 insertions, 0 deletions
diff --git a/dom/tests/mochitest/general/historyframes.html b/dom/tests/mochitest/general/historyframes.html new file mode 100644 index 000000000..def5fd171 --- /dev/null +++ b/dom/tests/mochitest/general/historyframes.html @@ -0,0 +1,156 @@ +<!DOCTYPE HTML> +<html> +<!-- +https://bugzilla.mozilla.org/show_bug.cgi?id=602256 +--> +<head> + <title>Test for Bug 602256</title> +</head> +<body onload="SimpleTest.executeSoon(run_test)"> +<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=602256">Mozilla Bug 602256</a> +<div id="content"> + <iframe id="iframe" src="data:text/html,<p%20id='text'>Start</p>"></iframe> +</div> +<pre id="test"> +<script type="application/javascript"> + +/** Test for Bug 602256 **/ + +var testWin = window.opener ? window.opener : window.parent; + +var SimpleTest = testWin.SimpleTest; +function is() { testWin.is.apply(testWin, arguments); } + +var gFrame = null; + +var gState = null; + +window.addEventListener("popstate", function(aEvent) { + gState = aEvent.state; +}, false); + +function waitForLoad() { + function listener() { + gFrame.removeEventListener("load", listener, false); + SimpleTest.executeSoon(continue_test); + } + + gFrame.addEventListener("load", listener, false); +} + +function loadContent(aURL) { + waitForLoad(); + + gFrame.src = aURL; +} + +function getURL() { + return gFrame.contentDocument.documentURI; +} + +function getContent() { + return gFrame.contentDocument.getElementById("text").textContent; +} + +var START = "data:text/html,<p%20id='text'>Start</p>"; +var URL1 = "data:text/html,<p%20id='text'>Test1</p>"; +var URL2 = "data:text/html,<p%20id='text'>Test2</p>"; + +function run_test() { + window.history.pushState("START", window.location); + + gFrame = document.getElementById("iframe"); + + continue_test(); +} + +function* test_body() +{ + yield* test_basic_inner_navigation(); + yield* test_state_navigation(); +} + +var gTestContinuation = null; + +function continue_test() { + if (!gTestContinuation) { + gTestContinuation = test_body(); + } + var ret = gTestContinuation.next(); + if (ret.done) { + testWin.done(); + } +} + +function* test_basic_inner_navigation() { + // Navigate the inner frame a few times + yield loadContent(URL1); + is(getURL(), URL1, "URL should be correct"); + is(getContent(), "Test1", "Page should be correct"); + + yield loadContent(URL2); + + is(getURL(), URL2, "URL should be correct"); + is(getContent(), "Test2", "Page should be correct"); + + // Test that history is working + window.history.back(); + yield waitForLoad(); + is(getURL(), URL1, "URL should be correct"); + is(getContent(), "Test1", "Page should be correct"); + + window.history.forward(); + yield waitForLoad(); + is(getURL(), URL2, "URL should be correct"); + is(getContent(), "Test2", "Page should be correct"); +} + +function* test_state_navigation() { + window.history.pushState("STATE1", window.location); + + is(getURL(), URL2, "URL should be correct"); + is(getContent(), "Test2", "Page should be correct"); + + window.history.pushState("STATE2", window.location); + + is(getURL(), URL2, "URL should be correct"); + is(getContent(), "Test2", "Page should be correct"); + + window.history.back(); + + is(gState, "STATE1", "State should be correct"); + is(getURL(), URL2, "URL should be correct"); + is(getContent(), "Test2", "Page should be correct"); + + window.history.forward(); + + is(gState, "STATE2", "State should be correct"); + is(getURL(), URL2, "URL should be correct"); + is(getContent(), "Test2", "Page should be correct"); + + window.history.back(); + window.history.back(); + + is(gState, "START", "State should be correct"); + is(getURL(), URL2, "URL should be correct"); + is(getContent(), "Test2", "Page should be correct"); + + window.history.back(); + is(gState, "START", "State should be correct"); + yield waitForLoad(); + + is(getURL(), URL1, "URL should be correct"); + is(getContent(), "Test1", "Page should be correct"); + + window.history.back(); + is(gState, "START", "State should be correct after going back twice"); + yield waitForLoad(); + + is(gState, "START", "State should be correct"); + is(getURL(), START, "URL should be correct"); + is(getContent(), "Start", "Page should be correct"); +} +</script> +</pre> +</body> +</html> |