// ev, unordered, and runJSCacheTests are defined in head.js add_task(async function testDiskCache() { 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 small file shouldn't be saved to the disk. { title: "small file", items: [ { file: "file_js_cache_small.js", events: [ ev("load:source", "file_js_cache_small.js"), ev("evaluate:classic", "file_js_cache_small.js"), ev("diskcache:disabled", "file_js_cache_small.js"), ], }, { file: "file_js_cache_small.js", events: [ ev("load:source", "file_js_cache_small.js"), ev("evaluate:classic", "file_js_cache_small.js"), ev("diskcache:disabled", "file_js_cache_small.js"), ], }, { file: "file_js_cache_small.js", events: [ ev("load:source", "file_js_cache_small.js"), ev("evaluate:classic", "file_js_cache_small.js"), ev("diskcache:disabled", "file_js_cache_small.js"), ], }, { file: "file_js_cache_small.js", events: [ ev("load:source", "file_js_cache_small.js"), ev("evaluate:classic", "file_js_cache_small.js"), ev("diskcache:disabled", "file_js_cache_small.js"), ], }, ], }, // A large file should be saved to the disk on the 4th load, and should be // used on the 5th load. Also the 5th load shouldn't overwrite the cache. { title: "large file", 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", 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"), ], }, { file: "file_js_cache_large.js", 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"), ], }, ], }, // A file with compile error shouldn't be saved to the disk. { title: "syntax error", items: [ { file: "file_js_cache_large_syntax_error.js", events: [ ev("load:source", "file_js_cache_large_syntax_error.js"), ev("diskcache:disabled", "file_js_cache_large_syntax_error.js"), ], }, { file: "file_js_cache_large_syntax_error.js", events: [ ev("load:source", "file_js_cache_large_syntax_error.js"), ev("diskcache:disabled", "file_js_cache_large_syntax_error.js"), ], }, { file: "file_js_cache_large_syntax_error.js", events: [ ev("load:source", "file_js_cache_large_syntax_error.js"), ev("diskcache:disabled", "file_js_cache_large_syntax_error.js"), ], }, { file: "file_js_cache_large_syntax_error.js", events: [ ev("load:source", "file_js_cache_large_syntax_error.js"), ev("diskcache:disabled", "file_js_cache_large_syntax_error.js"), ], }, ], }, ]); await SpecialPowers.popPrefEnv(); }); add_task(async function testMemoryCache() { 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 in-memory cache is enabled, the disk cache is handled by the // SharedScriptCache, and following differences happen: // * diskcache:disabled and diskcache:register are not notified for // each script // * diskcache:noschedule is notified without associated script // if there's no script to be saved await runJSCacheTests([ // A small file should be saved to the memory on the 1st load, and used on // the 2nd load. But it shouldn't be saved to the disk cache. { title: "small file", items: [ { file: "file_js_cache_small.js", events: [ ev("load:source", "file_js_cache_small.js"), ev("memorycache:saved", "file_js_cache_small.js"), ev("evaluate:classic", "file_js_cache_small.js"), ev("diskcache:noschedule"), ], }, { file: "file_js_cache_small.js", events: [ ev("load:memorycache", "file_js_cache_small.js"), ev("evaluate:classic", "file_js_cache_small.js"), ev("diskcache:noschedule"), ], }, { file: "file_js_cache_small.js", events: [ ev("load:memorycache", "file_js_cache_small.js"), ev("evaluate:classic", "file_js_cache_small.js"), ev("diskcache:noschedule"), ], }, { file: "file_js_cache_small.js", events: [ ev("load:memorycache", "file_js_cache_small.js"), ev("evaluate:classic", "file_js_cache_small.js"), ev("diskcache:noschedule"), ], }, ], }, // A large file should be saved to the memory on the 1st load, and used on // the 2nd load. Also it should be saved to the disk on the 4th load. // Also the 5th load shouldn't overwrite the cache. // Once the memory cache is purged, it should be populated from the disk // cache response. { title: "large file", 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", 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"), ], }, { clearMemory: true, file: "file_js_cache_large.js", events: [ 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", events: [ ev("load:memorycache", "file_js_cache_large.js"), ev("evaluate:classic", "file_js_cache_large.js"), ev("diskcache:noschedule"), ], }, ], }, // A file with compile error shouldn't be saved to any cache. { title: "syntax error", items: [ { file: "file_js_cache_large_syntax_error.js", events: [ ev("load:source", "file_js_cache_large_syntax_error.js"), ev("diskcache:noschedule"), ], }, { file: "file_js_cache_large_syntax_error.js", events: [ ev("load:source", "file_js_cache_large_syntax_error.js"), ev("diskcache:noschedule"), ], }, { file: "file_js_cache_large_syntax_error.js", events: [ ev("load:source", "file_js_cache_large_syntax_error.js"), ev("diskcache:noschedule"), ], }, { file: "file_js_cache_large_syntax_error.js", events: [ ev("load:source", "file_js_cache_large_syntax_error.js"), ev("diskcache:noschedule"), ], }, ], }, ]); await SpecialPowers.popPrefEnv(); });