summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGaming4JC <g4jc@hyperbola.info>2020-08-26 11:19:42 -0400
committerGaming4JC <g4jc@hyperbola.info>2020-08-26 11:19:42 -0400
commit38d13e2779f9bfbf8620ead68a9bf0ffbed5762a (patch)
treec5aa35810edee4cd678441df73ff8fbfd4ed3e5f
parentb78f53ffb09a6aae6dbdc069c7cdd42d11b5eed2 (diff)
downloaduxp-38d13e2779f9bfbf8620ead68a9bf0ffbed5762a.tar.gz
Issue #618 - Don't preload nomodule scripts when modules are enabled
Ref: BZ 1382020
-rw-r--r--dom/script/ScriptLoader.cpp17
-rw-r--r--dom/script/ScriptLoader.h4
-rw-r--r--parser/html/java/htmlparser/src/nu/validator/htmlparser/impl/AttributeName.java2
-rw-r--r--parser/html/nsHtml5SpeculativeLoad.cpp16
-rw-r--r--parser/html/nsHtml5SpeculativeLoad.h17
-rw-r--r--parser/html/nsHtml5TreeBuilderCppSupplement.h10
-rw-r--r--parser/html/nsHtml5TreeOpExecutor.cpp6
-rw-r--r--parser/html/nsHtml5TreeOpExecutor.h3
8 files changed, 57 insertions, 18 deletions
diff --git a/dom/script/ScriptLoader.cpp b/dom/script/ScriptLoader.cpp
index 989301b919..0052c72fe4 100644
--- a/dom/script/ScriptLoader.cpp
+++ b/dom/script/ScriptLoader.cpp
@@ -2576,13 +2576,15 @@ ScriptLoader::ParsingComplete(bool aTerminated)
}
void
-ScriptLoader::PreloadURI(nsIURI *aURI, const nsAString &aCharset,
+ScriptLoader::PreloadURI(nsIURI *aURI,
+ const nsAString &aCharset,
const nsAString &aType,
const nsAString &aCrossOrigin,
const nsAString& aIntegrity,
bool aScriptFromHead,
bool aAsync,
bool aDefer,
+ bool aNoModule,
const mozilla::net::ReferrerPolicy aReferrerPolicy)
{
NS_ENSURE_TRUE_VOID(mDocument);
@@ -2591,9 +2593,16 @@ ScriptLoader::PreloadURI(nsIURI *aURI, const nsAString &aCharset,
return;
}
- // TODO: Preload module scripts.
- if (mDocument->ModuleScriptsEnabled() && aType.LowerCaseEqualsASCII("module")) {
- return;
+ if (mDocument->ModuleScriptsEnabled()) {
+ // Don't load nomodule scripts.
+ if (aNoModule) {
+ return;
+ }
+
+ // TODO: Preload module scripts.
+ if (aType.LowerCaseEqualsASCII("module")) {
+ return;
+ }
}
SRIMetadata sriMetadata;
diff --git a/dom/script/ScriptLoader.h b/dom/script/ScriptLoader.h
index ed1e6acbc4..20e76970f4 100644
--- a/dom/script/ScriptLoader.h
+++ b/dom/script/ScriptLoader.h
@@ -479,13 +479,15 @@ public:
* @param aIntegrity The expect hash url, if avail, of the request
* @param aScriptFromHead Whether or not the script was a child of head
*/
- virtual void PreloadURI(nsIURI *aURI, const nsAString &aCharset,
+ virtual void PreloadURI(nsIURI *aURI,
+ const nsAString &aCharset,
const nsAString &aType,
const nsAString &aCrossOrigin,
const nsAString& aIntegrity,
bool aScriptFromHead,
bool aAsync,
bool aDefer,
+ bool aNoModule,
const mozilla::net::ReferrerPolicy aReferrerPolicy);
/**
diff --git a/parser/html/java/htmlparser/src/nu/validator/htmlparser/impl/AttributeName.java b/parser/html/java/htmlparser/src/nu/validator/htmlparser/impl/AttributeName.java
index aaf0b7b911..b08e41baaa 100644
--- a/parser/html/java/htmlparser/src/nu/validator/htmlparser/impl/AttributeName.java
+++ b/parser/html/java/htmlparser/src/nu/validator/htmlparser/impl/AttributeName.java
@@ -1161,6 +1161,7 @@ public final class AttributeName
public static final AttributeName LQUOTE = new AttributeName(ALL_NO_NS, SAME_LOCAL("lquote"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
public static final AttributeName PANOSE_1 = new AttributeName(ALL_NO_NS, SAME_LOCAL("panose-1"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
public static final AttributeName NUMOCTAVES = new AttributeName(ALL_NO_NS, SVG_DIFFERENT("numoctaves", "numOctaves"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
+ public static final AttributeName NOMODULE = new AttributeName(ALL_NO_NS, SAME_LOCAL("nomodule"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG | CASE_FOLDED | BOOLEAN);
public static final AttributeName ONLOAD = new AttributeName(ALL_NO_NS, SAME_LOCAL("onload"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
public static final AttributeName ONBOUNCE = new AttributeName(ALL_NO_NS, SAME_LOCAL("onbounce"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
public static final AttributeName ONCONTROLSELECT = new AttributeName(ALL_NO_NS, SAME_LOCAL("oncontrolselect"), ALL_NO_PREFIX, NCNAME_HTML | NCNAME_FOREIGN | NCNAME_LANG);
@@ -1464,6 +1465,7 @@ public final class AttributeName
XLINK_SHOW,
COLOR_RENDERING,
IDEOGRAPHIC,
+ NOMODULE,
ONMOUSEWHEEL,
ONCONTEXTMENU,
ONMOUSEMOVE,
diff --git a/parser/html/nsHtml5SpeculativeLoad.cpp b/parser/html/nsHtml5SpeculativeLoad.cpp
index 7bae0699f4..35c11b739d 100644
--- a/parser/html/nsHtml5SpeculativeLoad.cpp
+++ b/parser/html/nsHtml5SpeculativeLoad.cpp
@@ -52,17 +52,27 @@ nsHtml5SpeculativeLoad::Perform(nsHtml5TreeOpExecutor* aExecutor)
case eSpeculativeLoadScript:
aExecutor->PreloadScript(mUrl, mCharset, mTypeOrCharsetSourceOrDocumentMode,
mCrossOrigin, mIntegrity, false,
- mIsAsync, mIsDefer);
+ mIsAsync, mIsDefer, false);
break;
case eSpeculativeLoadScriptFromHead:
aExecutor->PreloadScript(mUrl, mCharset, mTypeOrCharsetSourceOrDocumentMode,
mCrossOrigin, mIntegrity, true,
- mIsAsync, mIsDefer);
+ mIsAsync, mIsDefer, false);
+ break;
+ case eSpeculativeLoadNoModuleScript:
+ aExecutor->PreloadScript(mUrl, mCharset, mTypeOrCharsetSourceOrDocumentMode,
+ mCrossOrigin, mIntegrity, false,
+ mIsAsync, mIsDefer, true);
+ break;
+ case eSpeculativeLoadNoModuleScriptFromHead:
+ aExecutor->PreloadScript(mUrl, mCharset, mTypeOrCharsetSourceOrDocumentMode,
+ mCrossOrigin, mIntegrity, true,
+ mIsAsync, mIsDefer, true);
break;
case eSpeculativeLoadStyle:
aExecutor->PreloadStyle(mUrl, mCharset, mCrossOrigin, mIntegrity);
break;
- case eSpeculativeLoadManifest:
+ case eSpeculativeLoadManifest:
aExecutor->ProcessOfflineManifest(mUrl);
break;
case eSpeculativeLoadSetDocumentCharset: {
diff --git a/parser/html/nsHtml5SpeculativeLoad.h b/parser/html/nsHtml5SpeculativeLoad.h
index fcc84de4f6..1f4a617416 100644
--- a/parser/html/nsHtml5SpeculativeLoad.h
+++ b/parser/html/nsHtml5SpeculativeLoad.h
@@ -10,7 +10,8 @@
class nsHtml5TreeOpExecutor;
-enum eHtml5SpeculativeLoad {
+enum eHtml5SpeculativeLoad
+{
#ifdef DEBUG
eSpeculativeLoadUninitialized,
#endif
@@ -23,6 +24,8 @@ enum eHtml5SpeculativeLoad {
eSpeculativeLoadPictureSource,
eSpeculativeLoadScript,
eSpeculativeLoadScriptFromHead,
+ eSpeculativeLoadNoModuleScript,
+ eSpeculativeLoadNoModuleScriptFromHead,
eSpeculativeLoadStyle,
eSpeculativeLoadManifest,
eSpeculativeLoadSetDocumentCharset,
@@ -130,12 +133,18 @@ class nsHtml5SpeculativeLoad {
nsHtml5String aIntegrity,
bool aParserInHead,
bool aAsync,
- bool aDefer)
+ bool aDefer,
+ bool aNoModule)
{
NS_PRECONDITION(mOpCode == eSpeculativeLoadUninitialized,
"Trying to reinitialize a speculative load!");
- mOpCode = aParserInHead ?
- eSpeculativeLoadScriptFromHead : eSpeculativeLoadScript;
+ if (aNoModule) {
+ mOpCode = aParserInHead ? eSpeculativeLoadNoModuleScriptFromHead
+ : eSpeculativeLoadNoModuleScript;
+ } else {
+ mOpCode = aParserInHead ? eSpeculativeLoadScriptFromHead
+ : eSpeculativeLoadScript;
+ }
aUrl.ToString(mUrl);
aCharset.ToString(mCharset);
aType.ToString(mTypeOrCharsetSourceOrDocumentMode);
diff --git a/parser/html/nsHtml5TreeBuilderCppSupplement.h b/parser/html/nsHtml5TreeBuilderCppSupplement.h
index 634c5c2186..f09cc18539 100644
--- a/parser/html/nsHtml5TreeBuilderCppSupplement.h
+++ b/parser/html/nsHtml5TreeBuilderCppSupplement.h
@@ -189,15 +189,18 @@ nsHtml5TreeBuilder::createElement(int32_t aNamespace,
aAttributes->contains(nsHtml5AttributeName::ATTR_ASYNC);
bool defer =
aAttributes->contains(nsHtml5AttributeName::ATTR_DEFER);
+ bool noModule =
+ aAttributes->contains(nsHtml5AttributeName::ATTR_NOMODULE);
mSpeculativeLoadQueue.AppendElement()->InitScript(
url,
charset,
type,
crossOrigin,
integrity,
- mode == nsHtml5TreeBuilder::IN_HEAD,
+ mode == nsHtml5TreeBuilder::IN_HEAD,
async,
- defer);
+ defer,
+ noModule);
mCurrentHtmlScriptIsAsyncOrDefer = async || defer;
}
} else if (nsHtml5Atoms::link == aName) {
@@ -303,7 +306,8 @@ nsHtml5TreeBuilder::createElement(int32_t aNamespace,
integrity,
mode == nsHtml5TreeBuilder::IN_HEAD,
false /* async */,
- false /* defer */);
+ false /* defer */,
+ false /* noModule */);
}
} else if (nsHtml5Atoms::style == aName) {
nsHtml5TreeOperation* treeOp = mOpQueue.AppendElement();
diff --git a/parser/html/nsHtml5TreeOpExecutor.cpp b/parser/html/nsHtml5TreeOpExecutor.cpp
index 9be7f3b0d6..cd5c689133 100644
--- a/parser/html/nsHtml5TreeOpExecutor.cpp
+++ b/parser/html/nsHtml5TreeOpExecutor.cpp
@@ -923,14 +923,16 @@ nsHtml5TreeOpExecutor::PreloadScript(const nsAString& aURL,
const nsAString& aIntegrity,
bool aScriptFromHead,
bool aAsync,
- bool aDefer)
+ bool aDefer,
+ bool aNoModule)
{
nsCOMPtr<nsIURI> uri = ConvertIfNotPreloadedYet(aURL);
if (!uri) {
return;
}
mDocument->ScriptLoader()->PreloadURI(uri, aCharset, aType, aCrossOrigin,
- aIntegrity, aScriptFromHead, aAsync, aDefer,
+ aIntegrity, aScriptFromHead, aAsync,
+ aDefer, aNoModule,
mSpeculationReferrerPolicy);
}
diff --git a/parser/html/nsHtml5TreeOpExecutor.h b/parser/html/nsHtml5TreeOpExecutor.h
index 64a5daa96f..878f359c55 100644
--- a/parser/html/nsHtml5TreeOpExecutor.h
+++ b/parser/html/nsHtml5TreeOpExecutor.h
@@ -251,7 +251,8 @@ class nsHtml5TreeOpExecutor final : public nsHtml5DocumentBuilder,
const nsAString& aIntegrity,
bool aScriptFromHead,
bool aAsync,
- bool aDefer);
+ bool aDefer,
+ bool aNoModule);
void PreloadStyle(const nsAString& aURL, const nsAString& aCharset,
const nsAString& aCrossOrigin,