tor-browser

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

commit 9cd82d3aa1c438b4dd19e21b901275580119a5b9
parent 1e6cf884b04b7737dfd67b4411e5a5e6fa24e9c2
Author: Tooru Fujisawa <arai_a@mac.com>
Date:   Wed, 22 Oct 2025 11:17:16 +0000

Bug 1991607 - Part 8: Remove ScriptLoadRequest::mFetchOptions. r=bthrall,dom-worker-reviewers,edenchuang

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

Diffstat:
Mdom/script/ModuleLoader.cpp | 9++++-----
Mdom/script/ScriptLoader.cpp | 22++++++++++++----------
Mdom/script/SharedScriptCache.cpp | 2+-
Mdom/workers/ScriptLoader.cpp | 9+++------
Mdom/workers/loader/WorkerModuleLoader.cpp | 5++---
Mdom/worklet/WorkletFetchHandler.cpp | 4++--
Mdom/worklet/loader/WorkletModuleLoader.cpp | 2+-
Mjs/loader/LoadedScript.h | 4++++
Mjs/loader/ModuleLoadRequest.cpp | 6+++---
Mjs/loader/ModuleLoadRequest.h | 1-
Mjs/loader/ModuleLoaderBase.cpp | 2--
Mjs/loader/ScriptLoadRequest.cpp | 13++++---------
Mjs/loader/ScriptLoadRequest.h | 12+++++-------
Mjs/xpconnect/loader/SyncModuleLoader.cpp | 4++--
Mjs/xpconnect/loader/mozJSModuleLoader.cpp | 2+-
15 files changed, 44 insertions(+), 53 deletions(-)

diff --git a/dom/script/ModuleLoader.cpp b/dom/script/ModuleLoader.cpp @@ -451,8 +451,8 @@ already_AddRefed<ModuleLoadRequest> ModuleLoader::CreateTopLevel( nsIURI* aReferrer, ScriptLoadContext* aContext, ScriptLoadRequestType aRequestType) { RefPtr<ModuleLoadRequest> request = new ModuleLoadRequest( - aURI, JS::ModuleType::JavaScript, aFetchOptions, aIntegrity, aReferrer, - aContext, ModuleLoadRequest::Kind::TopLevel, this, nullptr); + aURI, JS::ModuleType::JavaScript, aIntegrity, aReferrer, aContext, + ModuleLoadRequest::Kind::TopLevel, this, nullptr); GetScriptLoader()->TryUseCache(aReferrerPolicy, aFetchOptions, request, aElement, aFetchOptions->mNonce, aRequestType); @@ -483,9 +483,8 @@ already_AddRefed<ModuleLoadRequest> ModuleLoader::CreateRequest( } JS::ModuleType moduleType = GetModuleRequestType(aCx, aModuleRequest); - RefPtr<ModuleLoadRequest> request = - new ModuleLoadRequest(aURI, moduleType, aOptions, aSriMetadata, aBaseURL, - context, kind, this, root); + RefPtr<ModuleLoadRequest> request = new ModuleLoadRequest( + aURI, moduleType, aSriMetadata, aBaseURL, context, kind, this, root); GetScriptLoader()->TryUseCache(aReferrerPolicy, aOptions, request); diff --git a/dom/script/ScriptLoader.cpp b/dom/script/ScriptLoader.cpp @@ -1141,8 +1141,8 @@ already_AddRefed<ScriptLoadRequest> ScriptLoader::CreateLoadRequest( MOZ_ASSERT(aKind == ScriptKind::eClassic || aKind == ScriptKind::eImportMap); - RefPtr<ScriptLoadRequest> request = new ScriptLoadRequest( - aKind, aURI, fetchOptions, aIntegrity, referrer, context); + RefPtr<ScriptLoadRequest> request = + new ScriptLoadRequest(aKind, aURI, aIntegrity, referrer, context); TryUseCache(aReferrerPolicy, fetchOptions, request, aElement, aNonce, aRequestType); @@ -1176,7 +1176,12 @@ void ScriptLoader::TryUseCache(ReferrerPolicy aReferrerPolicy, return; } - ScriptHashKey key(this, aRequest, aRequest->mFetchOptions, aRequest->mURI); + // NOTE: Some ScriptLoadRequest fields aren't yet accessible until + // either NoCacheEntryFound or CacheEntryFound is called, + // which constructs LoadedScript. + // aRequest->FetchOptions() is backed by LoadedScript, and we cannot + // use it here. + ScriptHashKey key(this, aRequest, aFetchOptions, aRequest->mURI); auto cacheResult = mCache->Lookup(*this, key, /* aSyncLoad = */ true); if (cacheResult.mState != CachedSubResourceState::Complete) { aRequest->NoCacheEntryFound(aReferrerPolicy, aFetchOptions); @@ -1191,8 +1196,7 @@ void ScriptLoader::TryUseCache(ReferrerPolicy aReferrerPolicy, if (aRequestType == ScriptLoadRequestType::External) { // NOTE: The preload case checks the same after the // LookupPreloadRequest call. - if (NS_FAILED(CheckContentPolicy(aElement, aNonce, aRequest, - aRequest->mFetchOptions, + if (NS_FAILED(CheckContentPolicy(aElement, aNonce, aRequest, aFetchOptions, aRequest->mURI))) { aRequest->NoCacheEntryFound(aReferrerPolicy, aFetchOptions); LOG( @@ -1237,8 +1241,8 @@ void ScriptLoader::EmulateNetworkEvents(ScriptLoadRequest* aRequest) { } NotifyObserversForCachedScript( - aRequest->mURI, context, aRequest->mFetchOptions->mTriggeringPrincipal, - CORSModeToSecurityFlags(aRequest->mFetchOptions->mCORSMode), + aRequest->mURI, context, aRequest->FetchOptions()->mTriggeringPrincipal, + CORSModeToSecurityFlags(aRequest->FetchOptions()->mCORSMode), nsIContentPolicy::TYPE_INTERNAL_SCRIPT, aRequest->mNetworkMetadata); { @@ -1358,7 +1362,7 @@ bool ScriptLoader::ProcessExternalScript(nsIScriptElement* aElement, LookupPreloadRequest(aElement, aScriptKind, sriMetadata); if (request) { if (NS_FAILED(CheckContentPolicy(aElement, nonce, request, - request->mFetchOptions, request->mURI))) { + request->FetchOptions(), request->mURI))) { LOG(("ScriptLoader (%p): content policy check failed for preload", this)); // Probably plans have changed; even though the preload was allowed seems @@ -3386,8 +3390,6 @@ nsresult ScriptLoader::EvaluateScript(nsIGlobalObject* aGlobalObject, // Create a ClassicScript object and associate it with the JSScript. MOZ_ASSERT(aRequest->mLoadedScript->IsClassicScript()); - MOZ_ASSERT(aRequest->mLoadedScript->GetFetchOptions()->IsCompatible( - aRequest->mFetchOptions)); #ifdef DEBUG { diff --git a/dom/script/SharedScriptCache.cpp b/dom/script/SharedScriptCache.cpp @@ -44,7 +44,7 @@ ScriptHashKey::ScriptHashKey( ScriptHashKey::ScriptHashKey(ScriptLoader* aLoader, const JS::loader::ScriptLoadRequest* aRequest, const JS::loader::LoadedScript* aLoadedScript) - : ScriptHashKey(aLoader, aRequest, aRequest->mFetchOptions, + : ScriptHashKey(aLoader, aRequest, aLoadedScript->GetFetchOptions(), aRequest->mURI) {} ScriptHashKey::ScriptHashKey(const ScriptLoadData& aLoadData) diff --git a/dom/workers/ScriptLoader.cpp b/dom/workers/ScriptLoader.cpp @@ -699,8 +699,7 @@ already_AddRefed<ScriptLoadRequest> WorkerScriptLoader::CreateScriptLoadRequest( // Bug 1817259 - For now the debugger scripts are always loaded a Classic. if (mWorkerRef->Private()->WorkerType() == WorkerType::Classic || IsDebuggerScript()) { - request = new ScriptLoadRequest(ScriptKind::eClassic, uri, fetchOptions, - SRIMetadata(), + request = new ScriptLoadRequest(ScriptKind::eClassic, uri, SRIMetadata(), nullptr, // mReferrer loadContext); } else { @@ -729,8 +728,8 @@ already_AddRefed<ScriptLoadRequest> WorkerScriptLoader::CreateScriptLoadRequest( // Part of Step 2. This sets the Top-level flag to true request = new ModuleLoadRequest( - uri, JS::ModuleType::JavaScript, fetchOptions, SRIMetadata(), referrer, - loadContext, ModuleLoadRequest::Kind::TopLevel, moduleLoader, nullptr); + uri, JS::ModuleType::JavaScript, SRIMetadata(), referrer, loadContext, + ModuleLoadRequest::Kind::TopLevel, moduleLoader, nullptr); } // Set the mURL, it will be used for error handling and debugging. @@ -1261,8 +1260,6 @@ bool WorkerScriptLoader::EvaluateScript(JSContext* aCx, requestBaseURI = aRequest->mBaseURL; } MOZ_ASSERT(aRequest->mLoadedScript->IsClassicScript()); - MOZ_ASSERT(aRequest->mLoadedScript->GetFetchOptions() == - aRequest->mFetchOptions); aRequest->mLoadedScript->SetBaseURL(requestBaseURI); classicScript = aRequest->mLoadedScript->AsClassicScript(); } diff --git a/dom/workers/loader/WorkerModuleLoader.cpp b/dom/workers/loader/WorkerModuleLoader.cpp @@ -96,9 +96,8 @@ already_AddRefed<ModuleLoadRequest> WorkerModuleLoader::CreateRequest( } JS::ModuleType moduleType = JS::GetModuleRequestType(aCx, aModuleRequest); - RefPtr<ModuleLoadRequest> request = - new ModuleLoadRequest(aURI, moduleType, aOptions, SRIMetadata(), aBaseURL, - loadContext, kind, this, root); + RefPtr<ModuleLoadRequest> request = new ModuleLoadRequest( + aURI, moduleType, SRIMetadata(), aBaseURL, loadContext, kind, this, root); request->mURL = request->mURI->GetSpecOrDefault(); request->NoCacheEntryFound(aReferrerPolicy, aOptions); diff --git a/dom/worklet/WorkletFetchHandler.cpp b/dom/worklet/WorkletFetchHandler.cpp @@ -114,8 +114,8 @@ NS_IMETHODIMP StartModuleLoadRunnable::RunOnWorkletThread() { // Part of Step 2. This sets the Top-level flag to true RefPtr<ModuleLoadRequest> request = new ModuleLoadRequest( - mURI, JS::ModuleType::JavaScript, fetchOptions, SRIMetadata(), mReferrer, - loadContext, ModuleLoadRequest::Kind::TopLevel, moduleLoader, nullptr); + mURI, JS::ModuleType::JavaScript, SRIMetadata(), mReferrer, loadContext, + ModuleLoadRequest::Kind::TopLevel, moduleLoader, nullptr); request->mURL = request->mURI->GetSpecOrDefault(); request->NoCacheEntryFound(ReferrerPolicy::_empty, fetchOptions); diff --git a/dom/worklet/loader/WorkletModuleLoader.cpp b/dom/worklet/loader/WorkletModuleLoader.cpp @@ -79,7 +79,7 @@ already_AddRefed<ModuleLoadRequest> WorkletModuleLoader::CreateRequest( context->GetHandlerRef(); RefPtr<WorkletLoadContext> loadContext = new WorkletLoadContext(handlerRef); RefPtr<ModuleLoadRequest> request = new ModuleLoadRequest( - aURI, moduleType, aOptions, SRIMetadata(), aBaseURL, loadContext, + aURI, moduleType, SRIMetadata(), aBaseURL, loadContext, ModuleLoadRequest::Kind::StaticImport, this, root); request->mURL = request->mURI->GetSpecOrDefault(); diff --git a/js/loader/LoadedScript.h b/js/loader/LoadedScript.h @@ -371,6 +371,10 @@ class LoadedScriptDelegate { GetLoadedScript()->AsModuleScript()->UpdateReferrerPolicy(aReferrerPolicy); } + ScriptFetchOptions* FetchOptions() const { + return GetLoadedScript()->GetFetchOptions(); + } + bool IsUnknownDataType() const { return GetLoadedScript()->IsUnknownDataType(); } diff --git a/js/loader/ModuleLoadRequest.cpp b/js/loader/ModuleLoadRequest.cpp @@ -45,12 +45,12 @@ NS_IMPL_CYCLE_COLLECTION_TRACE_BEGIN_INHERITED(ModuleLoadRequest, NS_IMPL_CYCLE_COLLECTION_TRACE_END ModuleLoadRequest::ModuleLoadRequest( - nsIURI* aURI, ModuleType aModuleType, ScriptFetchOptions* aFetchOptions, + nsIURI* aURI, ModuleType aModuleType, const mozilla::dom::SRIMetadata& aIntegrity, nsIURI* aReferrer, LoadContextBase* aContext, Kind aKind, ModuleLoaderBase* aLoader, ModuleLoadRequest* aRootModule) - : ScriptLoadRequest(ScriptKind::eModule, aURI, aFetchOptions, aIntegrity, - aReferrer, aContext), + : ScriptLoadRequest(ScriptKind::eModule, aURI, aIntegrity, aReferrer, + aContext), mKind(aKind), mModuleType(aModuleType), mErroredLoadingImports(false), diff --git a/js/loader/ModuleLoadRequest.h b/js/loader/ModuleLoadRequest.h @@ -51,7 +51,6 @@ class ModuleLoadRequest final : public ScriptLoadRequest { }; ModuleLoadRequest(nsIURI* aURI, ModuleType aModuleType, - ScriptFetchOptions* aFetchOptions, const SRIMetadata& aIntegrity, nsIURI* aReferrer, LoadContextBase* aContext, Kind aKind, ModuleLoaderBase* aLoader, ModuleLoadRequest* aRootModule); diff --git a/js/loader/ModuleLoaderBase.cpp b/js/loader/ModuleLoaderBase.cpp @@ -1002,8 +1002,6 @@ nsresult ModuleLoaderBase::CreateModuleScript(ModuleLoadRequest* aRequest) { } MOZ_ASSERT(aRequest->mLoadedScript->IsModuleScript()); - MOZ_ASSERT(aRequest->mFetchOptions->IsCompatible( - aRequest->mLoadedScript->GetFetchOptions())); #ifdef DEBUG { bool equals = false; diff --git a/js/loader/ScriptLoadRequest.cpp b/js/loader/ScriptLoadRequest.cpp @@ -80,14 +80,12 @@ NS_IMPL_CYCLE_COLLECTING_RELEASE(ScriptLoadRequest) // // NOTE: nsIURI and nsIPrincipal doesn't have to be touched here because // they cannot be a part of cycle. -NS_IMPL_CYCLE_COLLECTION(ScriptLoadRequest, mFetchOptions, mLoadedScript, - mLoadContext) +NS_IMPL_CYCLE_COLLECTION(ScriptLoadRequest, mLoadedScript, mLoadContext) NS_IMPL_CYCLE_COLLECTION_TRACE_BEGIN(ScriptLoadRequest) NS_IMPL_CYCLE_COLLECTION_TRACE_END ScriptLoadRequest::ScriptLoadRequest(ScriptKind aKind, nsIURI* aURI, - ScriptFetchOptions* aFetchOptions, const SRIMetadata& aIntegrity, nsIURI* aReferrer, LoadContextBase* aContext) @@ -95,13 +93,11 @@ ScriptLoadRequest::ScriptLoadRequest(ScriptKind aKind, nsIURI* aURI, mState(State::CheckingCache), mFetchSourceOnly(false), mHasSourceMapURL_(false), - mFetchOptions(aFetchOptions), mIntegrity(aIntegrity), mReferrer(aReferrer), mURI(aURI), mLoadContext(aContext), mEarlyHintPreloaderId(0) { - MOZ_ASSERT(mFetchOptions); if (mLoadContext) { mLoadContext->SetRequest(this); } @@ -228,16 +224,15 @@ void ScriptLoadRequest::NoCacheEntryFound( // 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); + mLoadedScript = new ClassicScript(aReferrerPolicy, aFetchOptions, mURI); break; case ScriptKind::eImportMap: - mLoadedScript = new ImportMapScript(aReferrerPolicy, mFetchOptions, mURI); + mLoadedScript = new ImportMapScript(aReferrerPolicy, aFetchOptions, mURI); break; case ScriptKind::eModule: - mLoadedScript = new ModuleScript(aReferrerPolicy, mFetchOptions, mURI); + mLoadedScript = new ModuleScript(aReferrerPolicy, aFetchOptions, mURI); break; case ScriptKind::eEvent: MOZ_ASSERT_UNREACHABLE("EventScripts are not using ScriptLoadRequest"); diff --git a/js/loader/ScriptLoadRequest.h b/js/loader/ScriptLoadRequest.h @@ -92,7 +92,6 @@ class ScriptLoadRequest : public nsISupports, public: using SRIMetadata = mozilla::dom::SRIMetadata; ScriptLoadRequest(ScriptKind aKind, nsIURI* aURI, - ScriptFetchOptions* aFetchOptions, const SRIMetadata& aIntegrity, nsIURI* aReferrer, LoadContextBase* aContext); @@ -152,17 +151,17 @@ class ScriptLoadRequest : public nsISupports, } mozilla::dom::RequestPriority FetchPriority() const { - return mFetchOptions->mFetchPriority; + return FetchOptions()->mFetchPriority; } enum ParserMetadata ParserMetadata() const { - return mFetchOptions->mParserMetadata; + return FetchOptions()->mParserMetadata; } - const nsString& Nonce() const { return mFetchOptions->mNonce; } + const nsString& Nonce() const { return FetchOptions()->mNonce; } nsIPrincipal* TriggeringPrincipal() const { - return mFetchOptions->mTriggeringPrincipal; + return FetchOptions()->mTriggeringPrincipal; } // Convert a CheckingCache ScriptLoadRequest into a Ready one, by populating @@ -215,7 +214,7 @@ class ScriptLoadRequest : public nsISupports, } public: - mozilla::CORSMode CORSMode() const { return mFetchOptions->mCORSMode; } + mozilla::CORSMode CORSMode() const { return FetchOptions()->mCORSMode; } bool HasLoadContext() const { return mLoadContext; } bool HasScriptLoadContext() const; @@ -267,7 +266,6 @@ class ScriptLoadRequest : public nsISupports, CacheExpirationTime mExpirationTime = CacheExpirationTime::Never(); - RefPtr<ScriptFetchOptions> mFetchOptions; RefPtr<mozilla::SubResourceNetworkMetadataHolder> mNetworkMetadata; const SRIMetadata mIntegrity; const nsCOMPtr<nsIURI> mReferrer; diff --git a/js/xpconnect/loader/SyncModuleLoader.cpp b/js/xpconnect/loader/SyncModuleLoader.cpp @@ -81,8 +81,8 @@ already_AddRefed<ModuleLoadRequest> SyncModuleLoader::CreateRequest( } RefPtr<ModuleLoadRequest> request = - new ModuleLoadRequest(aURI, moduleType, aOptions, dom::SRIMetadata(), - aBaseURL, context, kind, this, root); + new ModuleLoadRequest(aURI, moduleType, dom::SRIMetadata(), aBaseURL, + context, kind, this, root); request->NoCacheEntryFound(aReferrerPolicy, aOptions); return request.forget(); } diff --git a/js/xpconnect/loader/mozJSModuleLoader.cpp b/js/xpconnect/loader/mozJSModuleLoader.cpp @@ -1085,7 +1085,7 @@ nsresult mozJSModuleLoader::ImportESModule( RefPtr<SyncLoadContext> context = new SyncLoadContext(); RefPtr<ModuleLoadRequest> request = new ModuleLoadRequest( - uri, JS::ModuleType::JavaScript, options, dom::SRIMetadata(), + uri, JS::ModuleType::JavaScript, dom::SRIMetadata(), /* aReferrer = */ nullptr, context, ModuleLoadRequest::Kind::TopLevel, mModuleLoader, nullptr);