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