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 |