tor-browser

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

commit 26107c4f63741a94b958b19cb54be1c5c01c075e
parent dab845c9edf7165672bd6dbb8e8a28763ab379f9
Author: Daniel Minor <dminor@mozilla.com>
Date:   Fri, 12 Dec 2025 14:12:36 +0000

Bug 1994828 - Don't cache wasm modules; r=arai

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

Diffstat:
Mdom/script/ScriptLoader.cpp | 41++++++++++++++++++++++++++++++++---------
1 file changed, 32 insertions(+), 9 deletions(-)

diff --git a/dom/script/ScriptLoader.cpp b/dom/script/ScriptLoader.cpp @@ -2775,15 +2775,33 @@ void ScriptLoader::CalculateCacheFlag(ScriptLoadRequest* aRequest) { return; } - if (aRequest->IsModuleRequest() && - aRequest->AsModuleRequest()->mModuleType != JS::ModuleType::JavaScript) { - LOG(("ScriptLoadRequest (%p): Bytecode-cache: Skip all: JSON module", - aRequest)); - aRequest->MarkNotCacheable(); - MOZ_ASSERT(!aRequest->getLoadedScript()->HasDiskCacheReference()); - MOZ_ASSERT_IF(aRequest->IsTextSource(), - aRequest->HasNoSRIOrSRIAndSerializedStencil()); - return; + if (aRequest->IsModuleRequest()) { + ModuleLoadRequest* moduleLoadRequest = aRequest->AsModuleRequest(); + if (moduleLoadRequest->mModuleType == JS::ModuleType::JavaScriptOrWasm) { +#ifdef NIGHTLY_BUILD + // See https://bugzilla.mozilla.org/show_bug.cgi?id=1998240 + // For now, we don't support caching wasm modules. + if (moduleLoadRequest->HasWasmMimeTypeEssence()) { + LOG(("ScriptLoadRequest (%p): Bytecode-cache: Skip all: wasm module", + aRequest)); + aRequest->MarkNotCacheable(); + // The disk reference is cleared when we do the mime essense check + // in PrepareLoadedRequest. + MOZ_ASSERT(!aRequest->getLoadedScript()->HasDiskCacheReference()); + MOZ_ASSERT_IF(aRequest->IsTextSource(), + aRequest->HasNoSRIOrSRIAndSerializedStencil()); + return; + } +#endif + } else { + LOG(("ScriptLoadRequest (%p): Bytecode-cache: Skip all: synthetic module", + aRequest)); + aRequest->MarkNotCacheable(); + MOZ_ASSERT(!aRequest->getLoadedScript()->HasDiskCacheReference()); + MOZ_ASSERT_IF(aRequest->IsTextSource(), + aRequest->HasNoSRIOrSRIAndSerializedStencil()); + return; + } } if (!aRequest->IsCachedStencil() && aRequest->ExpirationTime().IsExpired()) { @@ -4630,6 +4648,11 @@ nsresult ScriptLoader::PrepareLoadedRequest(ScriptLoadRequest* aRequest, if (nsContentUtils::HasWasmMimeTypeEssence( NS_ConvertUTF8toUTF16(mimeType))) { aRequest->AsModuleRequest()->SetHasWasmMimeTypeEssence(); + // See https://bugzilla.mozilla.org/show_bug.cgi?id=1998240 + // For now, we don't support caching wasm modules. We enable + // caching in ScriptLoader::OnStreamComplete for + // text streams prior to reaching the mime type check. + aRequest->getLoadedScript()->DropDiskCacheReferenceAndSRI(); } } }