Bug 1761938 - Part 5: Use module loader's global where possible and remove GetGlobalForRequest from script loader interface r=yulia

Differential Revision: https://phabricator.services.mozilla.com/D142832
This commit is contained in:
Jon Coppeard 2022-04-11 15:35:30 +00:00
parent d4aae71cf3
commit 3b308851b4
5 changed files with 10 additions and 40 deletions

View File

@ -2064,8 +2064,7 @@ nsresult ScriptLoader::EvaluateScriptElement(ScriptLoadRequest* aRequest) {
nsCOMPtr<nsIGlobalObject> globalObject;
nsCOMPtr<nsIScriptContext> context;
if (aRequest->GetLoadContext()->GetWebExtGlobal()) {
// Executing a module from a WebExtension content-script.
globalObject = aRequest->GetLoadContext()->GetWebExtGlobal();
MOZ_ASSERT(aRequest->IsModuleRequest());
} else {
// Otherwise we have to ensure that there is a nsIScriptContext.
nsCOMPtr<nsIScriptGlobalObject> scriptGlobal =
@ -2100,8 +2099,9 @@ nsresult ScriptLoader::EvaluateScriptElement(ScriptLoadRequest* aRequest) {
}
if (aRequest->IsModuleRequest()) {
return aRequest->AsModuleRequest()->EvaluateModule(globalObject);
return aRequest->AsModuleRequest()->EvaluateModule();
}
return EvaluateScript(globalObject, aRequest);
}

View File

@ -626,7 +626,7 @@ class ScriptLoader final : public JS::loader::ScriptLoaderInterface {
void GiveUpBytecodeEncoding();
already_AddRefed<nsIGlobalObject> GetGlobalForRequest(
ScriptLoadRequest* aRequest) override;
ScriptLoadRequest* aRequest);
// This is a marker class to ensure proper handling of requests with a
// WebExtGlobal.

View File

@ -106,9 +106,7 @@ class ModuleLoadRequest final : public ScriptLoadRequest {
return mLoader->ProcessFetchedModuleSource(this);
}
bool InstantiateModuleTree() { return mLoader->InstantiateModuleTree(this); }
nsresult EvaluateModule(nsIGlobalObject* aGlobalObject) {
return mLoader->EvaluateModule(aGlobalObject, this);
}
nsresult EvaluateModule() { return mLoader->EvaluateModule(this); }
void StartDynamicImport() { mLoader->StartDynamicImport(this); }
void ProcessDynamicImport() { mLoader->ProcessDynamicImport(this); }

View File

@ -457,16 +457,8 @@ nsresult ModuleLoaderBase::CreateModuleScript(ModuleLoadRequest* aRequest) {
LOG(("ScriptLoadRequest (%p): Create module script", aRequest));
nsCOMPtr<nsIGlobalObject> globalObject =
mLoader->GetGlobalForRequest(aRequest);
if (!globalObject) {
return NS_ERROR_FAILURE;
}
MOZ_ASSERT(globalObject == mGlobalObject);
AutoJSAPI jsapi;
if (!jsapi.Init(globalObject)) {
if (!jsapi.Init(mGlobalObject)) {
return NS_ERROR_FAILURE;
}
@ -481,7 +473,7 @@ nsresult ModuleLoaderBase::CreateModuleScript(ModuleLoadRequest* aRequest) {
&introductionScript);
if (NS_SUCCEEDED(rv)) {
JS::Rooted<JSObject*> global(cx, globalObject->GetGlobalJSObject());
JS::Rooted<JSObject*> global(cx, mGlobalObject->GetGlobalJSObject());
rv = CompileOrFinishModuleScript(cx, global, options, aRequest, &module);
}
@ -997,15 +989,13 @@ void ModuleLoaderBase::ProcessDynamicImport(ModuleLoadRequest* aRequest) {
}
}
nsresult ModuleLoaderBase::EvaluateModule(nsIGlobalObject* aGlobalObject,
ModuleLoadRequest* aRequest) {
nsresult ModuleLoaderBase::EvaluateModule(ModuleLoadRequest* aRequest) {
MOZ_ASSERT(aRequest->mLoader == this);
MOZ_ASSERT(aGlobalObject == mGlobalObject);
AUTO_PROFILER_LABEL("ModuleLoaderBase::EvaluateModule", JS);
mozilla::nsAutoMicroTask mt;
mozilla::dom::AutoEntryScript aes(aGlobalObject, "EvaluateModule", true);
mozilla::dom::AutoEntryScript aes(mGlobalObject, "EvaluateModule", true);
JSContext* cx = aes.cx();
nsAutoCString profilerLabelString;
@ -1094,16 +1084,6 @@ nsresult ModuleLoaderBase::EvaluateModule(nsIGlobalObject* aGlobalObject,
return rv;
}
nsresult ModuleLoaderBase::EvaluateModule(ModuleLoadRequest* aRequest) {
nsCOMPtr<nsIGlobalObject> globalObject =
mLoader->GetGlobalForRequest(aRequest);
if (!globalObject) {
return NS_ERROR_FAILURE;
}
return EvaluateModule(globalObject, aRequest);
}
void ModuleLoaderBase::CancelAndClearDynamicImports() {
for (ScriptLoadRequest* req = mDynamicImportRequests.getFirst(); req;
req = req->getNext()) {

View File

@ -57,10 +57,6 @@ class ScriptLoaderInterface : public nsISupports {
// In some environments, we will need to default to a base URI
virtual nsIURI* GetBaseURI() const = 0;
// Get the global for the associated request.
virtual already_AddRefed<nsIGlobalObject> GetGlobalForRequest(
ScriptLoadRequest* aRequest) = 0;
virtual void ReportErrorToConsole(ScriptLoadRequest* aRequest,
nsresult aResult) const = 0;
@ -166,8 +162,7 @@ class ModuleLoaderBase : public nsISupports {
bool InstantiateModuleTree(ModuleLoadRequest* aRequest);
// Implements https://html.spec.whatwg.org/#run-a-module-script
nsresult EvaluateModule(nsIGlobalObject* aGlobalObject,
ModuleLoadRequest* aRequest);
nsresult EvaluateModule(ModuleLoadRequest* aRequest);
void StartDynamicImport(ModuleLoadRequest* aRequest);
void ProcessDynamicImport(ModuleLoadRequest* aRequest);
@ -219,9 +214,6 @@ class ModuleLoaderBase : public nsISupports {
ModuleScript* GetFetchedModule(nsIURI* aURL) const;
// Helper function to set up the global correctly for dynamic imports.
nsresult EvaluateModule(ModuleLoadRequest* aRequest);
JS::Value FindFirstParseError(ModuleLoadRequest* aRequest);
static nsresult InitDebuggerDataForModuleTree(JSContext* aCx,
ModuleLoadRequest* aRequest);