Issue #618 - Fix processing of non-parser-generated module scripts.

This commit is contained in:
Jon Coppeard 2020-08-22 18:35:57 +00:00 • committed by Roy Tam
commit d7889e2d2a

View file

@ -856,6 +856,23 @@ ScriptLoader::CheckModuleDependenciesLoaded(ModuleLoadRequest* aRequest)
} }
} }
class ScriptRequestProcessor : public Runnable
{
private:
RefPtr<ScriptLoader> mLoader;
RefPtr<ScriptLoadRequest> mRequest;
public:
ScriptRequestProcessor(ScriptLoader* aLoader,
ScriptLoadRequest* aRequest)
: mLoader(aLoader)
, mRequest(aRequest)
{}
NS_IMETHOD Run() override
{
return mLoader->ProcessRequest(mRequest);
}
};
void void
ScriptLoader::ProcessLoadedModuleTree(ModuleLoadRequest* aRequest) ScriptLoader::ProcessLoadedModuleTree(ModuleLoadRequest* aRequest)
{ {
@ -866,8 +883,17 @@ ScriptLoader::ProcessLoadedModuleTree(ModuleLoadRequest* aRequest)
aRequest->mModuleScript = nullptr; aRequest->mModuleScript = nullptr;
} }
} }
MaybeMoveToLoadedList(aRequest);
ProcessPendingRequests(); if (aRequest->mIsInline &&
aRequest->mElement->GetParserCreated() == NOT_FROM_PARSER)
{
MOZ_ASSERT(!aRequest->isInList());
nsContentUtils::AddScriptRunner(
new ScriptRequestProcessor(this, aRequest));
} else {
MaybeMoveToLoadedList(aRequest);
ProcessPendingRequests();
}
} }
if (aRequest->mWasCompiledOMT) { if (aRequest->mWasCompiledOMT) {
@ -1093,23 +1119,6 @@ ScriptLoader::PreloadURIComparator::Equals(const PreloadInfo &aPi,
same; same;
} }
class ScriptRequestProcessor : public Runnable
{
private:
RefPtr<ScriptLoader> mLoader;
RefPtr<ScriptLoadRequest> mRequest;
public:
ScriptRequestProcessor(ScriptLoader* aLoader,
ScriptLoadRequest* aRequest)
: mLoader(aLoader)
, mRequest(aRequest)
{}
NS_IMETHOD Run() override
{
return mLoader->ProcessRequest(mRequest);
}
};
static inline bool static inline bool
ParseTypeAttribute(const nsAString& aType, JSVersion* aVersion) ParseTypeAttribute(const nsAString& aType, JSVersion* aVersion)
{ {