Index: third_party/WebKit/Source/core/dom/ModulatorImpl.cpp |
diff --git a/third_party/WebKit/Source/core/dom/ModulatorImpl.cpp b/third_party/WebKit/Source/core/dom/ModulatorImpl.cpp |
index b41d3a4038568b5a5c0940a95339b1d9484e49ce..32387dc75aa0cbd412ebac54d2365f0e7b5ba4fd 100644 |
--- a/third_party/WebKit/Source/core/dom/ModulatorImpl.cpp |
+++ b/third_party/WebKit/Source/core/dom/ModulatorImpl.cpp |
@@ -128,6 +128,14 @@ ScriptValue ModulatorImpl::InstantiateModule(ScriptModule script_module) { |
return script_module.Instantiate(script_state_.Get()); |
} |
+ScriptValue ModulatorImpl::GetInstantiationError( |
+ const ModuleScript* module_script) { |
+ ScriptState::Scope scope(script_state_.Get()); |
+ return ScriptValue( |
+ script_state_.Get(), |
+ module_script->CreateInstantiationError(script_state_->GetIsolate())); |
+} |
+ |
Vector<String> ModulatorImpl::ModuleRequestsFromScriptModule( |
ScriptModule script_module) { |
ScriptState::Scope scope(script_state_.Get()); |
@@ -138,6 +146,43 @@ inline ExecutionContext* ModulatorImpl::GetExecutionContext() const { |
return ExecutionContext::From(script_state_.Get()); |
} |
+void ModulatorImpl::ExecuteModule(const ModuleScript* module_script) { |
+ // https://html.spec.whatwg.org/#run-a-module-script |
+ |
+ // 1. "Let settings be the settings object of s." |
+ // The settings object is |this|. |
+ |
+ // 2. "Check if we can run script with settings. |
+ // If this returns "do not run" then abort these steps." |
+ if (!GetExecutionContext()->CanExecuteScripts(kAboutToExecuteScript)) |
+ return; |
+ |
+ ScriptState::Scope scope(script_state_.Get()); |
+ |
+ // 3. "If s's instantiation state is "errored", then report the exception |
+ // given by s's instantiation error for s and abort these steps." |
+ ModuleInstantiationState instantiationState = |
+ module_script->InstantiationState(); |
+ if (instantiationState == ModuleInstantiationState::kErrored) { |
+ v8::Isolate* isolate = script_state_->GetIsolate(); |
+ ScriptModule::ReportException( |
+ script_state_.Get(), module_script->CreateInstantiationError(isolate), |
+ module_script->BaseURL().GetString()); |
+ return; |
+ } |
+ |
+ // 4. "Assert: s's instantiation state is "instantiated" (and thus its |
+ // module record is not null)." |
+ CHECK_EQ(instantiationState, ModuleInstantiationState::kInstantiated); |
+ |
+ // 5. "Let record be s's module record." |
+ const ScriptModule& record = module_script->Record(); |
+ CHECK(!record.IsNull()); |
+ |
+ // 6.--9.? |
+ record.Evaluate(script_state_.Get()); |
+} |
+ |
DEFINE_TRACE(ModulatorImpl) { |
Modulator::Trace(visitor); |
visitor->Trace(fetcher_); |