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 b7ffc14fe49f45a40f6278f6b44bea0e0dc5ddd4..2686d851c6782011685c97fc22e02b7dedb829d8 100644 |
--- a/third_party/WebKit/Source/core/dom/ScriptLoader.cpp |
+++ b/third_party/WebKit/Source/core/dom/ScriptLoader.cpp |
@@ -157,10 +157,12 @@ void ScriptLoader::DispatchLoadEvent() { |
SetHaveFiredLoadEvent(true); |
} |
-bool ScriptLoader::IsValidScriptTypeAndLanguage( |
+namespace { |
+ |
+bool IsValidClassicScriptTypeAndLanguage( |
const String& type, |
const String& language, |
- LegacyTypeSupport support_legacy_types) { |
+ ScriptLoader::LegacyTypeSupport support_legacy_types) { |
// FIXME: isLegacySupportedJavaScriptLanguage() is not valid HTML5. It is used |
// here to maintain backwards compatibility with existing layout tests. The |
// specific violations are: |
@@ -173,12 +175,10 @@ bool ScriptLoader::IsValidScriptTypeAndLanguage( |
MIMETypeRegistry::IsSupportedJavaScriptMIMEType("text/" + |
language) || |
MIMETypeRegistry::IsLegacySupportedJavaScriptLanguage(language); |
- } else if (RuntimeEnabledFeatures::moduleScriptsEnabled() && |
- type == "module") { |
- return true; |
} else if (MIMETypeRegistry::IsSupportedJavaScriptMIMEType( |
type.StripWhiteSpace()) || |
- (support_legacy_types == kAllowLegacyTypeInTypeAttribute && |
+ (support_legacy_types == |
+ ScriptLoader::kAllowLegacyTypeInTypeAttribute && |
MIMETypeRegistry::IsLegacySupportedJavaScriptLanguage(type))) { |
return true; |
} |
@@ -186,11 +186,40 @@ bool ScriptLoader::IsValidScriptTypeAndLanguage( |
return false; |
} |
-bool ScriptLoader::IsScriptTypeSupported( |
- LegacyTypeSupport support_legacy_types) const { |
+} // namespace |
+ |
+// Step 6 of https://html.spec.whatwg.org/#prepare-a-script |
+bool ScriptLoader::IsValidScriptTypeAndLanguage( |
+ const String& type, |
+ const String& language, |
+ LegacyTypeSupport support_legacy_types, |
+ ScriptType& out_script_type) { |
+ if (IsValidClassicScriptTypeAndLanguage(type, language, |
+ support_legacy_types)) { |
+ // - "If the script block's type string is an ASCII case-insensitive match |
+ // for any JavaScript MIME type, the script's type is "classic"." |
+ // TODO(hiroshige): Annotate and/or cleanup this step. |
+ out_script_type = ScriptType::kClassic; |
+ return true; |
+ } |
+ |
+ if (RuntimeEnabledFeatures::moduleScriptsEnabled() && type == "module") { |
+ // - "If the script block's type string is an ASCII case-insensitive match |
+ // for the string "module", the script's type is "module"." |
+ out_script_type = ScriptType::kModule; |
+ return true; |
+ } |
+ |
+ // - "If neither of the above conditions are true, then abort these steps |
+ // at this point. No script is executed." |
+ return false; |
+} |
+ |
+bool ScriptLoader::IsScriptTypeSupported(LegacyTypeSupport support_legacy_types, |
+ ScriptType& out_script_type) const { |
return IsValidScriptTypeAndLanguage(element_->TypeAttributeValue(), |
element_->LanguageAttributeValue(), |
- support_legacy_types); |
+ support_legacy_types, out_script_type); |
} |
// https://html.spec.whatwg.org/#prepare-a-script |
@@ -231,9 +260,9 @@ bool ScriptLoader::PrepareScript(const TextPosition& script_start_position, |
if (!element_->IsConnected()) |
return false; |
- // 6. |
- // TODO(hiroshige): Annotate and/or cleanup this step. |
- if (!IsScriptTypeSupported(support_legacy_types)) |
+ // 6. "Determine the script's type as follows:" |
+ // |script_type_| is set here. |
+ if (!IsScriptTypeSupported(support_legacy_types, script_type_)) |
return false; |
// 7. "If was-parser-inserted is true, |
@@ -264,6 +293,11 @@ bool ScriptLoader::PrepareScript(const TextPosition& script_start_position, |
if (!context_document->CanExecuteScripts(kAboutToExecuteScript)) |
return false; |
+ // 11. "If the script element has a nomodule content attribute |
+ // and the script's type is "classic", then abort these steps. |
+ // The script is not executed." |
+ // TODO(japhet): Implement this step. |
+ |
// 13. |
if (!IsScriptForEventSupported()) |
return false; |