| Index: Source/core/dom/ScriptLoader.cpp
 | 
| diff --git a/Source/core/dom/ScriptLoader.cpp b/Source/core/dom/ScriptLoader.cpp
 | 
| index b4d1e0b81b094c1808ed32101a3fcb07b2d9144d..c29e0a261c4aa927abba8120b54cbc487fe170e0 100644
 | 
| --- a/Source/core/dom/ScriptLoader.cpp
 | 
| +++ b/Source/core/dom/ScriptLoader.cpp
 | 
| @@ -24,6 +24,8 @@
 | 
|  #include "config.h"
 | 
|  #include "core/dom/ScriptLoader.h"
 | 
|  
 | 
| +// FIXMEDART: This should move to bindings/core/dart.
 | 
| +#include "bindings/core/dart/DartController.h"
 | 
|  #include "bindings/core/v8/ScriptController.h"
 | 
|  #include "bindings/core/v8/ScriptSourceCode.h"
 | 
|  #include "core/HTMLNames.h"
 | 
| @@ -69,6 +71,7 @@ ScriptLoader::ScriptLoader(Element* element, bool parserInserted, bool alreadySt
 | 
|      , m_willExecuteWhenDocumentFinishedParsing(false)
 | 
|      , m_forceAsync(!parserInserted)
 | 
|      , m_willExecuteInOrder(false)
 | 
| +    , m_scriptType(ScriptJavaScript)
 | 
|  {
 | 
|      ASSERT(m_element);
 | 
|      if (parserInserted && element->document().scriptableDocumentParser() && !element->document().isInDocumentWrite())
 | 
| @@ -159,7 +162,7 @@ void ScriptLoader::dispatchLoadEvent()
 | 
|      setHaveFiredLoadEvent(true);
 | 
|  }
 | 
|  
 | 
| -bool ScriptLoader::isScriptTypeSupported(LegacyTypeSupport supportLegacyTypes) const
 | 
| +ScriptLoader::ScriptType 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.
 | 
| @@ -168,16 +171,18 @@ bool ScriptLoader::isScriptTypeSupported(LegacyTypeSupport supportLegacyTypes) c
 | 
|      String type = client()->typeAttributeValue();
 | 
|      String language = client()->languageAttributeValue();
 | 
|      if (type.isEmpty() && language.isEmpty())
 | 
| -        return true; // Assume text/javascript.
 | 
| +        return ScriptJavaScript; // Assume text/javascript.
 | 
|      if (type.isEmpty()) {
 | 
|          type = "text/" + language.lower();
 | 
|          if (MIMETypeRegistry::isSupportedJavaScriptMIMEType(type) || isLegacySupportedJavaScriptLanguage(language))
 | 
| -            return true;
 | 
| +            return ScriptJavaScript;
 | 
|      } else if (MIMETypeRegistry::isSupportedJavaScriptMIMEType(type.stripWhiteSpace()) || (supportLegacyTypes == AllowLegacyTypeInTypeAttribute && isLegacySupportedJavaScriptLanguage(type))) {
 | 
| -        return true;
 | 
| +            return ScriptJavaScript;
 | 
| +    } else if (MIMETypeRegistry::isSupportedDartMIMEType(type.stripWhiteSpace())) {
 | 
| +        return ScriptDart;
 | 
|      }
 | 
|  
 | 
| -    return false;
 | 
| +    return ScriptNone;
 | 
|  }
 | 
|  
 | 
|  // http://dev.w3.org/html5/spec/Overview.html#prepare-a-script
 | 
| @@ -396,7 +401,13 @@ bool ScriptLoader::executeScript(const ScriptSourceCode& sourceCode, double* com
 | 
|      // Create a script from the script element node, using the script
 | 
|      // block's source and the script block's type.
 | 
|      // Note: This is where the script is compiled and actually executed.
 | 
| -    frame->script().executeScriptInMainWorld(sourceCode, accessControlStatus, compilationFinishTime);
 | 
| +    if (m_scriptType == ScriptJavaScript) {
 | 
| +        frame->script().executeScriptInMainWorld(sourceCode, accessControlStatus, compilationFinishTime);
 | 
| +    } else if (m_scriptType == ScriptDart) {
 | 
| +        frame->dart().evaluate(sourceCode, this);
 | 
| +    } else {
 | 
| +        ASSERT_NOT_REACHED();
 | 
| +    }
 | 
|  
 | 
|      if (isHTMLScriptLoader(m_element)) {
 | 
|          ASSERT(contextDocument->currentScript() == m_element);
 | 
| 
 |