| 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/ScriptModuleResolverImpl.h" | 5 #include "core/dom/ScriptModuleResolverImpl.h" |
| 6 | 6 |
| 7 #include "bindings/core/v8/V8BindingForTesting.h" | 7 #include "bindings/core/v8/V8BindingForTesting.h" |
| 8 #include "core/dom/ExceptionCode.h" | 8 #include "core/dom/ExceptionCode.h" |
| 9 #include "core/dom/Modulator.h" | 9 #include "core/dom/Modulator.h" |
| 10 #include "core/dom/ModuleScript.h" | 10 #include "core/dom/ModuleScript.h" |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 48 DummyModulator::Trace(visitor); | 48 DummyModulator::Trace(visitor); |
| 49 } | 49 } |
| 50 | 50 |
| 51 ModuleScript* ScriptModuleResolverImplTestModulator::GetFetchedModuleScript( | 51 ModuleScript* ScriptModuleResolverImplTestModulator::GetFetchedModuleScript( |
| 52 const KURL& url) { | 52 const KURL& url) { |
| 53 get_fetched_module_script_called_++; | 53 get_fetched_module_script_called_++; |
| 54 fetched_url_ = url; | 54 fetched_url_ = url; |
| 55 return module_script_.Get(); | 55 return module_script_.Get(); |
| 56 } | 56 } |
| 57 | 57 |
| 58 ModuleScript* CreateReferrerModuleScript(V8TestingScope& scope) { | 58 ModuleScript* CreateReferrerModuleScript(Modulator* modulator, |
| 59 V8TestingScope& scope) { |
| 59 ScriptModule referrer_record = ScriptModule::Compile( | 60 ScriptModule referrer_record = ScriptModule::Compile( |
| 60 scope.GetIsolate(), "import './target.js'; export const a = 42;", | 61 scope.GetIsolate(), "import './target.js'; export const a = 42;", |
| 61 "referrer.js", kSharableCrossOrigin); | 62 "referrer.js", kSharableCrossOrigin); |
| 62 KURL referrer_url(kParsedURLString, "https://example.com/referrer.js"); | 63 KURL referrer_url(kParsedURLString, "https://example.com/referrer.js"); |
| 63 ModuleScript* referrer_module_script = | 64 ModuleScript* referrer_module_script = ModuleScript::Create( |
| 64 ModuleScript::Create(referrer_record, referrer_url, "", kParserInserted, | 65 modulator, referrer_record, referrer_url, "", kParserInserted, |
| 65 WebURLRequest::kFetchCredentialsModeOmit); | 66 WebURLRequest::kFetchCredentialsModeOmit); |
| 66 // TODO(kouhei): moduleScript->setInstantiateSuccess(); once | 67 // TODO(kouhei): moduleScript->setInstantiateSuccess(); once |
| 67 // https://codereview.chromium.org/2782403002/ landed. | 68 // https://codereview.chromium.org/2782403002/ landed. |
| 68 return referrer_module_script; | 69 return referrer_module_script; |
| 69 } | 70 } |
| 70 | 71 |
| 71 ModuleScript* CreateTargetModuleScript(V8TestingScope& scope) { | 72 ModuleScript* CreateTargetModuleScript(Modulator* modulator, |
| 73 V8TestingScope& scope) { |
| 72 ScriptModule record = | 74 ScriptModule record = |
| 73 ScriptModule::Compile(scope.GetIsolate(), "export const pi = 3.14;", | 75 ScriptModule::Compile(scope.GetIsolate(), "export const pi = 3.14;", |
| 74 "target.js", kSharableCrossOrigin); | 76 "target.js", kSharableCrossOrigin); |
| 75 KURL url(kParsedURLString, "https://example.com/target.js"); | 77 KURL url(kParsedURLString, "https://example.com/target.js"); |
| 76 ModuleScript* module_script = | 78 ModuleScript* module_script = |
| 77 ModuleScript::Create(record, url, "", kParserInserted, | 79 ModuleScript::Create(modulator, record, url, "", kParserInserted, |
| 78 WebURLRequest::kFetchCredentialsModeOmit); | 80 WebURLRequest::kFetchCredentialsModeOmit); |
| 79 // TODO(kouhei): moduleScript->setInstantiateSuccess(); once | 81 // TODO(kouhei): moduleScript->setInstantiateSuccess(); once |
| 80 // https://codereview.chromium.org/2782403002/ landed. | 82 // https://codereview.chromium.org/2782403002/ landed. |
| 81 return module_script; | 83 return module_script; |
| 82 } | 84 } |
| 83 | 85 |
| 84 } // namespace | 86 } // namespace |
| 85 | 87 |
| 86 class ScriptModuleResolverImplTest : public testing::Test { | 88 class ScriptModuleResolverImplTest : public testing::Test { |
| 87 public: | 89 public: |
| (...skipping 12 matching lines...) Expand all Loading... |
| 100 void ScriptModuleResolverImplTest::SetUp() { | 102 void ScriptModuleResolverImplTest::SetUp() { |
| 101 platform_->AdvanceClockSeconds(1.); // For non-zero DocumentParserTimings | 103 platform_->AdvanceClockSeconds(1.); // For non-zero DocumentParserTimings |
| 102 modulator_ = new ScriptModuleResolverImplTestModulator(); | 104 modulator_ = new ScriptModuleResolverImplTestModulator(); |
| 103 } | 105 } |
| 104 | 106 |
| 105 TEST_F(ScriptModuleResolverImplTest, registerResolveSuccess) { | 107 TEST_F(ScriptModuleResolverImplTest, registerResolveSuccess) { |
| 106 ScriptModuleResolverImpl* resolver = | 108 ScriptModuleResolverImpl* resolver = |
| 107 ScriptModuleResolverImpl::Create(Modulator()); | 109 ScriptModuleResolverImpl::Create(Modulator()); |
| 108 V8TestingScope scope; | 110 V8TestingScope scope; |
| 109 | 111 |
| 110 ModuleScript* referrer_module_script = CreateReferrerModuleScript(scope); | 112 ModuleScript* referrer_module_script = |
| 113 CreateReferrerModuleScript(modulator_, scope); |
| 111 resolver->RegisterModuleScript(referrer_module_script); | 114 resolver->RegisterModuleScript(referrer_module_script); |
| 112 | 115 |
| 113 ModuleScript* target_module_script = CreateTargetModuleScript(scope); | 116 ModuleScript* target_module_script = |
| 117 CreateTargetModuleScript(modulator_, scope); |
| 114 Modulator()->SetModuleScript(target_module_script); | 118 Modulator()->SetModuleScript(target_module_script); |
| 115 | 119 |
| 116 ScriptModule resolved = | 120 ScriptModule resolved = |
| 117 resolver->Resolve("./target.js", referrer_module_script->Record(), | 121 resolver->Resolve("./target.js", referrer_module_script->Record(), |
| 118 scope.GetExceptionState()); | 122 scope.GetExceptionState()); |
| 119 EXPECT_FALSE(scope.GetExceptionState().HadException()); | 123 EXPECT_FALSE(scope.GetExceptionState().HadException()); |
| 120 EXPECT_EQ(resolved, target_module_script->Record()); | 124 EXPECT_EQ(resolved, target_module_script->Record()); |
| 121 EXPECT_EQ(1, modulator_->GetFetchedModuleScriptCalled()); | 125 EXPECT_EQ(1, modulator_->GetFetchedModuleScriptCalled()); |
| 122 EXPECT_EQ(modulator_->FetchedUrl(), target_module_script->BaseURL()) | 126 EXPECT_EQ(modulator_->FetchedUrl(), target_module_script->BaseURL()) |
| 123 << "Unexpectedly fetched URL: " << modulator_->FetchedUrl().GetString(); | 127 << "Unexpectedly fetched URL: " << modulator_->FetchedUrl().GetString(); |
| 124 } | 128 } |
| 125 | 129 |
| 126 TEST_F(ScriptModuleResolverImplTest, resolveInvalidModuleSpecifier) { | 130 TEST_F(ScriptModuleResolverImplTest, resolveInvalidModuleSpecifier) { |
| 127 ScriptModuleResolverImpl* resolver = | 131 ScriptModuleResolverImpl* resolver = |
| 128 ScriptModuleResolverImpl::Create(Modulator()); | 132 ScriptModuleResolverImpl::Create(Modulator()); |
| 129 V8TestingScope scope; | 133 V8TestingScope scope; |
| 130 | 134 |
| 131 ModuleScript* referrer_module_script = CreateReferrerModuleScript(scope); | 135 ModuleScript* referrer_module_script = |
| 136 CreateReferrerModuleScript(modulator_, scope); |
| 132 resolver->RegisterModuleScript(referrer_module_script); | 137 resolver->RegisterModuleScript(referrer_module_script); |
| 133 | 138 |
| 134 ModuleScript* target_module_script = CreateTargetModuleScript(scope); | 139 ModuleScript* target_module_script = |
| 140 CreateTargetModuleScript(modulator_, scope); |
| 135 Modulator()->SetModuleScript(target_module_script); | 141 Modulator()->SetModuleScript(target_module_script); |
| 136 | 142 |
| 137 ScriptModule resolved = resolver->Resolve( | 143 ScriptModule resolved = resolver->Resolve( |
| 138 "invalid", referrer_module_script->Record(), scope.GetExceptionState()); | 144 "invalid", referrer_module_script->Record(), scope.GetExceptionState()); |
| 139 EXPECT_TRUE(scope.GetExceptionState().HadException()); | 145 EXPECT_TRUE(scope.GetExceptionState().HadException()); |
| 140 EXPECT_EQ(kV8TypeError, scope.GetExceptionState().Code()); | 146 EXPECT_EQ(kV8TypeError, scope.GetExceptionState().Code()); |
| 141 EXPECT_TRUE(resolved.IsNull()); | 147 EXPECT_TRUE(resolved.IsNull()); |
| 142 EXPECT_EQ(0, modulator_->GetFetchedModuleScriptCalled()); | 148 EXPECT_EQ(0, modulator_->GetFetchedModuleScriptCalled()); |
| 143 } | 149 } |
| 144 | 150 |
| 145 TEST_F(ScriptModuleResolverImplTest, resolveLoadFailedModule) { | 151 TEST_F(ScriptModuleResolverImplTest, resolveLoadFailedModule) { |
| 146 ScriptModuleResolverImpl* resolver = | 152 ScriptModuleResolverImpl* resolver = |
| 147 ScriptModuleResolverImpl::Create(Modulator()); | 153 ScriptModuleResolverImpl::Create(Modulator()); |
| 148 V8TestingScope scope; | 154 V8TestingScope scope; |
| 149 | 155 |
| 150 ModuleScript* referrer_module_script = CreateReferrerModuleScript(scope); | 156 ModuleScript* referrer_module_script = |
| 157 CreateReferrerModuleScript(modulator_, scope); |
| 151 resolver->RegisterModuleScript(referrer_module_script); | 158 resolver->RegisterModuleScript(referrer_module_script); |
| 152 | 159 |
| 153 ModuleScript* target_module_script = CreateTargetModuleScript(scope); | 160 ModuleScript* target_module_script = |
| 161 CreateTargetModuleScript(modulator_, scope); |
| 154 // Set Modulator::getFetchedModuleScript to return nullptr, which represents | 162 // Set Modulator::getFetchedModuleScript to return nullptr, which represents |
| 155 // that the target module failed to load. | 163 // that the target module failed to load. |
| 156 Modulator()->SetModuleScript(nullptr); | 164 Modulator()->SetModuleScript(nullptr); |
| 157 | 165 |
| 158 ScriptModule resolved = | 166 ScriptModule resolved = |
| 159 resolver->Resolve("./target.js", referrer_module_script->Record(), | 167 resolver->Resolve("./target.js", referrer_module_script->Record(), |
| 160 scope.GetExceptionState()); | 168 scope.GetExceptionState()); |
| 161 EXPECT_TRUE(scope.GetExceptionState().HadException()); | 169 EXPECT_TRUE(scope.GetExceptionState().HadException()); |
| 162 EXPECT_EQ(kV8TypeError, scope.GetExceptionState().Code()); | 170 EXPECT_EQ(kV8TypeError, scope.GetExceptionState().Code()); |
| 163 EXPECT_TRUE(resolved.IsNull()); | 171 EXPECT_TRUE(resolved.IsNull()); |
| 164 EXPECT_EQ(1, modulator_->GetFetchedModuleScriptCalled()); | 172 EXPECT_EQ(1, modulator_->GetFetchedModuleScriptCalled()); |
| 165 EXPECT_EQ(modulator_->FetchedUrl(), target_module_script->BaseURL()) | 173 EXPECT_EQ(modulator_->FetchedUrl(), target_module_script->BaseURL()) |
| 166 << "Unexpectedly fetched URL: " << modulator_->FetchedUrl().GetString(); | 174 << "Unexpectedly fetched URL: " << modulator_->FetchedUrl().GetString(); |
| 167 } | 175 } |
| 168 | 176 |
| 169 } // namespace blink | 177 } // namespace blink |
| OLD | NEW |