Bug 1365187 - Keep track of which modules in a graph have been fetched using a visited set r=smaug

This commit is contained in:
Jon Coppeard
2017-12-14 15:13:57 -06:00
parent f7c3ab6a7c
commit 2fec8be9bb
6 changed files with 98 additions and 79 deletions

View File

@@ -21,26 +21,49 @@ NS_INTERFACE_MAP_END_INHERITING(ScriptLoadRequest)
NS_IMPL_CYCLE_COLLECTION_INHERITED(ModuleLoadRequest, ScriptLoadRequest,
mBaseURL,
mLoader,
mParent,
mModuleScript,
mImports)
NS_IMPL_ADDREF_INHERITED(ModuleLoadRequest, ScriptLoadRequest)
NS_IMPL_RELEASE_INHERITED(ModuleLoadRequest, ScriptLoadRequest)
ModuleLoadRequest::ModuleLoadRequest(nsIScriptElement* aElement,
ModuleLoadRequest::ModuleLoadRequest(nsIURI* aURI,
nsIScriptElement* aElement,
ValidJSVersion aValidJSVersion,
CORSMode aCORSMode,
const SRIMetadata& aIntegrity,
ScriptLoader* aLoader)
: ScriptLoadRequest(ScriptKind::Module,
aURI,
aElement,
aValidJSVersion,
aCORSMode,
aIntegrity),
mIsTopLevel(true),
mLoader(aLoader)
{}
mLoader(aLoader),
mVisitedSet(new VisitedURLSet())
{
mVisitedSet->PutEntry(aURI);
}
ModuleLoadRequest::ModuleLoadRequest(nsIURI* aURI,
ModuleLoadRequest* aParent)
: ScriptLoadRequest(ScriptKind::Module,
aURI,
aParent->mElement,
aParent->mValidJSVersion,
aParent->mCORSMode,
aParent->mIntegrity),
mIsTopLevel(false),
mLoader(aParent->mLoader),
mVisitedSet(aParent->mVisitedSet)
{
MOZ_ASSERT(mVisitedSet->Contains(aURI));
mTriggeringPrincipal = aParent->mTriggeringPrincipal;
mIsInline = false;
mReferrerPolicy = aParent->mReferrerPolicy;
}
void
ModuleLoadRequest::Cancel()
@@ -146,7 +169,6 @@ ModuleLoadRequest::LoadFinished()
mLoader->ProcessLoadedModuleTree(this);
mLoader = nullptr;
mParent = nullptr;
}
} // dom namespace