tor-browser

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

commit 9a22a74f5ee691e94faa4b8dc03e4fd92bfee4c3
parent 9a48b65e12256d0428b8f8aeab736dfa5985691f
Author: Tooru Fujisawa <arai_a@mac.com>
Date:   Wed, 22 Oct 2025 01:30:12 +0000

Bug 1991734 - Part 1: Immediately report the load error for importScripts. r=dom-worker-reviewers,edenchuang

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

Diffstat:
Mdom/workers/ScriptLoader.cpp | 36+++++++++++++++++++++++++-----------
Mdom/workers/ScriptLoader.h | 2+-
2 files changed, 26 insertions(+), 12 deletions(-)

diff --git a/dom/workers/ScriptLoader.cpp b/dom/workers/ScriptLoader.cpp @@ -563,9 +563,12 @@ bool WorkerScriptLoader::CreateScriptRequests( return false; } for (const nsString& scriptURL : aScriptURLs) { - RefPtr<ScriptLoadRequest> request = - CreateScriptLoadRequest(scriptURL, aDocumentEncoding, aIsMainScript); + nsresult rv = NS_OK; + RefPtr<ScriptLoadRequest> request = CreateScriptLoadRequest( + scriptURL, aDocumentEncoding, aIsMainScript, &rv); if (!request) { + mLoadingRequests.CancelRequestsAndClear(); + workerinternals::ReportLoadError(mRv, rv, scriptURL); return false; } mLoadingRequests.AppendElement(request); @@ -621,7 +624,7 @@ nsContentPolicyType WorkerScriptLoader::GetContentPolicyType( already_AddRefed<ScriptLoadRequest> WorkerScriptLoader::CreateScriptLoadRequest( const nsString& aScriptURL, const mozilla::Encoding* aDocumentEncoding, - bool aIsMainScript) { + bool aIsMainScript, nsresult* aRv) { mWorkerRef->Private()->AssertIsOnWorkerThread(); WorkerLoadContext::Kind kind = WorkerLoadContext::GetKind(aIsMainScript, IsDebuggerScript()); @@ -654,14 +657,29 @@ already_AddRefed<ScriptLoadRequest> WorkerScriptLoader::CreateScriptLoadRequest( aIsMainScript && !mWorkerRef->Private()->GetParent()); nsCOMPtr<nsIURI> baseURI = aIsMainScript ? GetInitialBaseURI() : GetBaseURI(); nsCOMPtr<nsIURI> uri; - bool setErrorResult = false; nsresult rv = ConstructURI(aScriptURL, baseURI, aDocumentEncoding, getter_AddRefs(uri)); // If we failed to construct the URI, handle it in the LoadContext so it is // thrown in the right order. if (NS_WARN_IF(NS_FAILED(rv))) { - setErrorResult = true; - loadContext->mLoadResult = rv; + // This function is used by the following: + // * Worker constructor + // * WorkerGlobalScope.importScripts + // * WorkerDebuggerGlobalScope.loadSubScript + // + // Worker constructor validates the URL in WorkerPrivate::Constructor, + // and this branch shouldn't taken. + // + // importScripts is available only to classic scripts. + // + // loadSubScript is available only to privileged scripts, and we don't + // care any invalid URLs. + // + // Module imports should use WorkerModuleLoader instead. + MOZ_ASSERT(mWorkerRef->Private()->WorkerType() == WorkerType::Classic); + + *aRv = rv; + return nullptr; } // https://html.spec.whatwg.org/multipage/webappapis.html#fetch-a-classic-worker-script @@ -719,11 +737,7 @@ already_AddRefed<ScriptLoadRequest> WorkerScriptLoader::CreateScriptLoadRequest( // Set the mURL, it will be used for error handling and debugging. request->mURL = NS_ConvertUTF16toUTF8(aScriptURL); - if (setErrorResult) { - request->SetPendingFetchingError(); - } else { - request->NoCacheEntryFound(); - } + request->NoCacheEntryFound(); return request.forget(); } diff --git a/dom/workers/ScriptLoader.h b/dom/workers/ScriptLoader.h @@ -202,7 +202,7 @@ class WorkerScriptLoader : public JS::loader::ScriptLoaderInterface, already_AddRefed<ScriptLoadRequest> CreateScriptLoadRequest( const nsString& aScriptURL, const mozilla::Encoding* aDocumentEncoding, - bool aIsMainScript); + bool aIsMainScript, nsresult* aRv); bool DispatchLoadScript(ScriptLoadRequest* aRequest);