// ev, unordered, and runJSCacheTests are defined in head.js add_task(async function testDiskCache_classicVsModules() { 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 runJSCacheTests([ // A classic script's disk cache shouldn't be used by module. // A large module file should be saved to the disk. { title: "classic script disk cache vs module", 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", module: true, events: [ // This should load source. 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), ], }, ], }, { title: "module script disk cache vs classic", items: [ { file: "file_js_cache_large.js", module: true, 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", module: true, 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", module: true, 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", module: true, 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", events: [ // This should load source. 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), ], }, ], }, ]); await SpecialPowers.popPrefEnv(); }); add_task(async function testMemoryCache_classicVsModules() { 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 runJSCacheTests([ // A classic script's disk cache shouldn't be used by module. // A large module file should be saved to the disk. { title: "classic script disk cache vs module", 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", module: true, events: [ // Memory cached item is classic. // Module load should immediately fetch source from necko. ev("load:source", "file_js_cache_large.js"), // and save a separate item. ev("memorycache:saved", "file_js_cache_large.js"), ev("evaluate:module", "file_js_cache_large.js"), ev("diskcache:noschedule"), ], }, ], }, { title: "module script disk cache vs script", items: [ { file: "file_js_cache_large.js", module: true, 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", module: true, 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", module: true, 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", module: true, 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", 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"), ], }, ], }, ]); await SpecialPowers.popPrefEnv(); });