commit bb734f5691e0f26c4d4a0564fb5687d1250b51e6
parent 3f51581da2236eb83e7f869c3df8572efdede490
Author: Tooru Fujisawa <arai_a@mac.com>
Date: Wed, 5 Nov 2025 04:09:46 +0000
Bug 1853173 - Part 6: Add tests for SRI. r=nbp
Differential Revision: https://phabricator.services.mozilla.com/D271027
Diffstat:
1 file changed, 1278 insertions(+), 0 deletions(-)
diff --git a/dom/base/test/browser_script_loader_js_cache.js b/dom/base/test/browser_script_loader_js_cache.js
@@ -1504,3 +1504,1281 @@ add_task(async function testMemoryCache_InvalidSRI() {
await SpecialPowers.popPrefEnv();
});
+
+add_task(async function testDiskCache_SRI() {
+ await SpecialPowers.pushPrefEnv({
+ set: [
+ ["dom.expose_test_interfaces", true],
+ ["dom.script_loader.bytecode_cache.enabled", true],
+ ["dom.script_loader.bytecode_cache.strategy", 0],
+ ["dom.script_loader.experimental.navigation_cache", false],
+ ],
+ });
+
+ await runTests([
+ {
+ title: "SRI on classic",
+ items: [
+ {
+ file: "file_js_cache_large.js",
+ sri: "sha384-vJ7r8qsSxGVQwKbj+5A1avW8CEb6bODkGULlUVOmqN81D6XQzaTFhspcWmO+PVSQ",
+ events: [
+ ev("load:source", "file_js_cache_large.js"),
+ ev("evaluate:classic", "file_js_cache_large.js"),
+ ev("diskcache:disabled", "file_js_cache_large.js"),
+ ],
+ },
+ {
+ file: "file_js_cache_large.js",
+ sri: "sha384-vJ7r8qsSxGVQwKbj+5A1avW8CEb6bODkGULlUVOmqN81D6XQzaTFhspcWmO+PVSQ",
+ events: [
+ ev("load:source", "file_js_cache_large.js"),
+ ev("evaluate:classic", "file_js_cache_large.js"),
+ ev("diskcache:disabled", "file_js_cache_large.js"),
+ ],
+ },
+ {
+ file: "file_js_cache_large.js",
+ sri: "sha384-vJ7r8qsSxGVQwKbj+5A1avW8CEb6bODkGULlUVOmqN81D6XQzaTFhspcWmO+PVSQ",
+ events: [
+ ev("load:source", "file_js_cache_large.js"),
+ ev("evaluate:classic", "file_js_cache_large.js"),
+ ev("diskcache:disabled", "file_js_cache_large.js"),
+ ],
+ },
+ {
+ file: "file_js_cache_large.js",
+ sri: "sha384-vJ7r8qsSxGVQwKbj+5A1avW8CEb6bODkGULlUVOmqN81D6XQzaTFhspcWmO+PVSQ",
+ events: [
+ ev("load:source", "file_js_cache_large.js"),
+ ev("evaluate:classic", "file_js_cache_large.js"),
+ ev("diskcache:register", "file_js_cache_large.js"),
+ ev("diskcache:saved", "file_js_cache_large.js", false),
+ ],
+ },
+ {
+ file: "file_js_cache_large.js",
+ sri: "sha384-vJ7r8qsSxGVQwKbj+5A1avW8CEb6bODkGULlUVOmqN81D6XQzaTFhspcWmO+PVSQ",
+ events: [
+ ev("load:diskcache", "file_js_cache_large.js"),
+ ev("evaluate:classic", "file_js_cache_large.js"),
+ ev("diskcache:disabled", "file_js_cache_large.js"),
+ ],
+ },
+ ],
+ },
+
+ {
+ title: "SRI on module",
+ module: true,
+ items: [
+ {
+ file: "file_js_cache_large.js",
+ sri: "sha384-vJ7r8qsSxGVQwKbj+5A1avW8CEb6bODkGULlUVOmqN81D6XQzaTFhspcWmO+PVSQ",
+ events: [
+ ev("load:source", "file_js_cache_large.js"),
+ ev("evaluate:module", "file_js_cache_large.js"),
+ ev("diskcache:disabled", "file_js_cache_large.js"),
+ ],
+ },
+ {
+ file: "file_js_cache_large.js",
+ sri: "sha384-vJ7r8qsSxGVQwKbj+5A1avW8CEb6bODkGULlUVOmqN81D6XQzaTFhspcWmO+PVSQ",
+ events: [
+ ev("load:source", "file_js_cache_large.js"),
+ ev("evaluate:module", "file_js_cache_large.js"),
+ ev("diskcache:disabled", "file_js_cache_large.js"),
+ ],
+ },
+ {
+ file: "file_js_cache_large.js",
+ sri: "sha384-vJ7r8qsSxGVQwKbj+5A1avW8CEb6bODkGULlUVOmqN81D6XQzaTFhspcWmO+PVSQ",
+ events: [
+ ev("load:source", "file_js_cache_large.js"),
+ ev("evaluate:module", "file_js_cache_large.js"),
+ ev("diskcache:disabled", "file_js_cache_large.js"),
+ ],
+ },
+ {
+ file: "file_js_cache_large.js",
+ sri: "sha384-vJ7r8qsSxGVQwKbj+5A1avW8CEb6bODkGULlUVOmqN81D6XQzaTFhspcWmO+PVSQ",
+ events: [
+ ev("load:source", "file_js_cache_large.js"),
+ ev("evaluate:module", "file_js_cache_large.js"),
+ ev("diskcache:register", "file_js_cache_large.js"),
+ ev("diskcache:saved", "file_js_cache_large.js", false),
+ ],
+ },
+ {
+ file: "file_js_cache_large.js",
+ sri: "sha384-vJ7r8qsSxGVQwKbj+5A1avW8CEb6bODkGULlUVOmqN81D6XQzaTFhspcWmO+PVSQ",
+ events: [
+ ev("load:diskcache", "file_js_cache_large.js"),
+ ev("evaluate:module", "file_js_cache_large.js"),
+ ev("diskcache:disabled", "file_js_cache_large.js"),
+ ],
+ },
+ ],
+ },
+ ]);
+
+ await SpecialPowers.popPrefEnv();
+});
+
+add_task(async function testMemoryCache_SRI() {
+ if (!AppConstants.NIGHTLY_BUILD) {
+ todo(false, "navigation cache is not yet enabled on non-nightly");
+ return;
+ }
+
+ await SpecialPowers.pushPrefEnv({
+ set: [
+ ["dom.expose_test_interfaces", true],
+ ["dom.script_loader.bytecode_cache.enabled", true],
+ ["dom.script_loader.bytecode_cache.strategy", 0],
+ ["dom.script_loader.experimental.navigation_cache", true],
+ ],
+ });
+
+ await runTests([
+ {
+ title: "SRI on classic",
+ items: [
+ {
+ file: "file_js_cache_large.js",
+ sri: "sha384-vJ7r8qsSxGVQwKbj+5A1avW8CEb6bODkGULlUVOmqN81D6XQzaTFhspcWmO+PVSQ",
+ events: [
+ ev("load:source", "file_js_cache_large.js"),
+ ev("memorycache:saved", "file_js_cache_large.js"),
+ ev("evaluate:classic", "file_js_cache_large.js"),
+ ev("diskcache:noschedule"),
+ ],
+ },
+ {
+ file: "file_js_cache_large.js",
+ sri: "sha384-vJ7r8qsSxGVQwKbj+5A1avW8CEb6bODkGULlUVOmqN81D6XQzaTFhspcWmO+PVSQ",
+ events: [
+ ev("load:memorycache", "file_js_cache_large.js"),
+ ev("evaluate:classic", "file_js_cache_large.js"),
+ ev("diskcache:noschedule"),
+ ],
+ },
+ {
+ file: "file_js_cache_large.js",
+ sri: "sha384-vJ7r8qsSxGVQwKbj+5A1avW8CEb6bODkGULlUVOmqN81D6XQzaTFhspcWmO+PVSQ",
+ events: [
+ ev("load:memorycache", "file_js_cache_large.js"),
+ ev("evaluate:classic", "file_js_cache_large.js"),
+ ev("diskcache:noschedule"),
+ ],
+ },
+ {
+ file: "file_js_cache_large.js",
+ sri: "sha384-vJ7r8qsSxGVQwKbj+5A1avW8CEb6bODkGULlUVOmqN81D6XQzaTFhspcWmO+PVSQ",
+ events: [
+ ev("load:memorycache", "file_js_cache_large.js"),
+ ev("evaluate:classic", "file_js_cache_large.js"),
+ ev("diskcache:saved", "file_js_cache_large.js", false),
+ ],
+ },
+ {
+ file: "file_js_cache_large.js",
+ sri: "sha384-vJ7r8qsSxGVQwKbj+5A1avW8CEb6bODkGULlUVOmqN81D6XQzaTFhspcWmO+PVSQ",
+ events: [
+ ev("load:memorycache", "file_js_cache_large.js"),
+ ev("evaluate:classic", "file_js_cache_large.js"),
+ ev("diskcache:noschedule"),
+ ],
+ },
+ ],
+ },
+
+ {
+ title: "SRI on module",
+ module: true,
+ items: [
+ {
+ file: "file_js_cache_large.js",
+ sri: "sha384-vJ7r8qsSxGVQwKbj+5A1avW8CEb6bODkGULlUVOmqN81D6XQzaTFhspcWmO+PVSQ",
+ events: [
+ ev("load:source", "file_js_cache_large.js"),
+ ev("memorycache:saved", "file_js_cache_large.js"),
+ ev("evaluate:module", "file_js_cache_large.js"),
+ ev("diskcache:noschedule"),
+ ],
+ },
+ {
+ file: "file_js_cache_large.js",
+ sri: "sha384-vJ7r8qsSxGVQwKbj+5A1avW8CEb6bODkGULlUVOmqN81D6XQzaTFhspcWmO+PVSQ",
+ events: [
+ ev("load:memorycache", "file_js_cache_large.js"),
+ ev("evaluate:module", "file_js_cache_large.js"),
+ ev("diskcache:noschedule"),
+ ],
+ },
+ {
+ file: "file_js_cache_large.js",
+ sri: "sha384-vJ7r8qsSxGVQwKbj+5A1avW8CEb6bODkGULlUVOmqN81D6XQzaTFhspcWmO+PVSQ",
+ events: [
+ ev("load:memorycache", "file_js_cache_large.js"),
+ ev("evaluate:module", "file_js_cache_large.js"),
+ ev("diskcache:noschedule"),
+ ],
+ },
+ {
+ file: "file_js_cache_large.js",
+ sri: "sha384-vJ7r8qsSxGVQwKbj+5A1avW8CEb6bODkGULlUVOmqN81D6XQzaTFhspcWmO+PVSQ",
+ events: [
+ ev("load:memorycache", "file_js_cache_large.js"),
+ ev("evaluate:module", "file_js_cache_large.js"),
+ ev("diskcache:saved", "file_js_cache_large.js", false),
+ ],
+ },
+ {
+ file: "file_js_cache_large.js",
+ sri: "sha384-vJ7r8qsSxGVQwKbj+5A1avW8CEb6bODkGULlUVOmqN81D6XQzaTFhspcWmO+PVSQ",
+ events: [
+ ev("load:memorycache", "file_js_cache_large.js"),
+ ev("evaluate:module", "file_js_cache_large.js"),
+ ev("diskcache:noschedule"),
+ ],
+ },
+ ],
+ },
+ ]);
+
+ await SpecialPowers.popPrefEnv();
+});
+
+add_task(async function testDiskCache_SRIAfterSave() {
+ await SpecialPowers.pushPrefEnv({
+ set: [
+ ["dom.expose_test_interfaces", true],
+ ["dom.script_loader.bytecode_cache.enabled", true],
+ ["dom.script_loader.bytecode_cache.strategy", 0],
+ ["dom.script_loader.experimental.navigation_cache", false],
+ ],
+ });
+
+ // If SRI is specified after the disk cache is created, it should
+ // fallback to the source, and then save again with the SRI.
+ await runTests([
+ {
+ title: "SRI on classic after save",
+ items: [
+ {
+ file: "file_js_cache_large.js",
+ events: [
+ ev("load:source", "file_js_cache_large.js"),
+ ev("evaluate:classic", "file_js_cache_large.js"),
+ ev("diskcache:disabled", "file_js_cache_large.js"),
+ ],
+ },
+ {
+ file: "file_js_cache_large.js",
+ events: [
+ ev("load:source", "file_js_cache_large.js"),
+ ev("evaluate:classic", "file_js_cache_large.js"),
+ ev("diskcache:disabled", "file_js_cache_large.js"),
+ ],
+ },
+ {
+ file: "file_js_cache_large.js",
+ events: [
+ ev("load:source", "file_js_cache_large.js"),
+ ev("evaluate:classic", "file_js_cache_large.js"),
+ ev("diskcache:disabled", "file_js_cache_large.js"),
+ ],
+ },
+ {
+ file: "file_js_cache_large.js",
+ events: [
+ ev("load:source", "file_js_cache_large.js"),
+ ev("evaluate:classic", "file_js_cache_large.js"),
+ ev("diskcache:register", "file_js_cache_large.js"),
+ ev("diskcache:saved", "file_js_cache_large.js", false),
+ ],
+ },
+ {
+ file: "file_js_cache_large.js",
+ sri: "sha384-vJ7r8qsSxGVQwKbj+5A1avW8CEb6bODkGULlUVOmqN81D6XQzaTFhspcWmO+PVSQ",
+ events: [
+ ev("load:diskcache", "file_js_cache_large.js"),
+ ev("load:fallback", "file_js_cache_large.js"),
+ ev("load:source", "file_js_cache_large.js"),
+ ev("evaluate:classic", "file_js_cache_large.js"),
+ ev("diskcache:register", "file_js_cache_large.js"),
+ ev("diskcache:saved", "file_js_cache_large.js", false),
+ ],
+ },
+ {
+ file: "file_js_cache_large.js",
+ sri: "sha384-vJ7r8qsSxGVQwKbj+5A1avW8CEb6bODkGULlUVOmqN81D6XQzaTFhspcWmO+PVSQ",
+ events: [
+ ev("load:diskcache", "file_js_cache_large.js"),
+ ev("evaluate:classic", "file_js_cache_large.js"),
+ ev("diskcache:disabled", "file_js_cache_large.js"),
+ ],
+ },
+ ],
+ },
+
+ {
+ title: "SRI on module after save",
+ module: true,
+ items: [
+ {
+ file: "file_js_cache_large.js",
+ events: [
+ ev("load:source", "file_js_cache_large.js"),
+ ev("evaluate:module", "file_js_cache_large.js"),
+ ev("diskcache:disabled", "file_js_cache_large.js"),
+ ],
+ },
+ {
+ file: "file_js_cache_large.js",
+ events: [
+ ev("load:source", "file_js_cache_large.js"),
+ ev("evaluate:module", "file_js_cache_large.js"),
+ ev("diskcache:disabled", "file_js_cache_large.js"),
+ ],
+ },
+ {
+ file: "file_js_cache_large.js",
+ events: [
+ ev("load:source", "file_js_cache_large.js"),
+ ev("evaluate:module", "file_js_cache_large.js"),
+ ev("diskcache:disabled", "file_js_cache_large.js"),
+ ],
+ },
+ {
+ file: "file_js_cache_large.js",
+ events: [
+ ev("load:source", "file_js_cache_large.js"),
+ ev("evaluate:module", "file_js_cache_large.js"),
+ ev("diskcache:register", "file_js_cache_large.js"),
+ ev("diskcache:saved", "file_js_cache_large.js", false),
+ ],
+ },
+ {
+ file: "file_js_cache_large.js",
+ sri: "sha384-vJ7r8qsSxGVQwKbj+5A1avW8CEb6bODkGULlUVOmqN81D6XQzaTFhspcWmO+PVSQ",
+ events: [
+ ev("load:diskcache", "file_js_cache_large.js"),
+ ev("load:fallback", "file_js_cache_large.js"),
+ ev("load:source", "file_js_cache_large.js"),
+ ev("evaluate:module", "file_js_cache_large.js"),
+ ev("diskcache:register", "file_js_cache_large.js"),
+ ev("diskcache:saved", "file_js_cache_large.js", false),
+ ],
+ },
+ {
+ file: "file_js_cache_large.js",
+ sri: "sha384-vJ7r8qsSxGVQwKbj+5A1avW8CEb6bODkGULlUVOmqN81D6XQzaTFhspcWmO+PVSQ",
+ events: [
+ ev("load:diskcache", "file_js_cache_large.js"),
+ ev("evaluate:module", "file_js_cache_large.js"),
+ ev("diskcache:disabled", "file_js_cache_large.js"),
+ ],
+ },
+ ],
+ },
+ ]);
+
+ await SpecialPowers.popPrefEnv();
+});
+
+add_task(async function testMemoryCache_SRIAfterSave() {
+ if (!AppConstants.NIGHTLY_BUILD) {
+ todo(false, "navigation cache is not yet enabled on non-nightly");
+ return;
+ }
+
+ await SpecialPowers.pushPrefEnv({
+ set: [
+ ["dom.expose_test_interfaces", true],
+ ["dom.script_loader.bytecode_cache.enabled", true],
+ ["dom.script_loader.bytecode_cache.strategy", 0],
+ ["dom.script_loader.experimental.navigation_cache", true],
+ ],
+ });
+
+ // If SRI is specified after the disk cache is created, it should
+ // fallback to the source, and then save again with the SRI.
+ await runTests([
+ {
+ title: "SRI on classic after save",
+ items: [
+ {
+ file: "file_js_cache_large.js",
+ events: [
+ ev("load:source", "file_js_cache_large.js"),
+ ev("memorycache:saved", "file_js_cache_large.js"),
+ ev("evaluate:classic", "file_js_cache_large.js"),
+ ev("diskcache:noschedule"),
+ ],
+ },
+ {
+ file: "file_js_cache_large.js",
+ events: [
+ ev("load:memorycache", "file_js_cache_large.js"),
+ ev("evaluate:classic", "file_js_cache_large.js"),
+ ev("diskcache:noschedule"),
+ ],
+ },
+ {
+ file: "file_js_cache_large.js",
+ events: [
+ ev("load:memorycache", "file_js_cache_large.js"),
+ ev("evaluate:classic", "file_js_cache_large.js"),
+ ev("diskcache:noschedule"),
+ ],
+ },
+ {
+ file: "file_js_cache_large.js",
+ events: [
+ ev("load:memorycache", "file_js_cache_large.js"),
+ ev("evaluate:classic", "file_js_cache_large.js"),
+ ev("diskcache:saved", "file_js_cache_large.js", false),
+ ],
+ },
+ {
+ file: "file_js_cache_large.js",
+ sri: "sha384-vJ7r8qsSxGVQwKbj+5A1avW8CEb6bODkGULlUVOmqN81D6XQzaTFhspcWmO+PVSQ",
+ events: [
+ // Memory cache doesn't support different SRI, but
+ // disk cache does.
+ ev("load:diskcache", "file_js_cache_large.js"),
+ ev("memorycache:saved", "file_js_cache_large.js"),
+ ev("evaluate:classic", "file_js_cache_large.js"),
+ ev("diskcache:noschedule"),
+ ],
+ },
+ {
+ file: "file_js_cache_large.js",
+ sri: "sha384-vJ7r8qsSxGVQwKbj+5A1avW8CEb6bODkGULlUVOmqN81D6XQzaTFhspcWmO+PVSQ",
+ events: [
+ ev("load:memorycache", "file_js_cache_large.js"),
+ ev("evaluate:classic", "file_js_cache_large.js"),
+ ev("diskcache:noschedule"),
+ ],
+ },
+ ],
+ },
+
+ {
+ title: "SRI on module after save",
+ module: true,
+ items: [
+ {
+ file: "file_js_cache_large.js",
+ events: [
+ ev("load:source", "file_js_cache_large.js"),
+ ev("memorycache:saved", "file_js_cache_large.js"),
+ ev("evaluate:module", "file_js_cache_large.js"),
+ ev("diskcache:noschedule"),
+ ],
+ },
+ {
+ file: "file_js_cache_large.js",
+ events: [
+ ev("load:memorycache", "file_js_cache_large.js"),
+ ev("evaluate:module", "file_js_cache_large.js"),
+ ev("diskcache:noschedule"),
+ ],
+ },
+ {
+ file: "file_js_cache_large.js",
+ events: [
+ ev("load:memorycache", "file_js_cache_large.js"),
+ ev("evaluate:module", "file_js_cache_large.js"),
+ ev("diskcache:noschedule"),
+ ],
+ },
+ {
+ file: "file_js_cache_large.js",
+ events: [
+ ev("load:memorycache", "file_js_cache_large.js"),
+ ev("evaluate:module", "file_js_cache_large.js"),
+ ev("diskcache:saved", "file_js_cache_large.js", false),
+ ],
+ },
+ {
+ file: "file_js_cache_large.js",
+ sri: "sha384-vJ7r8qsSxGVQwKbj+5A1avW8CEb6bODkGULlUVOmqN81D6XQzaTFhspcWmO+PVSQ",
+ events: [
+ ev("load:diskcache", "file_js_cache_large.js"),
+ ev("memorycache:saved", "file_js_cache_large.js"),
+ ev("evaluate:module", "file_js_cache_large.js"),
+ ev("diskcache:noschedule"),
+ ],
+ },
+ {
+ file: "file_js_cache_large.js",
+ sri: "sha384-vJ7r8qsSxGVQwKbj+5A1avW8CEb6bODkGULlUVOmqN81D6XQzaTFhspcWmO+PVSQ",
+ events: [
+ ev("load:memorycache", "file_js_cache_large.js"),
+ ev("evaluate:module", "file_js_cache_large.js"),
+ ev("diskcache:noschedule"),
+ ],
+ },
+ ],
+ },
+ ]);
+
+ await SpecialPowers.popPrefEnv();
+});
+
+add_task(async function testDiskCache_DifferentSRI() {
+ await SpecialPowers.pushPrefEnv({
+ set: [
+ ["dom.expose_test_interfaces", true],
+ ["dom.script_loader.bytecode_cache.enabled", true],
+ ["dom.script_loader.bytecode_cache.strategy", 0],
+ ["dom.script_loader.experimental.navigation_cache", false],
+ ],
+ });
+
+ // If different SRI is specified after the disk cache is created, it should
+ // fallback to the source, and then save again with the SRI.
+ await runTests([
+ {
+ title: "different SRI on classic after save",
+ items: [
+ {
+ file: "file_js_cache_large.js",
+ sri: "sha384-vJ7r8qsSxGVQwKbj+5A1avW8CEb6bODkGULlUVOmqN81D6XQzaTFhspcWmO+PVSQ",
+ events: [
+ ev("load:source", "file_js_cache_large.js"),
+ ev("evaluate:classic", "file_js_cache_large.js"),
+ ev("diskcache:disabled", "file_js_cache_large.js"),
+ ],
+ },
+ {
+ file: "file_js_cache_large.js",
+ sri: "sha384-vJ7r8qsSxGVQwKbj+5A1avW8CEb6bODkGULlUVOmqN81D6XQzaTFhspcWmO+PVSQ",
+ events: [
+ ev("load:source", "file_js_cache_large.js"),
+ ev("evaluate:classic", "file_js_cache_large.js"),
+ ev("diskcache:disabled", "file_js_cache_large.js"),
+ ],
+ },
+ {
+ file: "file_js_cache_large.js",
+ sri: "sha384-vJ7r8qsSxGVQwKbj+5A1avW8CEb6bODkGULlUVOmqN81D6XQzaTFhspcWmO+PVSQ",
+ events: [
+ ev("load:source", "file_js_cache_large.js"),
+ ev("evaluate:classic", "file_js_cache_large.js"),
+ ev("diskcache:disabled", "file_js_cache_large.js"),
+ ],
+ },
+ {
+ file: "file_js_cache_large.js",
+ sri: "sha384-vJ7r8qsSxGVQwKbj+5A1avW8CEb6bODkGULlUVOmqN81D6XQzaTFhspcWmO+PVSQ",
+ events: [
+ ev("load:source", "file_js_cache_large.js"),
+ ev("evaluate:classic", "file_js_cache_large.js"),
+ ev("diskcache:register", "file_js_cache_large.js"),
+ ev("diskcache:saved", "file_js_cache_large.js", false),
+ ],
+ },
+ {
+ file: "file_js_cache_large.js",
+ sri: "sha512-NN5Pp0blZjckIohQdMbZwclYHNV3QXnL/UiR1R0h66KMc2zRCgfFQ56zpTd8UCYB/RkAQ6HUbPzlGr8JWUp6AQ==",
+ events: [
+ ev("load:diskcache", "file_js_cache_large.js"),
+ ev("load:fallback", "file_js_cache_large.js"),
+ ev("load:source", "file_js_cache_large.js"),
+ ev("evaluate:classic", "file_js_cache_large.js"),
+ ev("diskcache:register", "file_js_cache_large.js"),
+ ev("diskcache:saved", "file_js_cache_large.js", false),
+ ],
+ },
+ {
+ file: "file_js_cache_large.js",
+ sri: "sha512-NN5Pp0blZjckIohQdMbZwclYHNV3QXnL/UiR1R0h66KMc2zRCgfFQ56zpTd8UCYB/RkAQ6HUbPzlGr8JWUp6AQ==",
+ events: [
+ ev("load:diskcache", "file_js_cache_large.js"),
+ ev("evaluate:classic", "file_js_cache_large.js"),
+ ev("diskcache:disabled", "file_js_cache_large.js"),
+ ],
+ },
+ ],
+ },
+
+ {
+ title: "different SRI on module after save",
+ module: true,
+ items: [
+ {
+ file: "file_js_cache_large.js",
+ sri: "sha384-vJ7r8qsSxGVQwKbj+5A1avW8CEb6bODkGULlUVOmqN81D6XQzaTFhspcWmO+PVSQ",
+ events: [
+ ev("load:source", "file_js_cache_large.js"),
+ ev("evaluate:module", "file_js_cache_large.js"),
+ ev("diskcache:disabled", "file_js_cache_large.js"),
+ ],
+ },
+ {
+ file: "file_js_cache_large.js",
+ sri: "sha384-vJ7r8qsSxGVQwKbj+5A1avW8CEb6bODkGULlUVOmqN81D6XQzaTFhspcWmO+PVSQ",
+ events: [
+ ev("load:source", "file_js_cache_large.js"),
+ ev("evaluate:module", "file_js_cache_large.js"),
+ ev("diskcache:disabled", "file_js_cache_large.js"),
+ ],
+ },
+ {
+ file: "file_js_cache_large.js",
+ sri: "sha384-vJ7r8qsSxGVQwKbj+5A1avW8CEb6bODkGULlUVOmqN81D6XQzaTFhspcWmO+PVSQ",
+ events: [
+ ev("load:source", "file_js_cache_large.js"),
+ ev("evaluate:module", "file_js_cache_large.js"),
+ ev("diskcache:disabled", "file_js_cache_large.js"),
+ ],
+ },
+ {
+ file: "file_js_cache_large.js",
+ sri: "sha384-vJ7r8qsSxGVQwKbj+5A1avW8CEb6bODkGULlUVOmqN81D6XQzaTFhspcWmO+PVSQ",
+ events: [
+ ev("load:source", "file_js_cache_large.js"),
+ ev("evaluate:module", "file_js_cache_large.js"),
+ ev("diskcache:register", "file_js_cache_large.js"),
+ ev("diskcache:saved", "file_js_cache_large.js", false),
+ ],
+ },
+ {
+ file: "file_js_cache_large.js",
+ sri: "sha512-NN5Pp0blZjckIohQdMbZwclYHNV3QXnL/UiR1R0h66KMc2zRCgfFQ56zpTd8UCYB/RkAQ6HUbPzlGr8JWUp6AQ==",
+ events: [
+ ev("load:diskcache", "file_js_cache_large.js"),
+ ev("load:fallback", "file_js_cache_large.js"),
+ ev("load:source", "file_js_cache_large.js"),
+ ev("evaluate:module", "file_js_cache_large.js"),
+ ev("diskcache:register", "file_js_cache_large.js"),
+ ev("diskcache:saved", "file_js_cache_large.js", false),
+ ],
+ },
+ {
+ file: "file_js_cache_large.js",
+ sri: "sha512-NN5Pp0blZjckIohQdMbZwclYHNV3QXnL/UiR1R0h66KMc2zRCgfFQ56zpTd8UCYB/RkAQ6HUbPzlGr8JWUp6AQ==",
+ events: [
+ ev("load:diskcache", "file_js_cache_large.js"),
+ ev("evaluate:module", "file_js_cache_large.js"),
+ ev("diskcache:disabled", "file_js_cache_large.js"),
+ ],
+ },
+ ],
+ },
+ ]);
+
+ await SpecialPowers.popPrefEnv();
+});
+
+add_task(async function testMemoryCache_DifferentSRI() {
+ if (!AppConstants.NIGHTLY_BUILD) {
+ todo(false, "navigation cache is not yet enabled on non-nightly");
+ return;
+ }
+
+ await SpecialPowers.pushPrefEnv({
+ set: [
+ ["dom.expose_test_interfaces", true],
+ ["dom.script_loader.bytecode_cache.enabled", true],
+ ["dom.script_loader.bytecode_cache.strategy", 0],
+ ["dom.script_loader.experimental.navigation_cache", true],
+ ],
+ });
+
+ // If different SRI is specified after the disk cache is created, it should
+ // fallback to the source, and then save again with the SRI.
+ await runTests([
+ {
+ title: "different SRI on classic after save",
+ items: [
+ {
+ file: "file_js_cache_large.js",
+ sri: "sha384-vJ7r8qsSxGVQwKbj+5A1avW8CEb6bODkGULlUVOmqN81D6XQzaTFhspcWmO+PVSQ",
+ events: [
+ ev("load:source", "file_js_cache_large.js"),
+ ev("memorycache:saved", "file_js_cache_large.js"),
+ ev("evaluate:classic", "file_js_cache_large.js"),
+ ev("diskcache:noschedule"),
+ ],
+ },
+ {
+ file: "file_js_cache_large.js",
+ sri: "sha384-vJ7r8qsSxGVQwKbj+5A1avW8CEb6bODkGULlUVOmqN81D6XQzaTFhspcWmO+PVSQ",
+ events: [
+ ev("load:memorycache", "file_js_cache_large.js"),
+ ev("evaluate:classic", "file_js_cache_large.js"),
+ ev("diskcache:noschedule"),
+ ],
+ },
+ {
+ file: "file_js_cache_large.js",
+ sri: "sha384-vJ7r8qsSxGVQwKbj+5A1avW8CEb6bODkGULlUVOmqN81D6XQzaTFhspcWmO+PVSQ",
+ events: [
+ ev("load:memorycache", "file_js_cache_large.js"),
+ ev("evaluate:classic", "file_js_cache_large.js"),
+ ev("diskcache:noschedule"),
+ ],
+ },
+ {
+ file: "file_js_cache_large.js",
+ sri: "sha384-vJ7r8qsSxGVQwKbj+5A1avW8CEb6bODkGULlUVOmqN81D6XQzaTFhspcWmO+PVSQ",
+ events: [
+ ev("load:memorycache", "file_js_cache_large.js"),
+ ev("evaluate:classic", "file_js_cache_large.js"),
+ ev("diskcache:saved", "file_js_cache_large.js", false),
+ ],
+ },
+ {
+ file: "file_js_cache_large.js",
+ sri: "sha512-NN5Pp0blZjckIohQdMbZwclYHNV3QXnL/UiR1R0h66KMc2zRCgfFQ56zpTd8UCYB/RkAQ6HUbPzlGr8JWUp6AQ==",
+ events: [
+ ev("load:diskcache", "file_js_cache_large.js"),
+ ev("load:fallback", "file_js_cache_large.js"),
+ ev("load:source", "file_js_cache_large.js"),
+ ev("memorycache:saved", "file_js_cache_large.js"),
+ ev("evaluate:classic", "file_js_cache_large.js"),
+ // Disk cache's fetch count is not incremented for non-first
+ // load, and the fetch count here doesn't hit the minimum.
+ ev("diskcache:noschedule"),
+ ],
+ },
+ {
+ file: "file_js_cache_large.js",
+ sri: "sha512-NN5Pp0blZjckIohQdMbZwclYHNV3QXnL/UiR1R0h66KMc2zRCgfFQ56zpTd8UCYB/RkAQ6HUbPzlGr8JWUp6AQ==",
+ events: [
+ ev("load:memorycache", "file_js_cache_large.js"),
+ ev("evaluate:classic", "file_js_cache_large.js"),
+ ev("diskcache:noschedule"),
+ ],
+ },
+ ],
+ },
+
+ {
+ title: "different SRI on module after save",
+ module: true,
+ items: [
+ {
+ file: "file_js_cache_large.js",
+ sri: "sha384-vJ7r8qsSxGVQwKbj+5A1avW8CEb6bODkGULlUVOmqN81D6XQzaTFhspcWmO+PVSQ",
+ events: [
+ ev("load:source", "file_js_cache_large.js"),
+ ev("memorycache:saved", "file_js_cache_large.js"),
+ ev("evaluate:module", "file_js_cache_large.js"),
+ ev("diskcache:noschedule"),
+ ],
+ },
+ {
+ file: "file_js_cache_large.js",
+ sri: "sha384-vJ7r8qsSxGVQwKbj+5A1avW8CEb6bODkGULlUVOmqN81D6XQzaTFhspcWmO+PVSQ",
+ events: [
+ ev("load:memorycache", "file_js_cache_large.js"),
+ ev("evaluate:module", "file_js_cache_large.js"),
+ ev("diskcache:noschedule"),
+ ],
+ },
+ {
+ file: "file_js_cache_large.js",
+ sri: "sha384-vJ7r8qsSxGVQwKbj+5A1avW8CEb6bODkGULlUVOmqN81D6XQzaTFhspcWmO+PVSQ",
+ events: [
+ ev("load:memorycache", "file_js_cache_large.js"),
+ ev("evaluate:module", "file_js_cache_large.js"),
+ ev("diskcache:noschedule"),
+ ],
+ },
+ {
+ file: "file_js_cache_large.js",
+ sri: "sha384-vJ7r8qsSxGVQwKbj+5A1avW8CEb6bODkGULlUVOmqN81D6XQzaTFhspcWmO+PVSQ",
+ events: [
+ ev("load:memorycache", "file_js_cache_large.js"),
+ ev("evaluate:module", "file_js_cache_large.js"),
+ ev("diskcache:saved", "file_js_cache_large.js", false),
+ ],
+ },
+ {
+ file: "file_js_cache_large.js",
+ sri: "sha512-NN5Pp0blZjckIohQdMbZwclYHNV3QXnL/UiR1R0h66KMc2zRCgfFQ56zpTd8UCYB/RkAQ6HUbPzlGr8JWUp6AQ==",
+ events: [
+ ev("load:diskcache", "file_js_cache_large.js"),
+ ev("load:fallback", "file_js_cache_large.js"),
+ ev("load:source", "file_js_cache_large.js"),
+ ev("memorycache:saved", "file_js_cache_large.js"),
+ ev("evaluate:module", "file_js_cache_large.js"),
+ ev("diskcache:noschedule"),
+ ],
+ },
+ {
+ file: "file_js_cache_large.js",
+ sri: "sha512-NN5Pp0blZjckIohQdMbZwclYHNV3QXnL/UiR1R0h66KMc2zRCgfFQ56zpTd8UCYB/RkAQ6HUbPzlGr8JWUp6AQ==",
+ events: [
+ ev("load:memorycache", "file_js_cache_large.js"),
+ ev("evaluate:module", "file_js_cache_large.js"),
+ ev("diskcache:noschedule"),
+ ],
+ },
+ ],
+ },
+ ]);
+
+ await SpecialPowers.popPrefEnv();
+});
+
+add_task(async function testDiskCache_SRIMismatchAfterSave() {
+ await SpecialPowers.pushPrefEnv({
+ set: [
+ ["dom.expose_test_interfaces", true],
+ ["dom.script_loader.bytecode_cache.enabled", true],
+ ["dom.script_loader.bytecode_cache.strategy", 0],
+ ["dom.script_loader.experimental.navigation_cache", false],
+ ],
+ });
+
+ // If different SRI is specified after the disk cache is created, it should
+ // fallback to the source, and then save again with the SRI.
+ await runTests([
+ {
+ title: "wrong SRI with same algorithm on classic after save",
+ items: [
+ {
+ file: "file_js_cache_large.js",
+ sri: "sha384-vJ7r8qsSxGVQwKbj+5A1avW8CEb6bODkGULlUVOmqN81D6XQzaTFhspcWmO+PVSQ",
+ events: [
+ ev("load:source", "file_js_cache_large.js"),
+ ev("evaluate:classic", "file_js_cache_large.js"),
+ ev("diskcache:disabled", "file_js_cache_large.js"),
+ ],
+ },
+ {
+ file: "file_js_cache_large.js",
+ sri: "sha384-vJ7r8qsSxGVQwKbj+5A1avW8CEb6bODkGULlUVOmqN81D6XQzaTFhspcWmO+PVSQ",
+ events: [
+ ev("load:source", "file_js_cache_large.js"),
+ ev("evaluate:classic", "file_js_cache_large.js"),
+ ev("diskcache:disabled", "file_js_cache_large.js"),
+ ],
+ },
+ {
+ file: "file_js_cache_large.js",
+ sri: "sha384-vJ7r8qsSxGVQwKbj+5A1avW8CEb6bODkGULlUVOmqN81D6XQzaTFhspcWmO+PVSQ",
+ events: [
+ ev("load:source", "file_js_cache_large.js"),
+ ev("evaluate:classic", "file_js_cache_large.js"),
+ ev("diskcache:disabled", "file_js_cache_large.js"),
+ ],
+ },
+ {
+ file: "file_js_cache_large.js",
+ sri: "sha384-vJ7r8qsSxGVQwKbj+5A1avW8CEb6bODkGULlUVOmqN81D6XQzaTFhspcWmO+PVSQ",
+ events: [
+ ev("load:source", "file_js_cache_large.js"),
+ ev("evaluate:classic", "file_js_cache_large.js"),
+ ev("diskcache:register", "file_js_cache_large.js"),
+ ev("diskcache:saved", "file_js_cache_large.js", false),
+ ],
+ },
+ {
+ file: "file_js_cache_large.js",
+ sri: "sha384-fxijQE3W3lWbCjRZx0MCS6pJpCz+dGnNujsFYBzzag9G/fz/6ZiWdM/GAsMzGlAI",
+ events: [
+ ev("load:diskcache", "file_js_cache_large.js"),
+ ev("sri:corrupt", "file_js_cache_large.js"),
+ ],
+ },
+ ],
+ },
+
+ {
+ title: "wrong SRI with different algorithm on classic after save",
+ items: [
+ {
+ file: "file_js_cache_large.js",
+ sri: "sha384-vJ7r8qsSxGVQwKbj+5A1avW8CEb6bODkGULlUVOmqN81D6XQzaTFhspcWmO+PVSQ",
+ events: [
+ ev("load:source", "file_js_cache_large.js"),
+ ev("evaluate:classic", "file_js_cache_large.js"),
+ ev("diskcache:disabled", "file_js_cache_large.js"),
+ ],
+ },
+ {
+ file: "file_js_cache_large.js",
+ sri: "sha384-vJ7r8qsSxGVQwKbj+5A1avW8CEb6bODkGULlUVOmqN81D6XQzaTFhspcWmO+PVSQ",
+ events: [
+ ev("load:source", "file_js_cache_large.js"),
+ ev("evaluate:classic", "file_js_cache_large.js"),
+ ev("diskcache:disabled", "file_js_cache_large.js"),
+ ],
+ },
+ {
+ file: "file_js_cache_large.js",
+ sri: "sha384-vJ7r8qsSxGVQwKbj+5A1avW8CEb6bODkGULlUVOmqN81D6XQzaTFhspcWmO+PVSQ",
+ events: [
+ ev("load:source", "file_js_cache_large.js"),
+ ev("evaluate:classic", "file_js_cache_large.js"),
+ ev("diskcache:disabled", "file_js_cache_large.js"),
+ ],
+ },
+ {
+ file: "file_js_cache_large.js",
+ sri: "sha384-vJ7r8qsSxGVQwKbj+5A1avW8CEb6bODkGULlUVOmqN81D6XQzaTFhspcWmO+PVSQ",
+ events: [
+ ev("load:source", "file_js_cache_large.js"),
+ ev("evaluate:classic", "file_js_cache_large.js"),
+ ev("diskcache:register", "file_js_cache_large.js"),
+ ev("diskcache:saved", "file_js_cache_large.js", false),
+ ],
+ },
+ {
+ file: "file_js_cache_large.js",
+ sri: "sha512-8fAu+4y0SKpriy0fz4IuLgiXLyTCGVInfJHvIl8JOdxm+xKJVHVhX7RTfEUpExZYoOJqzpVRkK/6nfglpK7Dow==",
+ events: [
+ ev("load:diskcache", "file_js_cache_large.js"),
+ ev("sri:corrupt", "file_js_cache_large.js"),
+ ],
+ },
+ ],
+ },
+
+ {
+ title: "wrong SRI with same algorithm on module after save",
+ module: true,
+ items: [
+ {
+ file: "file_js_cache_large.js",
+ sri: "sha384-vJ7r8qsSxGVQwKbj+5A1avW8CEb6bODkGULlUVOmqN81D6XQzaTFhspcWmO+PVSQ",
+ events: [
+ ev("load:source", "file_js_cache_large.js"),
+ ev("evaluate:module", "file_js_cache_large.js"),
+ ev("diskcache:disabled", "file_js_cache_large.js"),
+ ],
+ },
+ {
+ file: "file_js_cache_large.js",
+ sri: "sha384-vJ7r8qsSxGVQwKbj+5A1avW8CEb6bODkGULlUVOmqN81D6XQzaTFhspcWmO+PVSQ",
+ events: [
+ ev("load:source", "file_js_cache_large.js"),
+ ev("evaluate:module", "file_js_cache_large.js"),
+ ev("diskcache:disabled", "file_js_cache_large.js"),
+ ],
+ },
+ {
+ file: "file_js_cache_large.js",
+ sri: "sha384-vJ7r8qsSxGVQwKbj+5A1avW8CEb6bODkGULlUVOmqN81D6XQzaTFhspcWmO+PVSQ",
+ events: [
+ ev("load:source", "file_js_cache_large.js"),
+ ev("evaluate:module", "file_js_cache_large.js"),
+ ev("diskcache:disabled", "file_js_cache_large.js"),
+ ],
+ },
+ {
+ file: "file_js_cache_large.js",
+ sri: "sha384-vJ7r8qsSxGVQwKbj+5A1avW8CEb6bODkGULlUVOmqN81D6XQzaTFhspcWmO+PVSQ",
+ events: [
+ ev("load:source", "file_js_cache_large.js"),
+ ev("evaluate:module", "file_js_cache_large.js"),
+ ev("diskcache:register", "file_js_cache_large.js"),
+ ev("diskcache:saved", "file_js_cache_large.js", false),
+ ],
+ },
+ {
+ file: "file_js_cache_large.js",
+ sri: "sha384-fxijQE3W3lWbCjRZx0MCS6pJpCz+dGnNujsFYBzzag9G/fz/6ZiWdM/GAsMzGlAI",
+ events: [
+ ev("load:diskcache", "file_js_cache_large.js"),
+ ev("sri:corrupt", "file_js_cache_large.js"),
+ ],
+ },
+ ],
+ },
+
+ {
+ title: "wrong SRI with different algorithm on module after save",
+ module: true,
+ items: [
+ {
+ file: "file_js_cache_large.js",
+ sri: "sha384-vJ7r8qsSxGVQwKbj+5A1avW8CEb6bODkGULlUVOmqN81D6XQzaTFhspcWmO+PVSQ",
+ events: [
+ ev("load:source", "file_js_cache_large.js"),
+ ev("evaluate:module", "file_js_cache_large.js"),
+ ev("diskcache:disabled", "file_js_cache_large.js"),
+ ],
+ },
+ {
+ file: "file_js_cache_large.js",
+ sri: "sha384-vJ7r8qsSxGVQwKbj+5A1avW8CEb6bODkGULlUVOmqN81D6XQzaTFhspcWmO+PVSQ",
+ events: [
+ ev("load:source", "file_js_cache_large.js"),
+ ev("evaluate:module", "file_js_cache_large.js"),
+ ev("diskcache:disabled", "file_js_cache_large.js"),
+ ],
+ },
+ {
+ file: "file_js_cache_large.js",
+ sri: "sha384-vJ7r8qsSxGVQwKbj+5A1avW8CEb6bODkGULlUVOmqN81D6XQzaTFhspcWmO+PVSQ",
+ events: [
+ ev("load:source", "file_js_cache_large.js"),
+ ev("evaluate:module", "file_js_cache_large.js"),
+ ev("diskcache:disabled", "file_js_cache_large.js"),
+ ],
+ },
+ {
+ file: "file_js_cache_large.js",
+ sri: "sha384-vJ7r8qsSxGVQwKbj+5A1avW8CEb6bODkGULlUVOmqN81D6XQzaTFhspcWmO+PVSQ",
+ events: [
+ ev("load:source", "file_js_cache_large.js"),
+ ev("evaluate:module", "file_js_cache_large.js"),
+ ev("diskcache:register", "file_js_cache_large.js"),
+ ev("diskcache:saved", "file_js_cache_large.js", false),
+ ],
+ },
+ {
+ file: "file_js_cache_large.js",
+ sri: "sha512-8fAu+4y0SKpriy0fz4IuLgiXLyTCGVInfJHvIl8JOdxm+xKJVHVhX7RTfEUpExZYoOJqzpVRkK/6nfglpK7Dow==",
+ events: [
+ ev("load:diskcache", "file_js_cache_large.js"),
+ ev("load:fallback", "file_js_cache_large.js"),
+ ev("load:source", "file_js_cache_large.js"),
+ ev("sri:corrupt", "file_js_cache_large.js"),
+ ],
+ },
+ ],
+ },
+ ]);
+
+ await SpecialPowers.popPrefEnv();
+});
+
+add_task(async function testMemoryCache_SRIMismatchAfterSave() {
+ if (!AppConstants.NIGHTLY_BUILD) {
+ todo(false, "navigation cache is not yet enabled on non-nightly");
+ return;
+ }
+
+ await SpecialPowers.pushPrefEnv({
+ set: [
+ ["dom.expose_test_interfaces", true],
+ ["dom.script_loader.bytecode_cache.enabled", true],
+ ["dom.script_loader.bytecode_cache.strategy", 0],
+ ["dom.script_loader.experimental.navigation_cache", true],
+ ],
+ });
+
+ // If different SRI is specified after the disk cache is created, it should
+ // fallback to the source, and then save again with the SRI.
+ await runTests([
+ {
+ title: "wrong SRI with same algorithm on classic after save",
+ items: [
+ {
+ file: "file_js_cache_large.js",
+ sri: "sha384-vJ7r8qsSxGVQwKbj+5A1avW8CEb6bODkGULlUVOmqN81D6XQzaTFhspcWmO+PVSQ",
+ events: [
+ ev("load:source", "file_js_cache_large.js"),
+ ev("memorycache:saved", "file_js_cache_large.js"),
+ ev("evaluate:classic", "file_js_cache_large.js"),
+ ev("diskcache:noschedule"),
+ ],
+ },
+ {
+ file: "file_js_cache_large.js",
+ sri: "sha384-vJ7r8qsSxGVQwKbj+5A1avW8CEb6bODkGULlUVOmqN81D6XQzaTFhspcWmO+PVSQ",
+ events: [
+ ev("load:memorycache", "file_js_cache_large.js"),
+ ev("evaluate:classic", "file_js_cache_large.js"),
+ ev("diskcache:noschedule"),
+ ],
+ },
+ {
+ file: "file_js_cache_large.js",
+ sri: "sha384-vJ7r8qsSxGVQwKbj+5A1avW8CEb6bODkGULlUVOmqN81D6XQzaTFhspcWmO+PVSQ",
+ events: [
+ ev("load:memorycache", "file_js_cache_large.js"),
+ ev("evaluate:classic", "file_js_cache_large.js"),
+ ev("diskcache:noschedule"),
+ ],
+ },
+ {
+ file: "file_js_cache_large.js",
+ sri: "sha384-vJ7r8qsSxGVQwKbj+5A1avW8CEb6bODkGULlUVOmqN81D6XQzaTFhspcWmO+PVSQ",
+ events: [
+ ev("load:memorycache", "file_js_cache_large.js"),
+ ev("evaluate:classic", "file_js_cache_large.js"),
+ ev("diskcache:saved", "file_js_cache_large.js", false),
+ ],
+ },
+ {
+ file: "file_js_cache_large.js",
+ sri: "sha384-fxijQE3W3lWbCjRZx0MCS6pJpCz+dGnNujsFYBzzag9G/fz/6ZiWdM/GAsMzGlAI",
+ events: [
+ ev("load:diskcache", "file_js_cache_large.js"),
+ ev("sri:corrupt", "file_js_cache_large.js"),
+ ],
+ },
+ ],
+ },
+
+ {
+ title: "wrong SRI with different algorithm on classic after save",
+ items: [
+ {
+ file: "file_js_cache_large.js",
+ sri: "sha384-vJ7r8qsSxGVQwKbj+5A1avW8CEb6bODkGULlUVOmqN81D6XQzaTFhspcWmO+PVSQ",
+ events: [
+ ev("load:source", "file_js_cache_large.js"),
+ ev("memorycache:saved", "file_js_cache_large.js"),
+ ev("evaluate:classic", "file_js_cache_large.js"),
+ ev("diskcache:noschedule"),
+ ],
+ },
+ {
+ file: "file_js_cache_large.js",
+ sri: "sha384-vJ7r8qsSxGVQwKbj+5A1avW8CEb6bODkGULlUVOmqN81D6XQzaTFhspcWmO+PVSQ",
+ events: [
+ ev("load:memorycache", "file_js_cache_large.js"),
+ ev("evaluate:classic", "file_js_cache_large.js"),
+ ev("diskcache:noschedule"),
+ ],
+ },
+ {
+ file: "file_js_cache_large.js",
+ sri: "sha384-vJ7r8qsSxGVQwKbj+5A1avW8CEb6bODkGULlUVOmqN81D6XQzaTFhspcWmO+PVSQ",
+ events: [
+ ev("load:memorycache", "file_js_cache_large.js"),
+ ev("evaluate:classic", "file_js_cache_large.js"),
+ ev("diskcache:noschedule"),
+ ],
+ },
+ {
+ file: "file_js_cache_large.js",
+ sri: "sha384-vJ7r8qsSxGVQwKbj+5A1avW8CEb6bODkGULlUVOmqN81D6XQzaTFhspcWmO+PVSQ",
+ events: [
+ ev("load:memorycache", "file_js_cache_large.js"),
+ ev("evaluate:classic", "file_js_cache_large.js"),
+ ev("diskcache:saved", "file_js_cache_large.js", false),
+ ],
+ },
+ {
+ file: "file_js_cache_large.js",
+ sri: "sha512-8fAu+4y0SKpriy0fz4IuLgiXLyTCGVInfJHvIl8JOdxm+xKJVHVhX7RTfEUpExZYoOJqzpVRkK/6nfglpK7Dow==",
+ events: [
+ ev("load:diskcache", "file_js_cache_large.js"),
+ ev("sri:corrupt", "file_js_cache_large.js"),
+ ],
+ },
+ ],
+ },
+
+ {
+ title: "wrong SRI with same algorithm on module after save",
+ module: true,
+ items: [
+ {
+ file: "file_js_cache_large.js",
+ sri: "sha384-vJ7r8qsSxGVQwKbj+5A1avW8CEb6bODkGULlUVOmqN81D6XQzaTFhspcWmO+PVSQ",
+ events: [
+ ev("load:source", "file_js_cache_large.js"),
+ ev("memorycache:saved", "file_js_cache_large.js"),
+ ev("evaluate:module", "file_js_cache_large.js"),
+ ev("diskcache:noschedule"),
+ ],
+ },
+ {
+ file: "file_js_cache_large.js",
+ sri: "sha384-vJ7r8qsSxGVQwKbj+5A1avW8CEb6bODkGULlUVOmqN81D6XQzaTFhspcWmO+PVSQ",
+ events: [
+ ev("load:memorycache", "file_js_cache_large.js"),
+ ev("evaluate:module", "file_js_cache_large.js"),
+ ev("diskcache:noschedule"),
+ ],
+ },
+ {
+ file: "file_js_cache_large.js",
+ sri: "sha384-vJ7r8qsSxGVQwKbj+5A1avW8CEb6bODkGULlUVOmqN81D6XQzaTFhspcWmO+PVSQ",
+ events: [
+ ev("load:memorycache", "file_js_cache_large.js"),
+ ev("evaluate:module", "file_js_cache_large.js"),
+ ev("diskcache:noschedule"),
+ ],
+ },
+ {
+ file: "file_js_cache_large.js",
+ sri: "sha384-vJ7r8qsSxGVQwKbj+5A1avW8CEb6bODkGULlUVOmqN81D6XQzaTFhspcWmO+PVSQ",
+ events: [
+ ev("load:memorycache", "file_js_cache_large.js"),
+ ev("evaluate:module", "file_js_cache_large.js"),
+ ev("diskcache:saved", "file_js_cache_large.js", false),
+ ],
+ },
+ {
+ file: "file_js_cache_large.js",
+ sri: "sha384-fxijQE3W3lWbCjRZx0MCS6pJpCz+dGnNujsFYBzzag9G/fz/6ZiWdM/GAsMzGlAI",
+ events: [
+ ev("load:diskcache", "file_js_cache_large.js"),
+ ev("sri:corrupt", "file_js_cache_large.js"),
+ ],
+ },
+ ],
+ },
+
+ {
+ title: "wrong SRI with different algorithm on module after save",
+ module: true,
+ items: [
+ {
+ file: "file_js_cache_large.js",
+ sri: "sha384-vJ7r8qsSxGVQwKbj+5A1avW8CEb6bODkGULlUVOmqN81D6XQzaTFhspcWmO+PVSQ",
+ events: [
+ ev("load:source", "file_js_cache_large.js"),
+ ev("memorycache:saved", "file_js_cache_large.js"),
+ ev("evaluate:module", "file_js_cache_large.js"),
+ ev("diskcache:noschedule"),
+ ],
+ },
+ {
+ file: "file_js_cache_large.js",
+ sri: "sha384-vJ7r8qsSxGVQwKbj+5A1avW8CEb6bODkGULlUVOmqN81D6XQzaTFhspcWmO+PVSQ",
+ events: [
+ ev("load:memorycache", "file_js_cache_large.js"),
+ ev("evaluate:module", "file_js_cache_large.js"),
+ ev("diskcache:noschedule"),
+ ],
+ },
+ {
+ file: "file_js_cache_large.js",
+ sri: "sha384-vJ7r8qsSxGVQwKbj+5A1avW8CEb6bODkGULlUVOmqN81D6XQzaTFhspcWmO+PVSQ",
+ events: [
+ ev("load:memorycache", "file_js_cache_large.js"),
+ ev("evaluate:module", "file_js_cache_large.js"),
+ ev("diskcache:noschedule"),
+ ],
+ },
+ {
+ file: "file_js_cache_large.js",
+ sri: "sha384-vJ7r8qsSxGVQwKbj+5A1avW8CEb6bODkGULlUVOmqN81D6XQzaTFhspcWmO+PVSQ",
+ events: [
+ ev("load:memorycache", "file_js_cache_large.js"),
+ ev("evaluate:module", "file_js_cache_large.js"),
+ ev("diskcache:saved", "file_js_cache_large.js", false),
+ ],
+ },
+ {
+ file: "file_js_cache_large.js",
+ sri: "sha512-8fAu+4y0SKpriy0fz4IuLgiXLyTCGVInfJHvIl8JOdxm+xKJVHVhX7RTfEUpExZYoOJqzpVRkK/6nfglpK7Dow==",
+ events: [
+ ev("load:diskcache", "file_js_cache_large.js"),
+ ev("load:fallback", "file_js_cache_large.js"),
+ ev("load:source", "file_js_cache_large.js"),
+ ev("sri:corrupt", "file_js_cache_large.js"),
+ ],
+ },
+ ],
+ },
+ ]);
+
+ await SpecialPowers.popPrefEnv();
+});