// Test ensures that when a page goes to BFCache, it won't // accidentally update the active browsing context to null to // the parent process.
add_task(async function () { // Load Site 1 const tab = await BrowserTestUtils.openNewForegroundTab(gBrowser, SITE_URL_1);
BrowserTestUtils.startLoadingURIString(tab.linkedBrowser, SITE_URL_2); // Navigated to Site 2 in the same tab
await BrowserTestUtils.browserLoaded(tab.linkedBrowser);
const pageNavigatedBackToSite1 = BrowserTestUtils.waitForContentEvent(
tab.linkedBrowser, "pageshow"
);
tab.linkedBrowser.goBack(); // Navigated site 1 by going back
await pageNavigatedBackToSite1;
const pageHideForSite1Run = SpecialPowers.spawn(tab.linkedBrowser, [], () => { returnnew Promise(r => {
content.addEventListener("pagehide", function () { const start = Date.now(); // block the main thread for 2 seconds. while (Date.now() - start < 2000) {
r();
}
});
});
});
let pageNavigatedBackToSite2 = BrowserTestUtils.waitForContentEvent(
tab.linkedBrowser, "pageshow"
);
// Navigate to site 2 again by going forward. // // In a buggy Firefox build, this navigation would trigger // two activeBrowsingContextInChrome updates. One from // site 1 to set it to nullptr, and one from the site 2 // to itself.
tab.linkedBrowser.goForward();
await pageNavigatedBackToSite2; // Forcefully to make site 1 to update activeBrowsingContextInChrome // after site 2.
await pageHideForSite1Run;
// Give the parent process some opportunities to update // the activeBrowsingContextInChrome via IPC.
await new Promise(r => { /* eslint-disable mozilla/no-arbitrary-setTimeout */
setTimeout(r, 2000);
});
Assert.ok(
!!FocusManager.activeContentBrowsingContext, "active browsing context in content should be non-null"
);
BrowserTestUtils.removeTab(tab);
});
¤ Dauer der Verarbeitung: 0.26 Sekunden
(vorverarbeitet)
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung ist noch experimentell.