Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1296)

Side by Side Diff: third_party/WebKit/Source/core/loader/modulescript/ModuleTreeLinkerTest.cpp

Issue 2839563002: [ES6 modules] Return previous error when an instantiation is reattempt. (Closed)
Patch Set: comments Created 3 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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/loader/modulescript/ModuleTreeLinker.h" 5 #include "core/loader/modulescript/ModuleTreeLinker.h"
6 6
7 #include "bindings/core/v8/ScriptModule.h" 7 #include "bindings/core/v8/ScriptModule.h"
8 #include "bindings/core/v8/ScriptState.h" 8 #include "bindings/core/v8/ScriptState.h"
9 #include "bindings/core/v8/V8BindingForCore.h" 9 #include "bindings/core/v8/V8BindingForCore.h"
10 #include "bindings/core/v8/V8BindingForTesting.h" 10 #include "bindings/core/v8/V8BindingForTesting.h"
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
42 } 42 }
43 43
44 bool WasNotifyFinished() const { return was_notify_finished_; } 44 bool WasNotifyFinished() const { return was_notify_finished_; }
45 ModuleScript* GetModuleScript() { return module_script_; } 45 ModuleScript* GetModuleScript() { return module_script_; }
46 46
47 private: 47 private:
48 bool was_notify_finished_ = false; 48 bool was_notify_finished_ = false;
49 Member<ModuleScript> module_script_; 49 Member<ModuleScript> module_script_;
50 }; 50 };
51 51
52 } // namespace
53
52 class ModuleTreeLinkerTestModulator final : public DummyModulator { 54 class ModuleTreeLinkerTestModulator final : public DummyModulator {
53 public: 55 public:
54 ModuleTreeLinkerTestModulator(RefPtr<ScriptState> script_state) 56 ModuleTreeLinkerTestModulator(RefPtr<ScriptState> script_state)
55 : script_state_(std::move(script_state)) {} 57 : script_state_(std::move(script_state)) {}
56 ~ModuleTreeLinkerTestModulator() override {} 58 ~ModuleTreeLinkerTestModulator() override {}
57 59
58 DECLARE_TRACE(); 60 DECLARE_TRACE();
59 61
60 enum class ResolveResult { kFailure, kSuccess }; 62 enum class ResolveResult { kFailure, kSuccess };
61 63
62 // Resolve last |Modulator::FetchSingle()| call. 64 // Resolve last |Modulator::FetchSingle()| call.
63 ModuleScript* ResolveSingleModuleScriptFetch( 65 ModuleScript* ResolveSingleModuleScriptFetch(
64 const KURL& url, 66 const KURL& url,
65 const Vector<String>& dependency_module_requests) { 67 const Vector<String>& dependency_module_requests,
68 ModuleInstantiationState state) {
66 ScriptState::Scope scope(script_state_.Get()); 69 ScriptState::Scope scope(script_state_.Get());
67 70
68 StringBuilder source_text; 71 StringBuilder source_text;
69 for (const auto& request : dependency_module_requests) { 72 for (const auto& request : dependency_module_requests) {
70 source_text.Append("import '"); 73 source_text.Append("import '");
71 source_text.Append(request); 74 source_text.Append(request);
72 source_text.Append("';\n"); 75 source_text.Append("';\n");
73 } 76 }
74 source_text.Append("export default 'grapes';"); 77 source_text.Append("export default 'grapes';");
75 78
76 ScriptModule script_module = ScriptModule::Compile( 79 ScriptModule script_module = ScriptModule::Compile(
77 script_state_->GetIsolate(), source_text.ToString(), url.GetString(), 80 script_state_->GetIsolate(), source_text.ToString(), url.GetString(),
78 kSharableCrossOrigin); 81 kSharableCrossOrigin);
79 ModuleScript* module_script = 82 ModuleScript* module_script =
80 ModuleScript::Create(this, script_module, url, "", kParserInserted, 83 ModuleScript::Create(this, script_module, url, "", kParserInserted,
81 WebURLRequest::kFetchCredentialsModeOmit); 84 WebURLRequest::kFetchCredentialsModeOmit);
82 auto result_request = dependency_module_requests_map_.insert( 85 auto result_request = dependency_module_requests_map_.insert(
83 script_module, dependency_module_requests); 86 script_module, dependency_module_requests);
84 EXPECT_TRUE(result_request.is_new_entry); 87 EXPECT_TRUE(result_request.is_new_entry);
85 auto result_map = module_map_.insert(url, module_script); 88 auto result_map = module_map_.insert(url, module_script);
86 EXPECT_TRUE(result_map.is_new_entry); 89 EXPECT_TRUE(result_map.is_new_entry);
87 90
91 if (state == ModuleInstantiationState::kErrored) {
92 v8::Local<v8::Value> error = V8ThrowException::CreateError(
93 script_state_->GetIsolate(), "Instantiation failure.");
94 module_script->SetInstantiationErrorAndClearRecord(
95 ScriptValue(script_state_.Get(), error));
96 }
97
88 EXPECT_EQ(url, pending_request_url_); 98 EXPECT_EQ(url, pending_request_url_);
99 EXPECT_EQ(state, module_script->InstantiationState());
89 EXPECT_TRUE(pending_client_); 100 EXPECT_TRUE(pending_client_);
90 pending_client_->NotifyModuleLoadFinished(module_script); 101 pending_client_->NotifyModuleLoadFinished(module_script);
91 pending_client_.Clear(); 102 pending_client_.Clear();
92 103
93 return module_script; 104 return module_script;
94 } 105 }
95 106
96 // Get AncestorList specified in |Modulator::FetchTreeInternal()| call for 107 // Get AncestorList specified in |Modulator::FetchTreeInternal()| call for
97 // request matching |url|. 108 // request matching |url|.
98 AncestorList GetAncestorListForTreeFetch(const KURL& url) const { 109 AncestorList GetAncestorListForTreeFetch(const KURL& url) const {
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after
169 ScriptValue InstantiateModule(ScriptModule) override { 180 ScriptValue InstantiateModule(ScriptModule) override {
170 if (instantiate_should_fail_) { 181 if (instantiate_should_fail_) {
171 ScriptState::Scope scope(script_state_.Get()); 182 ScriptState::Scope scope(script_state_.Get());
172 v8::Local<v8::Value> error = V8ThrowException::CreateError( 183 v8::Local<v8::Value> error = V8ThrowException::CreateError(
173 script_state_->GetIsolate(), "Instantiation failure."); 184 script_state_->GetIsolate(), "Instantiation failure.");
174 return ScriptValue(script_state_.Get(), error); 185 return ScriptValue(script_state_.Get(), error);
175 } 186 }
176 return ScriptValue(); 187 return ScriptValue();
177 } 188 }
178 189
190 ScriptValue GetInstantiationError(
191 const ModuleScript* module_script) override {
192 ScriptState::Scope scope(script_state_.Get());
193 return ScriptValue(script_state_.Get(),
194 module_script->CreateInstantiationErrorInternal(
195 script_state_->GetIsolate()));
196 }
197
179 Vector<String> ModuleRequestsFromScriptModule( 198 Vector<String> ModuleRequestsFromScriptModule(
180 ScriptModule script_module) override { 199 ScriptModule script_module) override {
200 if (script_module.IsNull())
201 return Vector<String>();
202
181 const auto& it = dependency_module_requests_map_.find(script_module); 203 const auto& it = dependency_module_requests_map_.find(script_module);
182 if (it == dependency_module_requests_map_.end()) 204 if (it == dependency_module_requests_map_.end())
183 return Vector<String>(); 205 return Vector<String>();
184 206
185 return it->value; 207 return it->value;
186 } 208 }
187 209
188 RefPtr<ScriptState> script_state_; 210 RefPtr<ScriptState> script_state_;
189 KURL pending_request_url_; 211 KURL pending_request_url_;
190 Member<SingleModuleClient> pending_client_; 212 Member<SingleModuleClient> pending_client_;
191 HashMap<ScriptModule, Vector<String>> dependency_module_requests_map_; 213 HashMap<ScriptModule, Vector<String>> dependency_module_requests_map_;
192 HeapHashMap<KURL, Member<ModuleScript>> module_map_; 214 HeapHashMap<KURL, Member<ModuleScript>> module_map_;
193 HeapHashMap<KURL, Member<ModuleTreeClient>> pending_tree_client_map_; 215 HeapHashMap<KURL, Member<ModuleTreeClient>> pending_tree_client_map_;
194 HashMap<KURL, AncestorList> pending_tree_ancestor_list_; 216 HashMap<KURL, AncestorList> pending_tree_ancestor_list_;
195 bool instantiate_should_fail_ = false; 217 bool instantiate_should_fail_ = false;
196 }; 218 };
197 219
198 DEFINE_TRACE(ModuleTreeLinkerTestModulator) { 220 DEFINE_TRACE(ModuleTreeLinkerTestModulator) {
199 visitor->Trace(pending_client_); 221 visitor->Trace(pending_client_);
200 visitor->Trace(module_map_); 222 visitor->Trace(module_map_);
201 visitor->Trace(pending_tree_client_map_); 223 visitor->Trace(pending_tree_client_map_);
202 DummyModulator::Trace(visitor); 224 DummyModulator::Trace(visitor);
203 } 225 }
204 226
205 } // namespace
206
207 class ModuleTreeLinkerTest : public ::testing::Test { 227 class ModuleTreeLinkerTest : public ::testing::Test {
208 DISALLOW_COPY_AND_ASSIGN(ModuleTreeLinkerTest); 228 DISALLOW_COPY_AND_ASSIGN(ModuleTreeLinkerTest);
209 229
210 public: 230 public:
211 ModuleTreeLinkerTest() = default; 231 ModuleTreeLinkerTest() = default;
212 void SetUp() override; 232 void SetUp() override;
213 233
214 ModuleTreeLinkerTestModulator* GetModulator() { return modulator_.Get(); } 234 ModuleTreeLinkerTestModulator* GetModulator() { return modulator_.Get(); }
215 235
216 protected: 236 protected:
(...skipping 16 matching lines...) Expand all
233 url, String(), kParserInserted, WebURLRequest::kFetchCredentialsModeOmit); 253 url, String(), kParserInserted, WebURLRequest::kFetchCredentialsModeOmit);
234 TestModuleTreeClient* client = new TestModuleTreeClient; 254 TestModuleTreeClient* client = new TestModuleTreeClient;
235 registry->Fetch(module_request, AncestorList(), 255 registry->Fetch(module_request, AncestorList(),
236 ModuleGraphLevel::kTopLevelModuleFetch, GetModulator(), 256 ModuleGraphLevel::kTopLevelModuleFetch, GetModulator(),
237 client); 257 client);
238 258
239 EXPECT_FALSE(client->WasNotifyFinished()) 259 EXPECT_FALSE(client->WasNotifyFinished())
240 << "ModuleTreeLinker should always finish asynchronously."; 260 << "ModuleTreeLinker should always finish asynchronously.";
241 EXPECT_FALSE(client->GetModuleScript()); 261 EXPECT_FALSE(client->GetModuleScript());
242 262
243 GetModulator()->ResolveSingleModuleScriptFetch(url, {}); 263 GetModulator()->ResolveSingleModuleScriptFetch(
264 url, {}, ModuleInstantiationState::kUninstantiated);
244 EXPECT_TRUE(client->WasNotifyFinished()); 265 EXPECT_TRUE(client->WasNotifyFinished());
245 ASSERT_TRUE(client->GetModuleScript()); 266 ASSERT_TRUE(client->GetModuleScript());
246 EXPECT_EQ(client->GetModuleScript()->InstantiationState(), 267 EXPECT_EQ(client->GetModuleScript()->InstantiationState(),
247 ModuleInstantiationState::kInstantiated); 268 ModuleInstantiationState::kInstantiated);
248 } 269 }
249 270
250 TEST_F(ModuleTreeLinkerTest, FetchTreeInstantiationFailure) { 271 TEST_F(ModuleTreeLinkerTest, FetchTreeInstantiationFailure) {
251 GetModulator()->SetInstantiateShouldFail(true); 272 GetModulator()->SetInstantiateShouldFail(true);
252 273
253 ModuleTreeLinkerRegistry* registry = ModuleTreeLinkerRegistry::Create(); 274 ModuleTreeLinkerRegistry* registry = ModuleTreeLinkerRegistry::Create();
254 275
255 KURL url(kParsedURLString, "http://example.com/root.js"); 276 KURL url(kParsedURLString, "http://example.com/root.js");
256 ModuleScriptFetchRequest module_request( 277 ModuleScriptFetchRequest module_request(
257 url, String(), kParserInserted, WebURLRequest::kFetchCredentialsModeOmit); 278 url, String(), kParserInserted, WebURLRequest::kFetchCredentialsModeOmit);
258 TestModuleTreeClient* client = new TestModuleTreeClient; 279 TestModuleTreeClient* client = new TestModuleTreeClient;
259 registry->Fetch(module_request, AncestorList(), 280 registry->Fetch(module_request, AncestorList(),
260 ModuleGraphLevel::kTopLevelModuleFetch, GetModulator(), 281 ModuleGraphLevel::kTopLevelModuleFetch, GetModulator(),
261 client); 282 client);
262 283
263 EXPECT_FALSE(client->WasNotifyFinished()) 284 EXPECT_FALSE(client->WasNotifyFinished())
264 << "ModuleTreeLinker should always finish asynchronously."; 285 << "ModuleTreeLinker should always finish asynchronously.";
265 EXPECT_FALSE(client->GetModuleScript()); 286 EXPECT_FALSE(client->GetModuleScript());
266 287
267 GetModulator()->ResolveSingleModuleScriptFetch(url, {}); 288 GetModulator()->ResolveSingleModuleScriptFetch(
289 url, {}, ModuleInstantiationState::kUninstantiated);
290
291 // Modulator::InstantiateModule() fails here, as
292 // we SetInstantiateShouldFail(true) earlier.
293
268 EXPECT_TRUE(client->WasNotifyFinished()); 294 EXPECT_TRUE(client->WasNotifyFinished());
269 ASSERT_TRUE(client->GetModuleScript()); 295 ASSERT_TRUE(client->GetModuleScript());
270 EXPECT_EQ(client->GetModuleScript()->InstantiationState(), 296 EXPECT_EQ(client->GetModuleScript()->InstantiationState(),
271 ModuleInstantiationState::kErrored); 297 ModuleInstantiationState::kErrored);
272 } 298 }
273 299
300 TEST_F(ModuleTreeLinkerTest, FetchTreePreviousInstantiationFailure) {
301 ModuleTreeLinkerRegistry* registry = ModuleTreeLinkerRegistry::Create();
302
303 KURL url(kParsedURLString, "http://example.com/root.js");
304 ModuleScriptFetchRequest module_request(
305 url, String(), kParserInserted, WebURLRequest::kFetchCredentialsModeOmit);
306 TestModuleTreeClient* client = new TestModuleTreeClient;
307 registry->Fetch(module_request, AncestorList(),
308 ModuleGraphLevel::kTopLevelModuleFetch, GetModulator(),
309 client);
310
311 EXPECT_FALSE(client->WasNotifyFinished())
312 << "ModuleTreeLinker should always finish asynchronously.";
313 EXPECT_FALSE(client->GetModuleScript());
314
315 // This emulates "previous instantiation failure", where
316 // Modulator::FetchSingle resolves w/ "errored" module script.
317 GetModulator()->ResolveSingleModuleScriptFetch(
318 url, {}, ModuleInstantiationState::kErrored);
319 EXPECT_TRUE(client->WasNotifyFinished());
320 ASSERT_TRUE(client->GetModuleScript());
321 EXPECT_EQ(ModuleInstantiationState::kErrored,
322 client->GetModuleScript()->InstantiationState());
323 }
324
274 TEST_F(ModuleTreeLinkerTest, FetchTreeWithSingleDependency) { 325 TEST_F(ModuleTreeLinkerTest, FetchTreeWithSingleDependency) {
275 ModuleTreeLinkerRegistry* registry = ModuleTreeLinkerRegistry::Create(); 326 ModuleTreeLinkerRegistry* registry = ModuleTreeLinkerRegistry::Create();
276 327
277 KURL url(kParsedURLString, "http://example.com/root.js"); 328 KURL url(kParsedURLString, "http://example.com/root.js");
278 ModuleScriptFetchRequest module_request( 329 ModuleScriptFetchRequest module_request(
279 url, String(), kParserInserted, WebURLRequest::kFetchCredentialsModeOmit); 330 url, String(), kParserInserted, WebURLRequest::kFetchCredentialsModeOmit);
280 TestModuleTreeClient* client = new TestModuleTreeClient; 331 TestModuleTreeClient* client = new TestModuleTreeClient;
281 registry->Fetch(module_request, AncestorList(), 332 registry->Fetch(module_request, AncestorList(),
282 ModuleGraphLevel::kTopLevelModuleFetch, GetModulator(), 333 ModuleGraphLevel::kTopLevelModuleFetch, GetModulator(),
283 client); 334 client);
284 335
285 EXPECT_FALSE(client->WasNotifyFinished()) 336 EXPECT_FALSE(client->WasNotifyFinished())
286 << "ModuleTreeLinker should always finish asynchronously."; 337 << "ModuleTreeLinker should always finish asynchronously.";
287 EXPECT_FALSE(client->GetModuleScript()); 338 EXPECT_FALSE(client->GetModuleScript());
288 339
289 GetModulator()->ResolveSingleModuleScriptFetch(url, {"./dep1.js"}); 340 GetModulator()->ResolveSingleModuleScriptFetch(
341 url, {"./dep1.js"}, ModuleInstantiationState::kUninstantiated);
290 EXPECT_FALSE(client->WasNotifyFinished()); 342 EXPECT_FALSE(client->WasNotifyFinished());
291 343
292 KURL url_dep1(kParsedURLString, "http://example.com/dep1.js"); 344 KURL url_dep1(kParsedURLString, "http://example.com/dep1.js");
293 auto ancestor_list = GetModulator()->GetAncestorListForTreeFetch(url_dep1); 345 auto ancestor_list = GetModulator()->GetAncestorListForTreeFetch(url_dep1);
294 EXPECT_EQ(1u, ancestor_list.size()); 346 EXPECT_EQ(1u, ancestor_list.size());
295 EXPECT_TRUE(ancestor_list.Contains( 347 EXPECT_TRUE(ancestor_list.Contains(
296 KURL(kParsedURLString, "http://example.com/root.js"))); 348 KURL(kParsedURLString, "http://example.com/root.js")));
297 349
298 GetModulator()->ResolveDependentTreeFetch( 350 GetModulator()->ResolveDependentTreeFetch(
299 url_dep1, ModuleTreeLinkerTestModulator::ResolveResult::kSuccess); 351 url_dep1, ModuleTreeLinkerTestModulator::ResolveResult::kSuccess);
(...skipping 13 matching lines...) Expand all
313 TestModuleTreeClient* client = new TestModuleTreeClient; 365 TestModuleTreeClient* client = new TestModuleTreeClient;
314 registry->Fetch(module_request, AncestorList(), 366 registry->Fetch(module_request, AncestorList(),
315 ModuleGraphLevel::kTopLevelModuleFetch, GetModulator(), 367 ModuleGraphLevel::kTopLevelModuleFetch, GetModulator(),
316 client); 368 client);
317 369
318 EXPECT_FALSE(client->WasNotifyFinished()) 370 EXPECT_FALSE(client->WasNotifyFinished())
319 << "ModuleTreeLinker should always finish asynchronously."; 371 << "ModuleTreeLinker should always finish asynchronously.";
320 EXPECT_FALSE(client->GetModuleScript()); 372 EXPECT_FALSE(client->GetModuleScript());
321 373
322 GetModulator()->ResolveSingleModuleScriptFetch( 374 GetModulator()->ResolveSingleModuleScriptFetch(
323 url, {"./dep1.js", "./dep2.js", "./dep3.js"}); 375 url, {"./dep1.js", "./dep2.js", "./dep3.js"},
376 ModuleInstantiationState::kUninstantiated);
324 EXPECT_FALSE(client->WasNotifyFinished()); 377 EXPECT_FALSE(client->WasNotifyFinished());
325 378
326 Vector<KURL> url_deps; 379 Vector<KURL> url_deps;
327 for (int i = 1; i <= 3; ++i) { 380 for (int i = 1; i <= 3; ++i) {
328 StringBuilder url_dep_str; 381 StringBuilder url_dep_str;
329 url_dep_str.Append("http://example.com/dep"); 382 url_dep_str.Append("http://example.com/dep");
330 url_dep_str.AppendNumber(i); 383 url_dep_str.AppendNumber(i);
331 url_dep_str.Append(".js"); 384 url_dep_str.Append(".js");
332 385
333 KURL url_dep(kParsedURLString, url_dep_str.ToString()); 386 KURL url_dep(kParsedURLString, url_dep_str.ToString());
(...skipping 29 matching lines...) Expand all
363 TestModuleTreeClient* client = new TestModuleTreeClient; 416 TestModuleTreeClient* client = new TestModuleTreeClient;
364 registry->Fetch(module_request, AncestorList(), 417 registry->Fetch(module_request, AncestorList(),
365 ModuleGraphLevel::kTopLevelModuleFetch, GetModulator(), 418 ModuleGraphLevel::kTopLevelModuleFetch, GetModulator(),
366 client); 419 client);
367 420
368 EXPECT_FALSE(client->WasNotifyFinished()) 421 EXPECT_FALSE(client->WasNotifyFinished())
369 << "ModuleTreeLinker should always finish asynchronously."; 422 << "ModuleTreeLinker should always finish asynchronously.";
370 EXPECT_FALSE(client->GetModuleScript()); 423 EXPECT_FALSE(client->GetModuleScript());
371 424
372 GetModulator()->ResolveSingleModuleScriptFetch( 425 GetModulator()->ResolveSingleModuleScriptFetch(
373 url, {"./dep1.js", "./dep2.js", "./dep3.js"}); 426 url, {"./dep1.js", "./dep2.js", "./dep3.js"},
427 ModuleInstantiationState::kUninstantiated);
374 EXPECT_FALSE(client->WasNotifyFinished()); 428 EXPECT_FALSE(client->WasNotifyFinished());
375 429
376 Vector<KURL> url_deps; 430 Vector<KURL> url_deps;
377 for (int i = 1; i <= 3; ++i) { 431 for (int i = 1; i <= 3; ++i) {
378 StringBuilder url_dep_str; 432 StringBuilder url_dep_str;
379 url_dep_str.Append("http://example.com/dep"); 433 url_dep_str.Append("http://example.com/dep");
380 url_dep_str.AppendNumber(i); 434 url_dep_str.AppendNumber(i);
381 url_dep_str.Append(".js"); 435 url_dep_str.Append(".js");
382 436
383 KURL url_dep(kParsedURLString, url_dep_str.ToString()); 437 KURL url_dep(kParsedURLString, url_dep_str.ToString());
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
422 TestModuleTreeClient* client = new TestModuleTreeClient; 476 TestModuleTreeClient* client = new TestModuleTreeClient;
423 registry->Fetch( 477 registry->Fetch(
424 module_request, 478 module_request,
425 AncestorList{KURL(kParsedURLString, "http://example.com/root.js")}, 479 AncestorList{KURL(kParsedURLString, "http://example.com/root.js")},
426 ModuleGraphLevel::kDependentModuleFetch, GetModulator(), client); 480 ModuleGraphLevel::kDependentModuleFetch, GetModulator(), client);
427 481
428 EXPECT_FALSE(client->WasNotifyFinished()) 482 EXPECT_FALSE(client->WasNotifyFinished())
429 << "ModuleTreeLinker should always finish asynchronously."; 483 << "ModuleTreeLinker should always finish asynchronously.";
430 EXPECT_FALSE(client->GetModuleScript()); 484 EXPECT_FALSE(client->GetModuleScript());
431 485
432 GetModulator()->ResolveSingleModuleScriptFetch(url, {"./depth2.js"}); 486 GetModulator()->ResolveSingleModuleScriptFetch(
487 url, {"./depth2.js"}, ModuleInstantiationState::kUninstantiated);
433 488
434 KURL url_dep2(kParsedURLString, "http://example.com/depth2.js"); 489 KURL url_dep2(kParsedURLString, "http://example.com/depth2.js");
435 auto ancestor_list = GetModulator()->GetAncestorListForTreeFetch(url_dep2); 490 auto ancestor_list = GetModulator()->GetAncestorListForTreeFetch(url_dep2);
436 EXPECT_EQ(2u, ancestor_list.size()); 491 EXPECT_EQ(2u, ancestor_list.size());
437 EXPECT_TRUE(ancestor_list.Contains( 492 EXPECT_TRUE(ancestor_list.Contains(
438 KURL(kParsedURLString, "http://example.com/root.js"))); 493 KURL(kParsedURLString, "http://example.com/root.js")));
439 EXPECT_TRUE(ancestor_list.Contains( 494 EXPECT_TRUE(ancestor_list.Contains(
440 KURL(kParsedURLString, "http://example.com/depth1.js"))); 495 KURL(kParsedURLString, "http://example.com/depth1.js")));
441 496
442 GetModulator()->ResolveDependentTreeFetch( 497 GetModulator()->ResolveDependentTreeFetch(
443 url_dep2, ModuleTreeLinkerTestModulator::ResolveResult::kSuccess); 498 url_dep2, ModuleTreeLinkerTestModulator::ResolveResult::kSuccess);
444 499
445 EXPECT_TRUE(client->WasNotifyFinished()); 500 EXPECT_TRUE(client->WasNotifyFinished());
446 ASSERT_TRUE(client->GetModuleScript()); 501 ASSERT_TRUE(client->GetModuleScript());
447 EXPECT_EQ(client->GetModuleScript()->InstantiationState(), 502 EXPECT_EQ(client->GetModuleScript()->InstantiationState(),
448 ModuleInstantiationState::kInstantiated); 503 ModuleInstantiationState::kInstantiated);
449 } 504 }
450 505
451 } // namespace blink 506 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698