tor-browser

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

commit 444f24047fd42b5c066d1be42b10c0cde3a47164
parent 3d14ba282465a04561840b2c494ffd446a238d59
Author: Yoshi Cheng-Hao Huang <allstars.chh@gmail.com>
Date:   Thu, 23 Oct 2025 08:47:59 +0000

Bug 1968885 - Part 2: Remove ResolveRequestedModules. r=jonco

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

Diffstat:
Mjs/loader/ModuleLoaderBase.cpp | 83-------------------------------------------------------------------------------
Mjs/loader/ModuleLoaderBase.h | 4----
Mjs/public/Modules.h | 21---------------------
Mjs/src/vm/Modules.cpp | 51---------------------------------------------------
4 files changed, 0 insertions(+), 159 deletions(-)

diff --git a/js/loader/ModuleLoaderBase.cpp b/js/loader/ModuleLoaderBase.cpp @@ -1031,19 +1031,6 @@ nsresult ModuleLoaderBase::CreateModuleScript(ModuleLoadRequest* aRequest) { } moduleScript->SetModuleRecord(module); - - // TODO: Bug 1968885: Remove ModuleLoaderBase::ResolveRequestedModules - // - // Validate requested modules and treat failure to resolve module specifiers - // the same as a parse error. - rv = ResolveRequestedModules(aRequest, nullptr); - if (NS_FAILED(rv)) { - if (!aRequest->IsErrored()) { - aRequest->mModuleScript = nullptr; - return rv; - } - return NS_OK; - } } LOG(("ScriptLoadRequest (%p): module script == %p", aRequest, @@ -1112,76 +1099,6 @@ ResolveResult ModuleLoaderBase::ResolveModuleSpecifier( aSpecifier); } -nsresult ModuleLoaderBase::ResolveRequestedModules( - ModuleLoadRequest* aRequest, nsTArray<ModuleMapKey>* aRequestedModulesOut) { - MOZ_ASSERT_IF(aRequestedModulesOut, aRequestedModulesOut->IsEmpty()); - - ModuleScript* ms = aRequest->mModuleScript; - - AutoJSAPI jsapi; - if (!jsapi.Init(mGlobalObject)) { - return NS_ERROR_FAILURE; - } - - JSContext* cx = jsapi.cx(); - Rooted<JSObject*> moduleRecord(cx, ms->ModuleRecord()); - - if (!IsCyclicModule(moduleRecord)) { - return NS_OK; - } - - uint32_t length = GetRequestedModulesCount(cx, moduleRecord); - - for (uint32_t i = 0; i < length; i++) { - Rooted<JSString*> str(cx, GetRequestedModuleSpecifier(cx, moduleRecord, i)); - if (!str) { - Rooted<Value> pendingException(cx); - if (!JS_GetPendingException(cx, &pendingException)) { - return NS_ERROR_FAILURE; - } - ms->SetParseError(pendingException); - JS_ClearPendingException(cx); - return NS_ERROR_FAILURE; - } - - nsAutoJSString specifier; - if (!specifier.init(cx, str)) { - return NS_ERROR_FAILURE; - } - - // Let url be the result of resolving a module specifier given module script - // and requested. - ModuleLoaderBase* loader = aRequest->mLoader; - auto result = loader->ResolveModuleSpecifier(ms, specifier); - if (result.isErr()) { - uint32_t lineNumber = 0; - ColumnNumberOneOrigin columnNumber; - GetRequestedModuleSourcePos(cx, moduleRecord, i, &lineNumber, - &columnNumber); - - Rooted<Value> error(cx); - nsresult rv = - loader->HandleResolveFailure(cx, ms, specifier, result.unwrapErr(), - lineNumber, columnNumber, &error); - NS_ENSURE_SUCCESS(rv, rv); - - ms->SetParseError(error); - return NS_ERROR_FAILURE; - } - - nsCOMPtr<nsIURI> uri = result.unwrap(); - if (aRequestedModulesOut) { - // Let moduleType be the result of running the module type from module - // request steps given moduleRequest. - ModuleType moduleType = GetRequestedModuleType(cx, moduleRecord, i); - - aRequestedModulesOut->AppendElement(ModuleMapKey(uri, moduleType)); - } - } - - return NS_OK; -} - void ModuleLoaderBase::StartFetchingModuleDependencies( ModuleLoadRequest* aRequest) { if (aRequest->IsCanceled()) { diff --git a/js/loader/ModuleLoaderBase.h b/js/loader/ModuleLoaderBase.h @@ -525,10 +525,6 @@ class ModuleLoaderBase : public nsISupports { private: ModuleScript* GetFetchedModule(const ModuleMapKey& moduleMapKey) const; - nsresult ResolveRequestedModules( - ModuleLoadRequest* aRequest, - nsTArray<ModuleMapKey>* aRequestedModulesOut); - already_AddRefed<LoadingRequest> SetModuleFetchFinishedAndGetWaitingRequests( ModuleLoadRequest* aRequest, nsresult aResult); void ResumeWaitingRequests(LoadingRequest* aLoadingRequest, bool aSuccess); diff --git a/js/public/Modules.h b/js/public/Modules.h @@ -277,27 +277,6 @@ extern JS_PUBLIC_API bool ThrowOnModuleEvaluationFailure( ModuleErrorBehaviour errorBehaviour = ReportModuleErrorsAsync); /* - * Functions to access the module specifiers of a source text module record used - * to request module imports. - * - * Clients can use GetRequestedModulesCount() to get the number of specifiers - * and GetRequestedModuleSpecifier() / GetRequestedModuleSourcePos() to get the - * individual elements. - */ -extern JS_PUBLIC_API uint32_t -GetRequestedModulesCount(JSContext* cx, Handle<JSObject*> moduleRecord); - -extern JS_PUBLIC_API JSString* GetRequestedModuleSpecifier( - JSContext* cx, Handle<JSObject*> moduleRecord, uint32_t index); - -/* - * Get the position of a requested module's name in the source. - */ -extern JS_PUBLIC_API void GetRequestedModuleSourcePos( - JSContext* cx, Handle<JSObject*> moduleRecord, uint32_t index, - uint32_t* lineNumber, JS::ColumnNumberOneOrigin* columnNumber); - -/* * Get the module type of a requested module. */ extern JS_PUBLIC_API ModuleType GetRequestedModuleType( diff --git a/js/src/vm/Modules.cpp b/js/src/vm/Modules.cpp @@ -403,57 +403,6 @@ JS_PUBLIC_API bool JS::ThrowOnModuleEvaluationFailure( return OnModuleEvaluationFailure(cx, evaluationPromise, errorBehaviour); } -JS_PUBLIC_API uint32_t -JS::GetRequestedModulesCount(JSContext* cx, Handle<JSObject*> moduleRecord) { - AssertHeapIsIdle(); - CHECK_THREAD(cx); - cx->check(moduleRecord); - - return moduleRecord->as<ModuleObject>().requestedModules().Length(); -} - -JS_PUBLIC_API JSString* JS::GetRequestedModuleSpecifier( - JSContext* cx, Handle<JSObject*> moduleRecord, uint32_t index) { - AssertHeapIsIdle(); - CHECK_THREAD(cx); - cx->check(moduleRecord); - - auto* moduleRequest = moduleRecord->as<ModuleObject>() - .requestedModules()[index] - .moduleRequest(); - - // This implements step 7.1.1 in HostLoadImportedModule. - // https://html.spec.whatwg.org/multipage/webappapis.html#hostloadimportedmodule - // - // If moduleRequest.[[Attributes]] contains a Record entry such that - // entry.[[Key]] is not "type", - if (moduleRequest->hasFirstUnsupportedAttributeKey()) { - UniqueChars printableKey = AtomToPrintableString( - cx, moduleRequest->getFirstUnsupportedAttributeKey()); - JS_ReportErrorNumberASCII( - cx, GetErrorMessage, nullptr, - JSMSG_IMPORT_ATTRIBUTES_STATIC_IMPORT_UNSUPPORTED_ATTRIBUTE, - printableKey ? printableKey.get() : ""); - return nullptr; - } - - return moduleRequest->specifier(); -} - -JS_PUBLIC_API void JS::GetRequestedModuleSourcePos( - JSContext* cx, Handle<JSObject*> moduleRecord, uint32_t index, - uint32_t* lineNumber, JS::ColumnNumberOneOrigin* columnNumber) { - AssertHeapIsIdle(); - CHECK_THREAD(cx); - cx->check(moduleRecord); - MOZ_ASSERT(lineNumber); - MOZ_ASSERT(columnNumber); - - auto& module = moduleRecord->as<ModuleObject>(); - *lineNumber = module.requestedModules()[index].lineNumber(); - *columnNumber = module.requestedModules()[index].columnNumber(); -} - JS_PUBLIC_API JS::ModuleType JS::GetRequestedModuleType( JSContext* cx, Handle<JSObject*> moduleRecord, uint32_t index) { AssertHeapIsIdle();