63 lines
2.5 KiB
HTML
63 lines
2.5 KiB
HTML
<html>
|
|
<head>
|
|
<title>
|
|
Test that ensures beforeunload is fired when session-history-in-parent is enabled
|
|
</title>
|
|
<script src="/tests/SimpleTest/SimpleTest.js"></script>
|
|
<link rel="stylesheet" href="/tests/SimpleTest/test.css"/>
|
|
</head>
|
|
<script>
|
|
SimpleTest.waitForExplicitFinish();
|
|
|
|
/*
|
|
* This test ensures beforeunload is fired on the current page
|
|
* when it is entering BFCache and the next page is coming out
|
|
* from BFCache
|
|
*
|
|
* (1) The controller page opens a new window, and page A is loaded there.
|
|
* (2) Page A then navigates to page B, and a beforeunload event
|
|
* listener is registered on page B.
|
|
* (3) Page B then navigates back to page A, and the beforeunload handler
|
|
* should send a message to the controller page.
|
|
* (4) Page A then navigates back to page B to check if page B has
|
|
* been successfully added to BFCache.
|
|
*/
|
|
|
|
var bc = SpecialPowers.wrap(BroadcastChannel).unpartitionedTestingChannel("ship_beforeunload");
|
|
var pageshowCount = 0;
|
|
var beforeUnloadFired = false;
|
|
bc.onmessage = function(event) {
|
|
if (event.data.type == "pageshow") {
|
|
++pageshowCount;
|
|
if (pageshowCount == 1) {
|
|
bc.postMessage({action: "navigate_to_page_b"});
|
|
} else if (pageshowCount == 2) {
|
|
ok(!event.data.persisted, "?pageb shouldn't in BFCache because it's the first navigation");
|
|
bc.postMessage({action: "register_beforeunload", loadNextPageFromSessionHistory: true});
|
|
} else if (pageshowCount == 3) {
|
|
ok(event.data.persisted, "navigated back to page A that was in BFCacache from page B");
|
|
ok(beforeUnloadFired, "beforeunload has fired on page B");
|
|
bc.postMessage({action: "back_to_page_b", forwardNavigateToPageB: true});
|
|
} else if (pageshowCount == 4) {
|
|
ok(event.data.persisted, "page B has beforeunload fired and also entered BFCache");
|
|
bc.postMessage({action: "close"});
|
|
SimpleTest.finish();
|
|
}
|
|
} else if (event.data == "beforeunload_fired") {
|
|
beforeUnloadFired = true;
|
|
}
|
|
}
|
|
|
|
function runTest() {
|
|
SpecialPowers.pushPrefEnv({"set": [
|
|
["fission.bfcacheInParent", true],
|
|
["docshell.shistory.bfcache.ship_allow_beforeunload_listeners", true]
|
|
]},
|
|
function() {
|
|
window.open("file_ship_beforeunload_fired.html", "", "noopener");
|
|
}
|
|
);
|
|
}
|
|
</script>
|
|
<body onload="runTest()"></body>
|
|
</html>
|