| OLD | NEW |
| 1 // Copyright 2017 The Chromium Authors. All rights reserved. | 1 // Copyright 2017 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "core/dom/ModuleScript.h" | 5 #include "core/dom/ModuleScript.h" |
| 6 | 6 |
| 7 #include "bindings/core/v8/ScriptValue.h" | 7 #include "bindings/core/v8/ScriptValue.h" |
| 8 #include "core/dom/ScriptModuleResolver.h" | 8 #include "core/dom/ScriptModuleResolver.h" |
| 9 #include "platform/bindings/ScriptState.h" | 9 #include "platform/bindings/ScriptState.h" |
| 10 #include "v8/include/v8.h" | 10 #include "v8/include/v8.h" |
| (...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 71 ScriptModule record, | 71 ScriptModule record, |
| 72 const KURL& base_url, | 72 const KURL& base_url, |
| 73 const String& nonce, | 73 const String& nonce, |
| 74 ParserDisposition parser_state, | 74 ParserDisposition parser_state, |
| 75 WebURLRequest::FetchCredentialsMode credentials_mode) { | 75 WebURLRequest::FetchCredentialsMode credentials_mode) { |
| 76 String dummy_source_text = ""; | 76 String dummy_source_text = ""; |
| 77 return CreateInternal(dummy_source_text, modulator, record, base_url, nonce, | 77 return CreateInternal(dummy_source_text, modulator, record, base_url, nonce, |
| 78 parser_state, credentials_mode); | 78 parser_state, credentials_mode); |
| 79 } | 79 } |
| 80 | 80 |
| 81 ModuleScript::ModuleScript(Modulator* settings_object, |
| 82 ScriptModule record, |
| 83 const KURL& base_url, |
| 84 const String& nonce, |
| 85 ParserDisposition parser_state, |
| 86 WebURLRequest::FetchCredentialsMode credentials_mode, |
| 87 const String& source_text) |
| 88 : settings_object_(settings_object), |
| 89 record_(this), |
| 90 base_url_(base_url), |
| 91 instantiation_error_(this), |
| 92 nonce_(nonce), |
| 93 parser_state_(parser_state), |
| 94 credentials_mode_(credentials_mode), |
| 95 source_text_(source_text) { |
| 96 DCHECK(settings_object); |
| 97 v8::Isolate* isolate = settings_object_->GetScriptState()->GetIsolate(); |
| 98 v8::HandleScope scope(isolate); |
| 99 record_.Set(isolate, record.NewLocal(isolate)); |
| 100 } |
| 101 |
| 102 ScriptModule ModuleScript::Record() const { |
| 103 v8::Isolate* isolate = settings_object_->GetScriptState()->GetIsolate(); |
| 104 v8::HandleScope scope(isolate); |
| 105 return ScriptModule(isolate, record_.NewLocal(isolate)); |
| 106 } |
| 107 |
| 81 void ModuleScript::SetInstantiationErrorAndClearRecord(ScriptValue error) { | 108 void ModuleScript::SetInstantiationErrorAndClearRecord(ScriptValue error) { |
| 82 // Implements Step 7.1 of: | 109 // Implements Step 7.1 of: |
| 83 // https://html.spec.whatwg.org/multipage/webappapis.html#internal-module-scri
pt-graph-fetching-procedure | 110 // https://html.spec.whatwg.org/multipage/webappapis.html#internal-module-scri
pt-graph-fetching-procedure |
| 84 | 111 |
| 85 // "set script's instantiation state to "errored", ..." | 112 // "set script's instantiation state to "errored", ..." |
| 86 DCHECK_EQ(instantiation_state_, ModuleInstantiationState::kUninstantiated); | 113 DCHECK_EQ(instantiation_state_, ModuleInstantiationState::kUninstantiated); |
| 87 instantiation_state_ = ModuleInstantiationState::kErrored; | 114 instantiation_state_ = ModuleInstantiationState::kErrored; |
| 88 | 115 |
| 89 // "its instantiation error to instantiationStatus.[[Value]], and ..." | 116 // "its instantiation error to instantiationStatus.[[Value]], and ..." |
| 90 DCHECK(!error.IsEmpty()); | 117 DCHECK(!error.IsEmpty()); |
| 91 { | 118 { |
| 92 ScriptState::Scope scope(error.GetScriptState()); | 119 ScriptState::Scope scope(error.GetScriptState()); |
| 93 instantiation_error_.Set(error.GetIsolate(), error.V8Value()); | 120 instantiation_error_.Set(error.GetIsolate(), error.V8Value()); |
| 94 } | 121 } |
| 95 | 122 |
| 96 // "its module record to null." | 123 // "its module record to null." |
| 97 record_ = ScriptModule(); | 124 record_.Clear(); |
| 98 } | 125 } |
| 99 | 126 |
| 100 void ModuleScript::SetInstantiationSuccess() { | 127 void ModuleScript::SetInstantiationSuccess() { |
| 101 // Implements Step 7.2 of: | 128 // Implements Step 7.2 of: |
| 102 // https://html.spec.whatwg.org/multipage/webappapis.html#internal-module-scri
pt-graph-fetching-procedure | 129 // https://html.spec.whatwg.org/multipage/webappapis.html#internal-module-scri
pt-graph-fetching-procedure |
| 103 | 130 |
| 104 // "set script's instantiation state to "instantiated"." | 131 // "set script's instantiation state to "instantiated"." |
| 105 DCHECK_EQ(instantiation_state_, ModuleInstantiationState::kUninstantiated); | 132 DCHECK_EQ(instantiation_state_, ModuleInstantiationState::kUninstantiated); |
| 106 instantiation_state_ = ModuleInstantiationState::kInstantiated; | 133 instantiation_state_ = ModuleInstantiationState::kInstantiated; |
| 107 } | 134 } |
| 108 | 135 |
| 109 DEFINE_TRACE(ModuleScript) { | 136 DEFINE_TRACE(ModuleScript) { |
| 110 visitor->Trace(settings_object_); | 137 visitor->Trace(settings_object_); |
| 111 Script::Trace(visitor); | 138 Script::Trace(visitor); |
| 112 } | 139 } |
| 113 DEFINE_TRACE_WRAPPERS(ModuleScript) { | 140 DEFINE_TRACE_WRAPPERS(ModuleScript) { |
| 141 // TODO(mlippautz): Support TraceWrappers(const |
| 142 // TraceWrapperV8Reference<v8::Module>&) to remove the cast. |
| 143 visitor->TraceWrappers(record_.Cast<v8::Value>()); |
| 114 visitor->TraceWrappers(instantiation_error_); | 144 visitor->TraceWrappers(instantiation_error_); |
| 115 } | 145 } |
| 116 | 146 |
| 117 bool ModuleScript::IsEmpty() const { | 147 bool ModuleScript::IsEmpty() const { |
| 118 return false; | 148 return false; |
| 119 } | 149 } |
| 120 | 150 |
| 121 bool ModuleScript::CheckMIMETypeBeforeRunScript(Document* context_document, | 151 bool ModuleScript::CheckMIMETypeBeforeRunScript(Document* context_document, |
| 122 const SecurityOrigin*) const { | 152 const SecurityOrigin*) const { |
| 123 // We don't check MIME type here because we check the MIME type in | 153 // We don't check MIME type here because we check the MIME type in |
| 124 // ModuleScriptLoader::WasModuleLoadSuccessful(). | 154 // ModuleScriptLoader::WasModuleLoadSuccessful(). |
| 125 return true; | 155 return true; |
| 126 } | 156 } |
| 127 | 157 |
| 128 void ModuleScript::RunScript(LocalFrame* frame, const SecurityOrigin*) const { | 158 void ModuleScript::RunScript(LocalFrame* frame, const SecurityOrigin*) const { |
| 129 settings_object_->ExecuteModule(this); | 159 settings_object_->ExecuteModule(this); |
| 130 } | 160 } |
| 131 | 161 |
| 132 String ModuleScript::InlineSourceTextForCSP() const { | 162 String ModuleScript::InlineSourceTextForCSP() const { |
| 133 return source_text_; | 163 return source_text_; |
| 134 } | 164 } |
| 135 | 165 |
| 136 } // namespace blink | 166 } // namespace blink |
| OLD | NEW |