tor-browser

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

commit f48d2160e1bf8364350954fb28d5a8559d0356de
parent a6901c3f1d520a3893be49cea4da6ee031f72a72
Author: Tooru Fujisawa <arai_a@mac.com>
Date:   Wed, 22 Oct 2025 04:35:34 +0000

Bug 1991607 - Part 7: Pass FetchOptions to LoadedScript ctor from ScriptLoadRequest ctor callsites. r=bthrall,dom-worker-reviewers,edenchuang

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

Diffstat:
Mdom/script/ModuleLoader.cpp | 6+++---
Mdom/script/ScriptLoader.cpp | 14+++++++++-----
Mdom/script/ScriptLoader.h | 5+++--
Mdom/workers/ScriptLoader.cpp | 2+-
Mdom/workers/loader/WorkerModuleLoader.cpp | 2+-
Mdom/worklet/WorkletFetchHandler.cpp | 2+-
Mdom/worklet/loader/WorkletModuleLoader.cpp | 2+-
Mjs/loader/ScriptLoadRequest.cpp | 6+++---
Mjs/loader/ScriptLoadRequest.h | 3++-
Mjs/xpconnect/loader/SyncModuleLoader.cpp | 2+-
Mjs/xpconnect/loader/mozJSModuleLoader.cpp | 2+-
11 files changed, 26 insertions(+), 20 deletions(-)

diff --git a/dom/script/ModuleLoader.cpp b/dom/script/ModuleLoader.cpp @@ -454,8 +454,8 @@ already_AddRefed<ModuleLoadRequest> ModuleLoader::CreateTopLevel( aURI, JS::ModuleType::JavaScript, aFetchOptions, aIntegrity, aReferrer, aContext, ModuleLoadRequest::Kind::TopLevel, this, nullptr); - GetScriptLoader()->TryUseCache(aReferrerPolicy, request, aElement, - aFetchOptions->mNonce, aRequestType); + GetScriptLoader()->TryUseCache(aReferrerPolicy, aFetchOptions, request, + aElement, aFetchOptions->mNonce, aRequestType); return request.forget(); } @@ -487,7 +487,7 @@ already_AddRefed<ModuleLoadRequest> ModuleLoader::CreateRequest( new ModuleLoadRequest(aURI, moduleType, aOptions, aSriMetadata, aBaseURL, context, kind, this, root); - GetScriptLoader()->TryUseCache(aReferrerPolicy, request); + GetScriptLoader()->TryUseCache(aReferrerPolicy, aOptions, request); return request.forget(); } diff --git a/dom/script/ScriptLoader.cpp b/dom/script/ScriptLoader.cpp @@ -1144,18 +1144,20 @@ already_AddRefed<ScriptLoadRequest> ScriptLoader::CreateLoadRequest( RefPtr<ScriptLoadRequest> request = new ScriptLoadRequest( aKind, aURI, fetchOptions, aIntegrity, referrer, context); - TryUseCache(aReferrerPolicy, request, aElement, aNonce, aRequestType); + TryUseCache(aReferrerPolicy, fetchOptions, request, aElement, aNonce, + aRequestType); return request.forget(); } void ScriptLoader::TryUseCache(ReferrerPolicy aReferrerPolicy, + ScriptFetchOptions* aFetchOptions, ScriptLoadRequest* aRequest, nsIScriptElement* aElement, const nsAString& aNonce, ScriptLoadRequestType aRequestType) { if (aRequestType == ScriptLoadRequestType::Inline) { - aRequest->NoCacheEntryFound(aReferrerPolicy); + aRequest->NoCacheEntryFound(aReferrerPolicy, aFetchOptions); LOG( ("ScriptLoader (%p): Created LoadedScript (%p) for " "ScriptLoadRequest(%p) %s.", @@ -1165,7 +1167,7 @@ void ScriptLoader::TryUseCache(ReferrerPolicy aReferrerPolicy, } if (!mCache) { - aRequest->NoCacheEntryFound(aReferrerPolicy); + aRequest->NoCacheEntryFound(aReferrerPolicy, aFetchOptions); LOG( ("ScriptLoader (%p): Created LoadedScript (%p) for " "ScriptLoadRequest(%p) %s.", @@ -1177,7 +1179,7 @@ void ScriptLoader::TryUseCache(ReferrerPolicy aReferrerPolicy, ScriptHashKey key(this, aRequest, aRequest->mFetchOptions, aRequest->mURI); auto cacheResult = mCache->Lookup(*this, key, /* aSyncLoad = */ true); if (cacheResult.mState != CachedSubResourceState::Complete) { - aRequest->NoCacheEntryFound(aReferrerPolicy); + aRequest->NoCacheEntryFound(aReferrerPolicy, aFetchOptions); LOG( ("ScriptLoader (%p): Created LoadedScript (%p) for " "ScriptLoadRequest(%p) %s.", @@ -1192,7 +1194,7 @@ void ScriptLoader::TryUseCache(ReferrerPolicy aReferrerPolicy, if (NS_FAILED(CheckContentPolicy(aElement, aNonce, aRequest, aRequest->mFetchOptions, aRequest->mURI))) { - aRequest->NoCacheEntryFound(aReferrerPolicy); + aRequest->NoCacheEntryFound(aReferrerPolicy, aFetchOptions); LOG( ("ScriptLoader (%p): Created LoadedScript (%p) for " "ScriptLoadRequest(%p) %s.", @@ -1205,6 +1207,8 @@ void ScriptLoader::TryUseCache(ReferrerPolicy aReferrerPolicy, aRequest->mNetworkMetadata = cacheResult.mNetworkMetadata; MOZ_ASSERT(cacheResult.mCompleteValue->ReferrerPolicy() == aReferrerPolicy); + MOZ_ASSERT(aFetchOptions->IsCompatible( + cacheResult.mCompleteValue->GetFetchOptions())); aRequest->CacheEntryFound(cacheResult.mCompleteValue); LOG( diff --git a/dom/script/ScriptLoader.h b/dom/script/ScriptLoader.h @@ -487,8 +487,9 @@ class ScriptLoader final : public JS::loader::ScriptLoaderInterface { * request if any. */ void TryUseCache( - ReferrerPolicy aReferrerPolicy, ScriptLoadRequest* aRequest, - nsIScriptElement* aElement = nullptr, const nsAString& aNonce = u""_ns, + ReferrerPolicy aReferrerPolicy, ScriptFetchOptions* aFetchOptions, + ScriptLoadRequest* aRequest, nsIScriptElement* aElement = nullptr, + const nsAString& aNonce = u""_ns, ScriptLoadRequestType aRequestType = ScriptLoadRequestType::External); /** diff --git a/dom/workers/ScriptLoader.cpp b/dom/workers/ScriptLoader.cpp @@ -736,7 +736,7 @@ already_AddRefed<ScriptLoadRequest> WorkerScriptLoader::CreateScriptLoadRequest( // Set the mURL, it will be used for error handling and debugging. request->mURL = NS_ConvertUTF16toUTF8(aScriptURL); - request->NoCacheEntryFound(referrerPolicy); + request->NoCacheEntryFound(referrerPolicy, fetchOptions); return request.forget(); } diff --git a/dom/workers/loader/WorkerModuleLoader.cpp b/dom/workers/loader/WorkerModuleLoader.cpp @@ -101,7 +101,7 @@ already_AddRefed<ModuleLoadRequest> WorkerModuleLoader::CreateRequest( loadContext, kind, this, root); request->mURL = request->mURI->GetSpecOrDefault(); - request->NoCacheEntryFound(aReferrerPolicy); + request->NoCacheEntryFound(aReferrerPolicy, aOptions); return request.forget(); } diff --git a/dom/worklet/WorkletFetchHandler.cpp b/dom/worklet/WorkletFetchHandler.cpp @@ -118,7 +118,7 @@ NS_IMETHODIMP StartModuleLoadRunnable::RunOnWorkletThread() { loadContext, ModuleLoadRequest::Kind::TopLevel, moduleLoader, nullptr); request->mURL = request->mURI->GetSpecOrDefault(); - request->NoCacheEntryFound(ReferrerPolicy::_empty); + request->NoCacheEntryFound(ReferrerPolicy::_empty, fetchOptions); return request->StartModuleLoad(); } diff --git a/dom/worklet/loader/WorkletModuleLoader.cpp b/dom/worklet/loader/WorkletModuleLoader.cpp @@ -83,7 +83,7 @@ already_AddRefed<ModuleLoadRequest> WorkletModuleLoader::CreateRequest( ModuleLoadRequest::Kind::StaticImport, this, root); request->mURL = request->mURI->GetSpecOrDefault(); - request->NoCacheEntryFound(aReferrerPolicy); + request->NoCacheEntryFound(aReferrerPolicy, aOptions); return request.forget(); } diff --git a/js/loader/ScriptLoadRequest.cpp b/js/loader/ScriptLoadRequest.cpp @@ -177,8 +177,6 @@ void ScriptLoadRequest::CacheEntryFound(LoadedScript* aLoadedScript) { MOZ_ASSERT(IsCheckingCache()); MOZ_ASSERT(mURI); - MOZ_ASSERT(mFetchOptions->IsCompatible(aLoadedScript->GetFetchOptions())); - switch (mKind) { case ScriptKind::eClassic: MOZ_ASSERT(aLoadedScript->IsClassicScript()); @@ -223,12 +221,14 @@ void ScriptLoadRequest::CacheEntryFound(LoadedScript* aLoadedScript) { } void ScriptLoadRequest::NoCacheEntryFound( - mozilla::dom::ReferrerPolicy aReferrerPolicy) { + mozilla::dom::ReferrerPolicy aReferrerPolicy, + ScriptFetchOptions* aFetchOptions) { MOZ_ASSERT(IsCheckingCache()); MOZ_ASSERT(mURI); // At the time where we check in the cache, the mBaseURL is not set, as this // is resolved by the network. Thus we use the mURI, for checking the cache // and later replace the mBaseURL using what the Channel->GetURI will provide. + MOZ_ASSERT(mFetchOptions == aFetchOptions); switch (mKind) { case ScriptKind::eClassic: mLoadedScript = new ClassicScript(aReferrerPolicy, mFetchOptions, mURI); diff --git a/js/loader/ScriptLoadRequest.h b/js/loader/ScriptLoadRequest.h @@ -172,7 +172,8 @@ class ScriptLoadRequest : public nsISupports, // Convert a CheckingCache ScriptLoadRequest into a Fetching one, by creating // a new LoadedScript which is matching the ScriptKind provided when // constructing this ScriptLoadRequest. - void NoCacheEntryFound(mozilla::dom::ReferrerPolicy aReferrerPolicy); + void NoCacheEntryFound(mozilla::dom::ReferrerPolicy aReferrerPolicy, + ScriptFetchOptions* aFetchOptions); bool PassedConditionForDiskCache() const { return mDiskCachingPlan == CachingPlan::PassedCondition; diff --git a/js/xpconnect/loader/SyncModuleLoader.cpp b/js/xpconnect/loader/SyncModuleLoader.cpp @@ -83,7 +83,7 @@ already_AddRefed<ModuleLoadRequest> SyncModuleLoader::CreateRequest( RefPtr<ModuleLoadRequest> request = new ModuleLoadRequest(aURI, moduleType, aOptions, dom::SRIMetadata(), aBaseURL, context, kind, this, root); - request->NoCacheEntryFound(aReferrerPolicy); + request->NoCacheEntryFound(aReferrerPolicy, aOptions); return request.forget(); } diff --git a/js/xpconnect/loader/mozJSModuleLoader.cpp b/js/xpconnect/loader/mozJSModuleLoader.cpp @@ -1089,7 +1089,7 @@ nsresult mozJSModuleLoader::ImportESModule( /* aReferrer = */ nullptr, context, ModuleLoadRequest::Kind::TopLevel, mModuleLoader, nullptr); - request->NoCacheEntryFound(dom::ReferrerPolicy::No_referrer); + request->NoCacheEntryFound(dom::ReferrerPolicy::No_referrer, options); rv = request->StartModuleLoad(); if (NS_FAILED(rv)) {