Bug 1842792, disable speculative load of modulepreload if parser has seen importmap, r=jonco,allstarschh,peterv

Differential Revision: https://phabricator.services.mozilla.com/D183421
This commit is contained in:
Olli Pettay
2023-07-13 16:27:23 +00:00
parent 88148773f9
commit 44811cf3e3
2 changed files with 19 additions and 5 deletions

View File

@@ -44,7 +44,8 @@ nsHtml5TreeBuilder::nsHtml5TreeBuilder(nsHtml5OplessBuilder* aBuilder)
mBroken(NS_OK),
mCurrentHtmlScriptIsAsyncOrDefer(false),
mPreventScriptExecution(false),
mGenerateSpeculativeLoads(false)
mGenerateSpeculativeLoads(false),
mHasSeenImportMap(false)
#ifdef DEBUG
,
mActive(false)
@@ -85,7 +86,8 @@ nsHtml5TreeBuilder::nsHtml5TreeBuilder(nsAHtml5TreeOpSink* aOpSink,
mBroken(NS_OK),
mCurrentHtmlScriptIsAsyncOrDefer(false),
mPreventScriptExecution(false),
mGenerateSpeculativeLoads(aGenerateSpeculativeLoads)
mGenerateSpeculativeLoads(aGenerateSpeculativeLoads),
mHasSeenImportMap(false)
#ifdef DEBUG
,
mActive(false)
@@ -226,13 +228,22 @@ nsIContentHandle* nsHtml5TreeBuilder::createElement(
tokenizer->getColumnNumber());
treeOp->Init(mozilla::AsVariant(operation));
nsHtml5String type =
aAttributes->getValue(nsHtml5AttributeName::ATTR_TYPE);
if (!mHasSeenImportMap) {
// If we see an importmap, we don't want to later start
// speculative loads for modulepreloads, since such load might
// finish before the importmap is created.
nsAutoString typeString;
type.ToString(typeString);
mHasSeenImportMap =
typeString.LowerCaseFindASCII("importmap") != kNotFound;
}
nsHtml5String url =
aAttributes->getValue(nsHtml5AttributeName::ATTR_SRC);
if (url) {
nsHtml5String charset =
aAttributes->getValue(nsHtml5AttributeName::ATTR_CHARSET);
nsHtml5String type =
aAttributes->getValue(nsHtml5AttributeName::ATTR_TYPE);
nsHtml5String crossOrigin =
aAttributes->getValue(nsHtml5AttributeName::ATTR_CROSSORIGIN);
nsHtml5String integrity =
@@ -338,7 +349,8 @@ nsIContentHandle* nsHtml5TreeBuilder::createElement(
// Other "as" values will be supported later.
}
} else if (mozilla::StaticPrefs::network_modulepreload() &&
rel.LowerCaseEqualsASCII("modulepreload")) {
rel.LowerCaseEqualsASCII("modulepreload") &&
!mHasSeenImportMap) {
nsHtml5String url =
aAttributes->getValue(nsHtml5AttributeName::ATTR_HREF);
if (url && url.Length() != 0) {