commit 2d1895402a72c669fa5a465cb897dc26200e7f7d
parent c15f0967dd06f63e51adf18e462c5d1dcfce93dc
Author: Tooru Fujisawa <arai_a@mac.com>
Date: Wed, 22 Oct 2025 11:17:16 +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:
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)) {