tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

commit 3728e0c87fc4fa87ddf0c7a8183f2dd2329be96a
parent e697a404bb6e0b1be96b679ed6b384f7d736aa4c
Author: Tooru Fujisawa <arai_a@mac.com>
Date:   Wed, 19 Nov 2025 00:44:40 +0000

Bug 1998925 - Part 3: Add tests. r=nbp

Differential Revision: https://phabricator.services.mozilla.com/D271877

Diffstat:
Mdom/base/test/browser.toml | 16++++++++++++++++
Adom/base/test/browser_script_loader_js_cache_dirty.js | 146+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Adom/base/test/browser_script_loader_js_cache_dirty_module.js | 396+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Mdom/base/test/head.js | 4++++
4 files changed, 562 insertions(+), 0 deletions(-)

diff --git a/dom/base/test/browser.toml b/dom/base/test/browser.toml @@ -174,6 +174,22 @@ support-files = [ "file_js_cache_large.js", ] +["browser_script_loader_js_cache_dirty.js"] +support-files = [ + "empty.html", + "file_js_cache_large.js", +] + +["browser_script_loader_js_cache_dirty_module.js"] +support-files = [ + "empty.html", + "file_js_cache_large.js", + "file_js_cache_importer.mjs", + "file_js_cache_imported1.mjs", + "file_js_cache_imported2.mjs", + "file_js_cache_imported3.mjs", +] + ["browser_script_loader_js_cache_dyn_import.js"] support-files = [ "empty.html", diff --git a/dom/base/test/browser_script_loader_js_cache_dirty.js b/dom/base/test/browser_script_loader_js_cache_dirty.js @@ -0,0 +1,146 @@ +// ev, unordered, and runJSCacheTests are defined in head.js + +add_task(async function testMemoryCache_dirtyStateClassic() { + 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([ + { + title: "dirty state revive classic", + 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"), + ], + }, + { + invalidateMemory: true, + file: "file_js_cache_large.js", + events: [ + ev("memorycache:dirty:hit", "file_js_cache_large.js"), + ev("load:source", "file_js_cache_large.js"), + ev("memorycache:dirty:revived", "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"), + ], + }, + ], + }, + { + title: "dirty state evict classic", + 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"), + ], + }, + { + invalidateMemory: true, + clearDisk: true, + file: "file_js_cache_large.js", + events: [ + ev("memorycache:dirty:hit", "file_js_cache_large.js"), + ev("load:source", "file_js_cache_large.js"), + ev("memorycache:dirty:evicted", "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"), + ], + }, + ], + }, + ]); + + await SpecialPowers.popPrefEnv(); +}); diff --git a/dom/base/test/browser_script_loader_js_cache_dirty_module.js b/dom/base/test/browser_script_loader_js_cache_dirty_module.js @@ -0,0 +1,396 @@ +// ev, unordered, and runJSCacheTests are defined in head.js + +add_task(async function testMemoryCache_dirtyStateModule() { + 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([ + { + title: "dirty state revive module", + 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"), + ], + }, + { + invalidateMemory: true, + file: "file_js_cache_large.js", + module: true, + events: [ + ev("memorycache:dirty:hit", "file_js_cache_large.js"), + ev("load:source", "file_js_cache_large.js"), + ev("memorycache:dirty:revived", "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", + 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"), + ], + }, + ], + }, + { + title: "dirty state evict module", + 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"), + ], + }, + { + invalidateMemory: true, + clearDisk: true, + file: "file_js_cache_large.js", + module: true, + events: [ + ev("memorycache:dirty:hit", "file_js_cache_large.js"), + ev("load:source", "file_js_cache_large.js"), + ev("memorycache:dirty:evicted", "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_js_cache_large.js", false), + ], + }, + { + 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", + module: true, + events: [ + ev("load:memorycache", "file_js_cache_large.js"), + ev("evaluate:module", "file_js_cache_large.js"), + ev("diskcache:noschedule"), + ], + }, + ], + }, + { + title: "dirty state revive imported", + module: true, + items: [ + { + file: "file_js_cache_importer.mjs", + events: [ + ev("load:source", "file_js_cache_importer.mjs"), + ev("memorycache:saved", "file_js_cache_importer.mjs"), + unordered([ + ev("load:source", "file_js_cache_imported1.mjs", false), + ev("memorycache:saved", "file_js_cache_imported1.mjs", false), + ev("load:source", "file_js_cache_imported2.mjs", false), + ev("memorycache:saved", "file_js_cache_imported2.mjs", false), + ev("load:source", "file_js_cache_imported3.mjs", false), + ev("memorycache:saved", "file_js_cache_imported3.mjs", false), + ]), + ev("evaluate:module", "file_js_cache_importer.mjs"), + ev("diskcache:noschedule"), + ], + }, + { + file: "file_js_cache_importer.mjs", + events: [ + ev("load:memorycache", "file_js_cache_importer.mjs"), + unordered([ + ev("load:memorycache", "file_js_cache_imported1.mjs", false), + ev("load:memorycache", "file_js_cache_imported2.mjs", false), + ev("load:memorycache", "file_js_cache_imported3.mjs", false), + ]), + ev("evaluate:module", "file_js_cache_importer.mjs"), + ev("diskcache:noschedule"), + ], + }, + { + invalidateMemory: true, + file: "file_js_cache_importer.mjs", + events: [ + ev("memorycache:dirty:hit", "file_js_cache_large.js"), + ev("load:source", "file_js_cache_importer.mjs"), + ev("memorycache:dirty:revived", "file_js_cache_importer.mjs"), + unordered([ + ev("memorycache:dirty:hit", "file_js_cache_imported1.mjs", false), + ev("load:source", "file_js_cache_imported1.mjs", false), + ev( + "memorycache:dirty:revived", + "file_js_cache_imported1.mjs", + false + ), + + ev("memorycache:dirty:hit", "file_js_cache_imported2.mjs", false), + ev("load:source", "file_js_cache_imported2.mjs", false), + ev( + "memorycache:dirty:revived", + "file_js_cache_imported2.mjs", + false + ), + + ev("memorycache:dirty:hit", "file_js_cache_imported3.mjs", false), + ev("load:source", "file_js_cache_imported3.mjs", false), + ev( + "memorycache:dirty:revived", + "file_js_cache_imported3.mjs", + false + ), + ]), + ev("evaluate:module", "file_js_cache_importer.mjs"), + ev("diskcache:noschedule"), + ], + }, + { + file: "file_js_cache_importer.mjs", + events: [ + ev("load:memorycache", "file_js_cache_importer.mjs"), + unordered([ + ev("load:memorycache", "file_js_cache_imported1.mjs", false), + ev("load:memorycache", "file_js_cache_imported2.mjs", false), + ev("load:memorycache", "file_js_cache_imported3.mjs", false), + ]), + ev("evaluate:module", "file_js_cache_importer.mjs"), + unordered([ + ev("diskcache:saved", "file_js_cache_importer.mjs", false), + ev("diskcache:saved", "file_js_cache_imported1.mjs", false), + ev("diskcache:saved", "file_js_cache_imported2.mjs", false), + ev("diskcache:saved", "file_js_cache_imported3.mjs", false), + ]), + ], + }, + { + file: "file_js_cache_importer.mjs", + events: [ + ev("load:memorycache", "file_js_cache_importer.mjs"), + unordered([ + ev("load:memorycache", "file_js_cache_imported1.mjs", false), + ev("load:memorycache", "file_js_cache_imported2.mjs", false), + ev("load:memorycache", "file_js_cache_imported3.mjs", false), + ]), + ev("evaluate:module", "file_js_cache_importer.mjs"), + ev("diskcache:noschedule"), + ], + }, + ], + }, + { + title: "dirty state evict imported", + module: true, + items: [ + { + file: "file_js_cache_importer.mjs", + events: [ + ev("load:source", "file_js_cache_importer.mjs"), + ev("memorycache:saved", "file_js_cache_importer.mjs"), + unordered([ + ev("load:source", "file_js_cache_imported1.mjs", false), + ev("memorycache:saved", "file_js_cache_imported1.mjs", false), + ev("load:source", "file_js_cache_imported2.mjs", false), + ev("memorycache:saved", "file_js_cache_imported2.mjs", false), + ev("load:source", "file_js_cache_imported3.mjs", false), + ev("memorycache:saved", "file_js_cache_imported3.mjs", false), + ]), + ev("evaluate:module", "file_js_cache_importer.mjs"), + ev("diskcache:noschedule"), + ], + }, + { + file: "file_js_cache_importer.mjs", + events: [ + ev("load:memorycache", "file_js_cache_importer.mjs"), + unordered([ + ev("load:memorycache", "file_js_cache_imported1.mjs", false), + ev("load:memorycache", "file_js_cache_imported2.mjs", false), + ev("load:memorycache", "file_js_cache_imported3.mjs", false), + ]), + ev("evaluate:module", "file_js_cache_importer.mjs"), + ev("diskcache:noschedule"), + ], + }, + { + invalidateMemory: true, + clearDisk: true, + file: "file_js_cache_importer.mjs", + events: [ + ev("memorycache:dirty:hit", "file_js_cache_large.js"), + ev("load:source", "file_js_cache_importer.mjs"), + ev("memorycache:dirty:evicted", "file_js_cache_importer.mjs"), + ev("memorycache:saved", "file_js_cache_importer.mjs"), + unordered([ + ev("memorycache:dirty:hit", "file_js_cache_imported1.mjs", false), + ev("load:source", "file_js_cache_imported1.mjs", false), + ev( + "memorycache:dirty:evicted", + "file_js_cache_imported1.mjs", + false + ), + ev("memorycache:saved", "file_js_cache_imported1.mjs", false), + + ev("memorycache:dirty:hit", "file_js_cache_imported2.mjs", false), + ev("load:source", "file_js_cache_imported2.mjs", false), + ev( + "memorycache:dirty:evicted", + "file_js_cache_imported2.mjs", + false + ), + ev("memorycache:saved", "file_js_cache_imported2.mjs", false), + + ev("memorycache:dirty:hit", "file_js_cache_imported3.mjs", false), + ev("load:source", "file_js_cache_imported3.mjs", false), + ev( + "memorycache:dirty:evicted", + "file_js_cache_imported3.mjs", + false + ), + ev("memorycache:saved", "file_js_cache_imported3.mjs", false), + ]), + ev("evaluate:module", "file_js_cache_importer.mjs"), + ev("diskcache:noschedule"), + ], + }, + { + file: "file_js_cache_importer.mjs", + events: [ + ev("load:memorycache", "file_js_cache_importer.mjs"), + unordered([ + ev("load:memorycache", "file_js_cache_imported1.mjs", false), + ev("load:memorycache", "file_js_cache_imported2.mjs", false), + ev("load:memorycache", "file_js_cache_imported3.mjs", false), + ]), + ev("evaluate:module", "file_js_cache_importer.mjs"), + ev("diskcache:noschedule"), + ], + }, + { + file: "file_js_cache_importer.mjs", + events: [ + ev("load:memorycache", "file_js_cache_importer.mjs"), + unordered([ + ev("load:memorycache", "file_js_cache_imported1.mjs", false), + ev("load:memorycache", "file_js_cache_imported2.mjs", false), + ev("load:memorycache", "file_js_cache_imported3.mjs", false), + ]), + ev("evaluate:module", "file_js_cache_importer.mjs"), + ev("diskcache:noschedule"), + ], + }, + { + file: "file_js_cache_importer.mjs", + events: [ + ev("load:memorycache", "file_js_cache_importer.mjs"), + unordered([ + ev("load:memorycache", "file_js_cache_imported1.mjs", false), + ev("load:memorycache", "file_js_cache_imported2.mjs", false), + ev("load:memorycache", "file_js_cache_imported3.mjs", false), + ]), + ev("evaluate:module", "file_js_cache_importer.mjs"), + unordered([ + ev("diskcache:saved", "file_js_cache_importer.mjs", false), + ev("diskcache:saved", "file_js_cache_imported1.mjs", false), + ev("diskcache:saved", "file_js_cache_imported2.mjs", false), + ev("diskcache:saved", "file_js_cache_imported3.mjs", false), + ]), + ], + }, + { + file: "file_js_cache_importer.mjs", + events: [ + ev("load:memorycache", "file_js_cache_importer.mjs"), + unordered([ + ev("load:memorycache", "file_js_cache_imported1.mjs", false), + ev("load:memorycache", "file_js_cache_imported2.mjs", false), + ev("load:memorycache", "file_js_cache_imported3.mjs", false), + ]), + ev("evaluate:module", "file_js_cache_importer.mjs"), + ev("diskcache:noschedule"), + ], + }, + ], + }, + ]); + + await SpecialPowers.popPrefEnv(); +}); diff --git a/dom/base/test/head.js b/dom/base/test/head.js @@ -189,6 +189,10 @@ async function runJSCacheTests(tests) { info("clear memory cache"); ChromeUtils.clearResourceCache(); } + if (item.invalidateMemory) { + info("invalidate memory cache"); + ChromeUtils.invalidateResourceCache(); + } if (item.clearDisk) { info("clear disk cache"); Services.cache2.clear();