Source code
Revision control
Copy as Markdown
Other Tools
Test Info: Warnings
- This test gets skipped with pattern: os == 'win' && socketprocess_networking && fission
- Manifest: toolkit/components/extensions/test/xpcshell/xpcshell-remote.toml includes toolkit/components/extensions/test/xpcshell/xpcshell-common.toml
- Manifest: toolkit/components/extensions/test/xpcshell/xpcshell.toml includes toolkit/components/extensions/test/xpcshell/xpcshell-common.toml
"use strict";
const server = createHttpServer({ hosts: ["example.com"] });
server.registerDirectory("/data/", do_get_file("data"));
// The JavaScript disk cache stores the serialized stencil into the necko's
// alternative data stream. The request that uses the disk cache goes through
// necko, and the webRequest listeners are called.
//
// The JavaScript in-memory cache is stored in each content process, and
// the request that uses the in-memory cache doesn't go through necko, and
// the webRequest listeners are not called.
add_task(async function test_noDiskCache_noMemoryCache() {
await test_filterResponseData({
diskCache: false,
memoryCache: false,
listenersShouldBeCalled: true,
});
});
add_task(async function test_useDiskCache_noMemoryCache() {
await test_filterResponseData({
diskCache: true,
memoryCache: false,
listenersShouldBeCalled: true,
});
});
add_task(async function test_noDiskCache_useMemoryCache() {
if (!AppConstants.NIGHTLY_BUILD) {
// TODO bug 2024970: unskip when enables on non-Nightly.
todo_check_true(
false,
"navigation cache is not yet enabled on non-nightly"
);
return;
}
await test_filterResponseData({
diskCache: false,
memoryCache: true,
listenersShouldBeCalled: false,
});
});
add_task(async function test_useDiskCache_useMemoryCache() {
if (!AppConstants.NIGHTLY_BUILD) {
// TODO bug 2024970: unskip when enables on non-Nightly.
todo_check_true(
false,
"navigation cache is not yet enabled on non-nightly"
);
return;
}
await test_filterResponseData({
diskCache: true,
memoryCache: true,
listenersShouldBeCalled: false,
});
});
async function test_filterResponseData({
diskCache,
memoryCache,
listenersShouldBeCalled,
}) {
Services.cache2.clear();
ChromeUtils.clearResourceCache();
if (diskCache) {
Services.prefs.setBoolPref(
"dom.script_loader.bytecode_cache.enabled",
true
);
Services.prefs.setIntPref("dom.script_loader.bytecode_cache.strategy", -1);
} else {
Services.prefs.setBoolPref(
"dom.script_loader.bytecode_cache.enabled",
false
);
}
if (memoryCache) {
Services.prefs.setBoolPref(
"dom.script_loader.experimental.navigation_cache",
true
);
Services.prefs.setBoolPref(
"dom.script_loader.experimental.navigation_cache.check_memory_pressure",
false
);
} else {
Services.prefs.setBoolPref(
"dom.script_loader.experimental.navigation_cache",
false
);
}
let extension = ExtensionTestUtils.loadExtension({
background() {
browser.webRequest.onBeforeRequest.addListener(
() => {
browser.test.sendMessage("onBeforeRequest");
},
{
urls: ["http://example.com/data/file_script_good.js"],
},
["blocking"]
);
browser.webRequest.onHeadersReceived.addListener(
() => {
browser.test.sendMessage("onHeadersReceived");
},
{
urls: ["http://example.com/data/file_script_good.js"],
},
["blocking"]
);
// NOTE: Do not explicitly call browser.webRequest.handlerBehaviorChanged,
// in order to test the cached behavior.
},
manifest: {
permissions: ["webRequest", "webRequestBlocking", "http://example.com/*"],
},
});
let contentPage = await ExtensionTestUtils.loadContentPage(
);
await extension.startup();
// Use the same ContentPage, so that the in-memory cache is shared across
// those two loads.
await contentPage.loadURL("http://example.com/data/file_script.html");
if (listenersShouldBeCalled) {
await Promise.all([
extension.awaitMessage("onBeforeRequest"),
extension.awaitMessage("onHeadersReceived"),
]);
} else {
// NOTE: The test harness should catch if there's any unhandled message.
}
await contentPage.close();
await extension.unload();
Services.prefs.clearUserPref(
"dom.script_loader.experimental.navigation_cache"
);
Services.prefs.clearUserPref("dom.script_loader.bytecode_cache.enabled");
Services.prefs.clearUserPref("dom.script_loader.bytecode_cache.strategy");
}