fune/docshell/test/browser/browser_bug1328501.js
Olli Pettay 9b7e635703 Bug 1705489 - update docshell/test/browser/browser_bug1328501.js to pass on Fission+BFCache, r=peterv
The test is using a framescript to have an observer for "http-on-opening-request".
That is used for the actual testpage but we need to prevent the next page to enter bfcache, so that
when going back from the session history frameloader isn't changed.
So in this case disabling bfcache should be fine.

Differential Revision: https://phabricator.services.mozilla.com/D112245
2021-04-20 11:33:16 +00:00

64 lines
2.4 KiB
JavaScript

const HTML_URL =
"http://mochi.test:8888/browser/docshell/test/browser/file_bug1328501.html";
const FRAME_URL =
"http://mochi.test:8888/browser/docshell/test/browser/file_bug1328501_frame.html";
const FRAME_SCRIPT_URL =
"chrome://mochitests/content/browser/docshell/test/browser/file_bug1328501_framescript.js";
add_task(async function testMultiFrameRestore() {
await SpecialPowers.pushPrefEnv({
set: [
["browser.navigation.requireUserInteraction", false],
// Disable bfcache so that dummy_page.html doesn't enter there.
// The actual test page does already prevent bfcache and the test
// is just for http-on-opening-request handling in the child process.
["browser.sessionhistory.max_total_viewers", 0],
],
});
await BrowserTestUtils.withNewTab({ gBrowser, url: HTML_URL }, async function(
browser
) {
// Navigate 2 subframes and load about:blank.
let browserLoaded = BrowserTestUtils.browserLoaded(browser);
await SpecialPowers.spawn(browser, [FRAME_URL], async function(FRAME_URL) {
function frameLoaded(frame) {
frame.contentWindow.location = FRAME_URL;
return new Promise(r => (frame.onload = r));
}
let frame1 = content.document.querySelector("#testFrame1");
let frame2 = content.document.querySelector("#testFrame2");
ok(frame1, "check found testFrame1");
ok(frame2, "check found testFrame2");
await frameLoaded(frame1);
await frameLoaded(frame2);
content.location = "dummy_page.html";
});
await browserLoaded;
// Load a frame script to query nsIDOMWindow on "http-on-opening-request",
// which will force about:blank content viewers being created.
browser.messageManager.loadFrameScript(FRAME_SCRIPT_URL, false);
// The frame script also forwards frames-loaded.
let framesLoaded = BrowserTestUtils.waitForMessage(
browser.messageManager,
"test:frames-loaded"
);
browser.goBack();
await framesLoaded;
// eslint-disable-next-line mozilla/no-arbitrary-setTimeout
await new Promise(r => setTimeout(r, 1000));
await SpecialPowers.spawn(browser, [FRAME_URL], FRAME_URL => {
is(
content.document.querySelector("#testFrame1").contentWindow.location
.href,
FRAME_URL
);
is(
content.document.querySelector("#testFrame2").contentWindow.location
.href,
FRAME_URL
);
});
});
});