Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(326)

Unified Diff: third_party/WebKit/Source/core/dom/ScriptLoader.cpp

Issue 2130773002: Revert of Don't preload scripts with invalid type/language attributes (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: third_party/WebKit/Source/core/dom/ScriptLoader.cpp
diff --git a/third_party/WebKit/Source/core/dom/ScriptLoader.cpp b/third_party/WebKit/Source/core/dom/ScriptLoader.cpp
index 6ae5e2cbb477047b898ac3631329920af767a1eb..a8337a8df390e92e0f5c4ad23955a52e56086473 100644
--- a/third_party/WebKit/Source/core/dom/ScriptLoader.cpp
+++ b/third_party/WebKit/Source/core/dom/ScriptLoader.cpp
@@ -121,7 +121,7 @@
m_pendingScript = nullptr;
}
-// Helper function. Must take a lowercase language as input.
+// Helper function
static bool isLegacySupportedJavaScriptLanguage(const String& language)
{
// Mozilla 1.8 accepts javascript1.0 - javascript1.7, but WinIE 7 accepts only javascript1.1 - javascript1.3.
@@ -131,19 +131,24 @@
// We want to accept all the values that either of these browsers accept, but not other values.
// FIXME: This function is not HTML5 compliant. These belong in the MIME registry as "text/javascript<version>" entries.
- DCHECK_EQ(language, language.lower());
- return language == "javascript"
- || language == "javascript1.0"
- || language == "javascript1.1"
- || language == "javascript1.2"
- || language == "javascript1.3"
- || language == "javascript1.4"
- || language == "javascript1.5"
- || language == "javascript1.6"
- || language == "javascript1.7"
- || language == "livescript"
- || language == "ecmascript"
- || language == "jscript";
+ typedef HashSet<String, CaseFoldingHash> LanguageSet;
+ DEFINE_STATIC_LOCAL(LanguageSet, languages, ());
+ if (languages.isEmpty()) {
+ languages.add("javascript");
+ languages.add("javascript1.0");
+ languages.add("javascript1.1");
+ languages.add("javascript1.2");
+ languages.add("javascript1.3");
+ languages.add("javascript1.4");
+ languages.add("javascript1.5");
+ languages.add("javascript1.6");
+ languages.add("javascript1.7");
+ languages.add("livescript");
+ languages.add("ecmascript");
+ languages.add("jscript");
+ }
+
+ return languages.contains(language);
}
void ScriptLoader::dispatchErrorEvent()
@@ -158,28 +163,27 @@
setHaveFiredLoadEvent(true);
}
-bool ScriptLoader::isValidScriptTypeAndLanguage(const String& type, const String& language, LegacyTypeSupport supportLegacyTypes)
+bool ScriptLoader::isScriptTypeSupported(LegacyTypeSupport supportLegacyTypes) const
{
// FIXME: isLegacySupportedJavaScriptLanguage() is not valid HTML5. It is used here to maintain backwards compatibility with existing layout tests. The specific violations are:
// - Allowing type=javascript. type= should only support MIME types, such as text/javascript.
// - Allowing a different set of languages for language= and type=. language= supports Javascript 1.1 and 1.4-1.6, but type= does not.
+
+ String type = client()->typeAttributeValue();
+ String language = client()->languageAttributeValue();
+ if (type.isEmpty() && language.isEmpty())
+ return true; // Assume text/javascript.
if (type.isEmpty()) {
- String lowerLanguage = language.lower();
- return language.isEmpty() // assume text/javascript.
- || MIMETypeRegistry::isSupportedJavaScriptMIMEType("text/" + lowerLanguage)
- || isLegacySupportedJavaScriptLanguage(lowerLanguage);
+ type = "text/" + language.lower();
+ if (MIMETypeRegistry::isSupportedJavaScriptMIMEType(type) || isLegacySupportedJavaScriptLanguage(language))
+ return true;
} else if (RuntimeEnabledFeatures::moduleScriptsEnabled() && type == "module") {
return true;
- } else if (MIMETypeRegistry::isSupportedJavaScriptMIMEType(type.stripWhiteSpace()) || (supportLegacyTypes == AllowLegacyTypeInTypeAttribute && isLegacySupportedJavaScriptLanguage(type.lower()))) {
+ } else if (MIMETypeRegistry::isSupportedJavaScriptMIMEType(type.stripWhiteSpace()) || (supportLegacyTypes == AllowLegacyTypeInTypeAttribute && isLegacySupportedJavaScriptLanguage(type))) {
return true;
}
return false;
-}
-
-bool ScriptLoader::isScriptTypeSupported(LegacyTypeSupport supportLegacyTypes) const
-{
- return isValidScriptTypeAndLanguage(client()->typeAttributeValue(), client()->languageAttributeValue(), supportLegacyTypes);
}
// http://dev.w3.org/html5/spec/Overview.html#prepare-a-script
@@ -340,10 +344,9 @@
void ScriptLoader::logScriptMimetype(ScriptResource* resource, LocalFrame* frame, String mimetype)
{
- String lowerMimetype = mimetype.lower();
- bool text = lowerMimetype.startsWith("text/");
- bool application = lowerMimetype.startsWith("application/");
- bool expectedJs = MIMETypeRegistry::isSupportedJavaScriptMIMEType(lowerMimetype) || (text && isLegacySupportedJavaScriptLanguage(lowerMimetype.substring(5)));
+ bool text = mimetype.lower().startsWith("text/");
+ bool application = mimetype.lower().startsWith("application/");
+ bool expectedJs = MIMETypeRegistry::isSupportedJavaScriptMIMEType(mimetype) || (text && isLegacySupportedJavaScriptLanguage(mimetype.substring(5)));
bool sameOrigin = m_element->document().getSecurityOrigin()->canRequest(m_resource->url());
if (expectedJs) {
return;
« no previous file with comments | « third_party/WebKit/Source/core/dom/ScriptLoader.h ('k') | third_party/WebKit/Source/core/html/parser/HTMLPreloadScanner.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698