tor-browser

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

commit ebfd828841d4f0f038e5a83abb3645123370c04d
parent 05d576ee5539eff58de39c60ac504357be563608
Author: Cornelius Emase <corneliuslochipi@gmail.com>
Date:   Mon,  3 Nov 2025 16:35:22 +0000

Bug 1996859 - Handle 'bytes' module type in DOM loaders. r=dminor,dom-core,smaug

Add support for JS::ModuleType::Bytes in Worker and Worklet loaders.
Duplicate Unknown handling and restrict IsModuleTypeAllowed to JS and
JSON modules only.

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

Diffstat:
Mdom/script/ModuleLoader.cpp | 2++
Mdom/script/ScriptLoader.cpp | 3+++
Mdom/workers/loader/WorkerModuleLoader.cpp | 1+
Mdom/workers/loader/WorkerModuleLoader.h | 4++--
Mdom/worklet/loader/WorkletModuleLoader.cpp | 1+
Mdom/worklet/loader/WorkletModuleLoader.h | 4++--
6 files changed, 11 insertions(+), 4 deletions(-)

diff --git a/dom/script/ModuleLoader.cpp b/dom/script/ModuleLoader.cpp @@ -226,6 +226,8 @@ nsresult ModuleLoader::CompileFetchedModule( return CompileJsonModule(aCx, aOptions, aRequest, aModuleOut); case JS::ModuleType::CSS: return CompileCssModule(aCx, aOptions, aRequest, aModuleOut); + case JS::ModuleType::Bytes: + MOZ_CRASH("Unexpected module type"); } MOZ_CRASH("Unhandled module type"); diff --git a/dom/script/ScriptLoader.cpp b/dom/script/ScriptLoader.cpp @@ -438,6 +438,7 @@ nsContentPolicyType ScriptLoadRequestToContentPolicyType( return nsIContentPolicy::TYPE_INTERNAL_JSON_PRELOAD; case JS::ModuleType::CSS: return nsIContentPolicy::TYPE_INTERNAL_STYLESHEET_PRELOAD; + case JS::ModuleType::Bytes: case JS::ModuleType::Unknown: MOZ_ASSERT_UNREACHABLE("Unknown module type"); } @@ -449,6 +450,7 @@ nsContentPolicyType ScriptLoadRequestToContentPolicyType( if (aRequest->IsModuleRequest()) { switch (aRequest->AsModuleRequest()->mModuleType) { case JS::ModuleType::Unknown: + case JS::ModuleType::Bytes: MOZ_CRASH("Unexpected module type"); case JS::ModuleType::JavaScript: return nsIContentPolicy::TYPE_INTERNAL_MODULE; @@ -4509,6 +4511,7 @@ static bool MimeTypeMatchesExpectedModuleType( case JS::ModuleType::CSS: return nsContentUtils::IsCssMimeType(typeString); case JS::ModuleType::Unknown: + case JS::ModuleType::Bytes: break; } diff --git a/dom/workers/loader/WorkerModuleLoader.cpp b/dom/workers/loader/WorkerModuleLoader.cpp @@ -145,6 +145,7 @@ nsresult WorkerModuleLoader::CompileFetchedModule( ModuleLoadRequest* aRequest, JS::MutableHandle<JSObject*> aModuleScript) { switch (aRequest->mModuleType) { case JS::ModuleType::Unknown: + case JS::ModuleType::Bytes: MOZ_CRASH("Unexpected module type"); case JS::ModuleType::JavaScript: return CompileJavaScriptModule(aCx, aOptions, aRequest, aModuleScript); diff --git a/dom/workers/loader/WorkerModuleLoader.h b/dom/workers/loader/WorkerModuleLoader.h @@ -95,8 +95,8 @@ class WorkerModuleLoader : public JS::loader::ModuleLoaderBase { // https://html.spec.whatwg.org/#module-type-allowed // If moduleType is "css" and the CSSStyleSheet interface is not exposed in // settings's realm, then return false. - return aModuleType != JS::ModuleType::Unknown && - aModuleType != JS::ModuleType::CSS; + return aModuleType == JS::ModuleType::JavaScript || + aModuleType == JS::ModuleType::JSON; } }; diff --git a/dom/worklet/loader/WorkletModuleLoader.cpp b/dom/worklet/loader/WorkletModuleLoader.cpp @@ -107,6 +107,7 @@ nsresult WorkletModuleLoader::CompileFetchedModule( ModuleLoadRequest* aRequest, JS::MutableHandle<JSObject*> aModuleScript) { switch (aRequest->mModuleType) { case JS::ModuleType::Unknown: + case JS::ModuleType::Bytes: MOZ_CRASH("Unexpected module type"); case JS::ModuleType::JavaScript: return CompileJavaScriptModule(aCx, aOptions, aRequest, aModuleScript); diff --git a/dom/worklet/loader/WorkletModuleLoader.h b/dom/worklet/loader/WorkletModuleLoader.h @@ -94,8 +94,8 @@ class WorkletModuleLoader : public JS::loader::ModuleLoaderBase { // https://html.spec.whatwg.org/#module-type-allowed // If moduleType is "css" and the CSSStyleSheet interface is not exposed in // settings's realm, then return false. - return aModuleType != JS::ModuleType::Unknown && - aModuleType != JS::ModuleType::CSS; + return aModuleType == JS::ModuleType::JavaScript || + aModuleType == JS::ModuleType::JSON; } // A hashtable to map a nsIURI(from main thread) to a ModuleLoadRequest(in