tor-browser

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

commit c2b5cb885aaa3a83843c8f8e983efe63f8cf4068
parent 09b8ae44b8709f29ce02f69a7b181f4c2e576a20
Author: Tooru Fujisawa <arai_a@mac.com>
Date:   Wed, 22 Oct 2025 04:35:33 +0000

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

In order to remove ScriptLoadRequest::mReferrerPolicy field, we should directly
pass ReferrerPolicy to the LoadedScript constructor.

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

Diffstat:
Mdom/script/ModuleLoader.cpp | 6+++---
Mdom/script/ScriptLoader.cpp | 15+++++++++------
Mdom/script/ScriptLoader.h | 4++--
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 | 4+++-
Mjs/loader/ScriptLoadRequest.h | 2+-
Mjs/xpconnect/loader/SyncModuleLoader.cpp | 2+-
Mjs/xpconnect/loader/mozJSModuleLoader.cpp | 2+-
11 files changed, 24 insertions(+), 19 deletions(-)

diff --git a/dom/script/ModuleLoader.cpp b/dom/script/ModuleLoader.cpp @@ -455,8 +455,8 @@ already_AddRefed<ModuleLoadRequest> ModuleLoader::CreateTopLevel( aFetchOptions, aIntegrity, aReferrer, aContext, ModuleLoadRequest::Kind::TopLevel, this, nullptr); - GetScriptLoader()->TryUseCache(request, aElement, aFetchOptions->mNonce, - aRequestType); + GetScriptLoader()->TryUseCache(aReferrerPolicy, request, aElement, + aFetchOptions->mNonce, aRequestType); return request.forget(); } @@ -488,7 +488,7 @@ already_AddRefed<ModuleLoadRequest> ModuleLoader::CreateRequest( new ModuleLoadRequest(aURI, moduleType, aReferrerPolicy, aOptions, aSriMetadata, aBaseURL, context, kind, this, root); - GetScriptLoader()->TryUseCache(request); + GetScriptLoader()->TryUseCache(aReferrerPolicy, request); return request.forget(); } diff --git a/dom/script/ScriptLoader.cpp b/dom/script/ScriptLoader.cpp @@ -1145,17 +1145,18 @@ already_AddRefed<ScriptLoadRequest> ScriptLoader::CreateLoadRequest( new ScriptLoadRequest(aKind, aURI, aReferrerPolicy, fetchOptions, aIntegrity, referrer, context); - TryUseCache(request, aElement, aNonce, aRequestType); + TryUseCache(aReferrerPolicy, request, aElement, aNonce, aRequestType); return request.forget(); } -void ScriptLoader::TryUseCache(ScriptLoadRequest* aRequest, +void ScriptLoader::TryUseCache(ReferrerPolicy aReferrerPolicy, + ScriptLoadRequest* aRequest, nsIScriptElement* aElement, const nsAString& aNonce, ScriptLoadRequestType aRequestType) { if (aRequestType == ScriptLoadRequestType::Inline) { - aRequest->NoCacheEntryFound(); + aRequest->NoCacheEntryFound(aReferrerPolicy); LOG( ("ScriptLoader (%p): Created LoadedScript (%p) for " "ScriptLoadRequest(%p) %s.", @@ -1165,7 +1166,7 @@ void ScriptLoader::TryUseCache(ScriptLoadRequest* aRequest, } if (!mCache) { - aRequest->NoCacheEntryFound(); + aRequest->NoCacheEntryFound(aReferrerPolicy); LOG( ("ScriptLoader (%p): Created LoadedScript (%p) for " "ScriptLoadRequest(%p) %s.", @@ -1177,7 +1178,7 @@ void ScriptLoader::TryUseCache(ScriptLoadRequest* aRequest, ScriptHashKey key(this, aRequest, aRequest->mFetchOptions, aRequest->mURI); auto cacheResult = mCache->Lookup(*this, key, /* aSyncLoad = */ true); if (cacheResult.mState != CachedSubResourceState::Complete) { - aRequest->NoCacheEntryFound(); + aRequest->NoCacheEntryFound(aReferrerPolicy); LOG( ("ScriptLoader (%p): Created LoadedScript (%p) for " "ScriptLoadRequest(%p) %s.", @@ -1192,7 +1193,7 @@ void ScriptLoader::TryUseCache(ScriptLoadRequest* aRequest, if (NS_FAILED(CheckContentPolicy(aElement, aNonce, aRequest, aRequest->mFetchOptions, aRequest->mURI))) { - aRequest->NoCacheEntryFound(); + aRequest->NoCacheEntryFound(aReferrerPolicy); LOG( ("ScriptLoader (%p): Created LoadedScript (%p) for " "ScriptLoadRequest(%p) %s.", @@ -1204,6 +1205,8 @@ void ScriptLoader::TryUseCache(ScriptLoadRequest* aRequest, aRequest->mNetworkMetadata = cacheResult.mNetworkMetadata; + MOZ_ASSERT(cacheResult.mCompleteValue->ReferrerPolicy() == aReferrerPolicy); + aRequest->CacheEntryFound(cacheResult.mCompleteValue); LOG( ("ScriptLoader (%p): Found in-memory cache LoadedScript (%p) for " diff --git a/dom/script/ScriptLoader.h b/dom/script/ScriptLoader.h @@ -487,8 +487,8 @@ class ScriptLoader final : public JS::loader::ScriptLoaderInterface { * request if any. */ void TryUseCache( - ScriptLoadRequest* aRequest, nsIScriptElement* aElement = nullptr, - const nsAString& aNonce = u""_ns, + ReferrerPolicy aReferrerPolicy, 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 @@ -737,7 +737,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(); + request->NoCacheEntryFound(referrerPolicy); 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(); + request->NoCacheEntryFound(aReferrerPolicy); return request.forget(); } diff --git a/dom/worklet/WorkletFetchHandler.cpp b/dom/worklet/WorkletFetchHandler.cpp @@ -119,7 +119,7 @@ NS_IMETHODIMP StartModuleLoadRunnable::RunOnWorkletThread() { moduleLoader, nullptr); request->mURL = request->mURI->GetSpecOrDefault(); - request->NoCacheEntryFound(); + request->NoCacheEntryFound(ReferrerPolicy::_empty); 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( loadContext, ModuleLoadRequest::Kind::StaticImport, this, root); request->mURL = request->mURI->GetSpecOrDefault(); - request->NoCacheEntryFound(); + request->NoCacheEntryFound(aReferrerPolicy); return request.forget(); } diff --git a/js/loader/ScriptLoadRequest.cpp b/js/loader/ScriptLoadRequest.cpp @@ -223,12 +223,14 @@ void ScriptLoadRequest::CacheEntryFound(LoadedScript* aLoadedScript) { } } -void ScriptLoadRequest::NoCacheEntryFound() { +void ScriptLoadRequest::NoCacheEntryFound( + mozilla::dom::ReferrerPolicy aReferrerPolicy) { 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(mReferrerPolicy == aReferrerPolicy); switch (mKind) { case ScriptKind::eClassic: mLoadedScript = new ClassicScript(mReferrerPolicy, mFetchOptions, mURI); diff --git a/js/loader/ScriptLoadRequest.h b/js/loader/ScriptLoadRequest.h @@ -177,7 +177,7 @@ 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(); + void NoCacheEntryFound(mozilla::dom::ReferrerPolicy aReferrerPolicy); 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, aReferrerPolicy, aOptions, dom::SRIMetadata(), aBaseURL, context, kind, this, root); - request->NoCacheEntryFound(); + request->NoCacheEntryFound(aReferrerPolicy); return request.forget(); } diff --git a/js/xpconnect/loader/mozJSModuleLoader.cpp b/js/xpconnect/loader/mozJSModuleLoader.cpp @@ -1090,7 +1090,7 @@ nsresult mozJSModuleLoader::ImportESModule( /* aReferrer = */ nullptr, context, ModuleLoadRequest::Kind::TopLevel, mModuleLoader, nullptr); - request->NoCacheEntryFound(); + request->NoCacheEntryFound(dom::ReferrerPolicy::No_referrer); rv = request->StartModuleLoad(); if (NS_FAILED(rv)) {