OLD | NEW |
1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 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 "config.h" | 5 #include "config.h" |
6 #include "core/dom/ScriptRunner.h" | 6 #include "core/dom/ScriptRunner.h" |
7 | 7 |
8 #include "core/dom/Document.h" | 8 #include "core/dom/Document.h" |
9 #include "core/dom/ScriptLoader.h" | 9 #include "core/dom/ScriptLoader.h" |
10 #include "platform/heap/Handle.h" | 10 #include "platform/heap/Handle.h" |
(...skipping 364 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
375 EXPECT_THAT(m_order, ElementsAre(1)); | 375 EXPECT_THAT(m_order, ElementsAre(1)); |
376 | 376 |
377 // Make sure the interrupted tasks are executed next 'tick'. | 377 // Make sure the interrupted tasks are executed next 'tick'. |
378 m_platform.setShouldYield(false); | 378 m_platform.setShouldYield(false); |
379 m_platform.runSingleTask(); | 379 m_platform.runSingleTask(); |
380 EXPECT_THAT(m_order, ElementsAre(1, 2, 3)); | 380 EXPECT_THAT(m_order, ElementsAre(1, 2, 3)); |
381 } | 381 } |
382 | 382 |
383 TEST_F(ScriptRunnerTest, QueueReentrantScript_ManyAsyncScripts) | 383 TEST_F(ScriptRunnerTest, QueueReentrantScript_ManyAsyncScripts) |
384 { | 384 { |
385 OwnPtr<MockScriptLoader> scriptLoaders[20]; | 385 const int loaderCount = 20; |
386 for (int i = 0; i < 20; i++) { | 386 OwnPtrWillBeRawPtr<MockScriptLoader> scriptLoaders[loaderCount]; |
387 scriptLoaders[i] = adoptPtr(new MockScriptLoader(m_element.get())); | 387 for (int i = 0; i < loaderCount; i++) |
| 388 scriptLoaders[i] = nullptr; |
| 389 |
| 390 for (int i = 0; i < loaderCount; i++) { |
| 391 scriptLoaders[i] = adoptPtrWillBeNoop(new MockScriptLoader(m_element.get
())); |
388 EXPECT_CALL(*scriptLoaders[i], isReady()).WillRepeatedly(Return(true)); | 392 EXPECT_CALL(*scriptLoaders[i], isReady()).WillRepeatedly(Return(true)); |
389 | 393 |
390 m_scriptRunner->queueScriptForExecution(scriptLoaders[i].get(), ScriptRu
nner::ASYNC_EXECUTION); | 394 m_scriptRunner->queueScriptForExecution(scriptLoaders[i].get(), ScriptRu
nner::ASYNC_EXECUTION); |
391 | 395 |
392 if (i > 0) { | 396 if (i > 0) { |
393 EXPECT_CALL(*scriptLoaders[i], execute()).WillOnce(Invoke([this, i]
{ | 397 EXPECT_CALL(*scriptLoaders[i], execute()).WillOnce(Invoke([this, i]
{ |
394 m_order.push_back(i); | 398 m_order.push_back(i); |
395 })); | 399 })); |
396 } | 400 } |
397 } | 401 } |
398 | 402 |
399 m_scriptRunner->notifyScriptReady(scriptLoaders[0].get(), ScriptRunner::ASYN
C_EXECUTION); | 403 m_scriptRunner->notifyScriptReady(scriptLoaders[0].get(), ScriptRunner::ASYN
C_EXECUTION); |
400 m_scriptRunner->notifyScriptReady(scriptLoaders[1].get(), ScriptRunner::ASYN
C_EXECUTION); | 404 m_scriptRunner->notifyScriptReady(scriptLoaders[1].get(), ScriptRunner::ASYN
C_EXECUTION); |
401 m_scriptRunner->resume(); | 405 m_scriptRunner->resume(); |
402 | 406 |
403 EXPECT_CALL(*scriptLoaders[0], execute()).WillOnce(Invoke([&scriptLoaders, t
his] { | 407 EXPECT_CALL(*scriptLoaders[0], execute()).WillOnce(Invoke([&scriptLoaders, t
his] { |
404 for (int i = 2; i < 20; i++) | 408 for (int i = 2; i < loaderCount; i++) |
405 m_scriptRunner->notifyScriptReady(scriptLoaders[i].get(), ScriptRunn
er::ASYNC_EXECUTION); | 409 m_scriptRunner->notifyScriptReady(scriptLoaders[i].get(), ScriptRunn
er::ASYNC_EXECUTION); |
406 m_scriptRunner->resume(); | 410 m_scriptRunner->resume(); |
407 m_order.push_back(0); | 411 m_order.push_back(0); |
408 })); | 412 })); |
409 | 413 |
410 m_platform.runAllTasks(); | 414 m_platform.runAllTasks(); |
411 | 415 |
412 int expected[] = { | 416 int expected[] = { |
413 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19 | 417 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19 |
414 }; | 418 }; |
(...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
506 testing::Mock::VerifyAndClear(&scriptLoader2); | 510 testing::Mock::VerifyAndClear(&scriptLoader2); |
507 testing::Mock::VerifyAndClear(&scriptLoader3); | 511 testing::Mock::VerifyAndClear(&scriptLoader3); |
508 EXPECT_CALL(scriptLoader2, execute()).Times(1); | 512 EXPECT_CALL(scriptLoader2, execute()).Times(1); |
509 EXPECT_CALL(scriptLoader3, execute()).Times(1); | 513 EXPECT_CALL(scriptLoader3, execute()).Times(1); |
510 EXPECT_CALL(scriptLoader2, isReady()).WillRepeatedly(Return(true)); | 514 EXPECT_CALL(scriptLoader2, isReady()).WillRepeatedly(Return(true)); |
511 EXPECT_CALL(scriptLoader3, isReady()).WillRepeatedly(Return(true)); | 515 EXPECT_CALL(scriptLoader3, isReady()).WillRepeatedly(Return(true)); |
512 m_platform.runAllTasks(); | 516 m_platform.runAllTasks(); |
513 } | 517 } |
514 | 518 |
515 } // namespace blink | 519 } // namespace blink |
OLD | NEW |