summaryrefslogtreecommitdiffstats
path: root/docshell/test/test_bfcache_plus_hash.html
diff options
context:
space:
mode:
Diffstat (limited to 'docshell/test/test_bfcache_plus_hash.html')
-rw-r--r--docshell/test/test_bfcache_plus_hash.html120
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>