diff --git a/dom/tests/browser/browser.toml b/dom/tests/browser/browser.toml index 24b9e5a7ef67..dd1e541e5dd3 100644 --- a/dom/tests/browser/browser.toml +++ b/dom/tests/browser/browser.toml @@ -162,6 +162,13 @@ support-files = [ "page_scriptCache_load_events.html", ] +["browser_scriptCache_container.js"] +skip-if = ["!nightly_build"] +support-files = [ + "page_scriptCache_container.html", + "counter_server.sjs", +] + ["browser_scriptCache_partition.js"] skip-if = ["!nightly_build"] support-files = [ diff --git a/dom/tests/browser/browser_scriptCache_container.js b/dom/tests/browser/browser_scriptCache_container.js new file mode 100644 index 000000000000..1c124ea081fa --- /dev/null +++ b/dom/tests/browser/browser_scriptCache_container.js @@ -0,0 +1,59 @@ +const TEST_URL = + "https://example.com/browser/dom/tests/browser/page_scriptCache_container.html"; + +const TEST_SCRIPT_URL = + "https://example.com/browser/dom/tests/browser/counter_server.sjs"; + +async function testScriptCache({ enableCache }) { + await SpecialPowers.pushPrefEnv({ + set: [["dom.script_loader.navigation_cache", enableCache]], + }); + registerCleanupFunction(() => SpecialPowers.popPrefEnv()); + + const response1 = await fetch(TEST_SCRIPT_URL + "?reset"); + is(await response1.text(), "reset", "Server state should be reset"); + + ChromeUtils.clearResourceCache(); + Services.cache2.clear(); + + async function getCounter(tab) { + return SpecialPowers.spawn(tab.linkedBrowser, [], () => { + return content.document.body.getAttribute("counter"); + }); + } + + async function openTab(url, userContextId) { + const tab = BrowserTestUtils.addTab(gBrowser, url, { userContextId }); + await BrowserTestUtils.browserLoaded(tab.linkedBrowser); + return tab; + } + + // Loading script from different containers should use separate cache. + const tab0 = await openTab(TEST_URL, 1); + is(await getCounter(tab0), "0"); + + const tab1 = await openTab(TEST_URL, 2); + is(await getCounter(tab1), "1"); + + // Reloading the page should use the cached script, for each container. + await BrowserTestUtils.reloadTab(tab0); + is(await getCounter(tab0), "0"); + + await BrowserTestUtils.reloadTab(tab1); + is(await getCounter(tab1), "1"); + + BrowserTestUtils.removeTab(tab0); + BrowserTestUtils.removeTab(tab1); +} + +add_task(async function testNoCache() { + await testScriptCache({ + enableCache: false, + }); +}); + +add_task(async function testCache() { + await testScriptCache({ + enableCache: true, + }); +}); diff --git a/dom/tests/browser/page_scriptCache_container.html b/dom/tests/browser/page_scriptCache_container.html new file mode 100644 index 000000000000..37589a4f65aa --- /dev/null +++ b/dom/tests/browser/page_scriptCache_container.html @@ -0,0 +1,8 @@ + +
+ +