diff options
Diffstat (limited to 'docshell/test/test_bfcache_plus_hash.html')
-rw-r--r-- | docshell/test/test_bfcache_plus_hash.html | 120 |
1 files changed, 120 insertions, 0 deletions
diff --git a/docshell/test/test_bfcache_plus_hash.html b/docshell/test/test_bfcache_plus_hash.html new file mode 100644 index 000000000..30c0b6b50 --- /dev/null +++ b/docshell/test/test_bfcache_plus_hash.html @@ -0,0 +1,120 @@ +<!DOCTYPE HTML> +<html> +<!-- +https://bugzilla.mozilla.org/show_bug.cgi?id=646641 +--> +<head> + <title>Test for Bug 646641</title> + <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script> + <script type="text/javascript" src="/tests/SimpleTest/WindowSnapshot.js"></script> + <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/> +</head> +<body> +<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=646641">Mozilla Bug 646641</a> +<p id="display"></p> +<div id="content" style="display: none"> + +</div> +<pre id="test"> +<script type="application/javascript;version=1.7"> + +/** Test for Bug 646641 **/ + +/* + * In a popup (because navigating the main frame confuses Mochitest), do the + * following: + * + * * Call history.pushState(). + * * Navigate to a new page. + * * Go back two history entries. + * + * Check that we go back, we retrieve the document from bfcache. + */ + +SimpleTest.waitForExplicitFinish(); + +function debug(msg) { + // Wrap dump so we can turn debug messages on and off easily. + dump(msg + '\n'); +} + +var expectedLoadNum = -1; +function childLoad(n) { + if (n == expectedLoadNum) { + debug('Got load ' + n); + expectedLoadNum = -1; + + // Spin the event loop before calling gGen.next() so the generator runs + // outside the onload handler. This prevents us from encountering all + // sorts of docshell quirks. + // + // (I don't know why I need to wrap gGen.next() in a function, but it + // throws an error otherwise.) + setTimeout(function() { gGen.next() }, 0); + } + else { + debug('Got unexpected load ' + n); + ok(false, 'Got unexpected load ' + n); + } +} + +var expectedPageshowNum = -1; +function childPageshow(n) { + if (n == expectedPageshowNum) { + debug('Got expected pageshow ' + n); + expectedPageshowNum = -1; + ok(true, 'Got expected pageshow ' + n); + setTimeout(function() { gGen.next() }, 0); + } + else { + debug('Got pageshow ' + n); + } + + // Since a pageshow comes along with an onload, don't fail the test if we get + // an unexpected pageshow. +} + +function waitForLoad(n) { + debug('Waiting for load ' + n); + expectedLoadNum = n; +} + +function waitForShow(n) { + debug('Waiting for show ' + n); + expectedPageshowNum = n; +} + +function test() { + var popup = window.open('data:text/html,' + + '<html><body onload="opener.childLoad(1)" ' + + 'onpageshow="opener.childPageshow(1)">' + + 'Popup 1' + + '</body></html>'); + waitForLoad(1); + yield undefined; + + popup.history.pushState('', '', ''); + + popup.location = 'data:text/html,<html><body onload="opener.childLoad(2)">Popup 2</body></html>'; + waitForLoad(2); + yield undefined; + + // Now go back 2. The first page should be retrieved from bfcache. + popup.history.go(-2); + waitForShow(1); + yield undefined; + + popup.close(); + SimpleTest.finish(); + + // Yield once more so we don't throw a StopIteration exception. + yield undefined; +} + +var gGen = test(); +gGen.next(); + +</script> +</pre> +</body> +</html> |