1
0
mirror of https://github.com/roytam1/UXP.git synced 2026-05-27 07:39:55 +00:00

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
parent 93d4766c01
commit d7889e2d2a
+32 -23
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
ScriptLoader::ProcessLoadedModuleTree(ModuleLoadRequest* aRequest)
{
@@ -866,8 +883,17 @@ ScriptLoader::ProcessLoadedModuleTree(ModuleLoadRequest* aRequest)
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) {
@@ -1093,23 +1119,6 @@ ScriptLoader::PreloadURIComparator::Equals(const PreloadInfo &aPi,
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
ParseTypeAttribute(const nsAString& aType, JSVersion* aVersion)
{
@@ -2325,10 +2334,10 @@ ScriptLoader::HandleLoadError(ScriptLoadRequest *aRequest, nsresult aResult) {
mDocument->AddBlockedTrackingNode(cont);
}
if (aRequest->IsModuleRequest() && !aRequest->mIsInline) {
auto request = aRequest->AsModuleRequest();
SetModuleFetchFinishedAndResumeWaitingRequests(request, aResult);
}
if (aRequest->IsModuleRequest() && !aRequest->mIsInline) {
auto request = aRequest->AsModuleRequest();
SetModuleFetchFinishedAndResumeWaitingRequests(request, aResult);
}
if (aRequest->mIsDefer) {
MOZ_ASSERT_IF(aRequest->IsModuleRequest(),