| 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;
 | 
| 
 |