| 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/Element.h" | 9 #include "core/dom/Element.h" |
| 10 #include "core/dom/ScriptLoader.h" | 10 #include "core/dom/ScriptLoader.h" |
| (...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 97 class MockPlatform : public Platform, private WebScheduler { | 97 class MockPlatform : public Platform, private WebScheduler { |
| 98 public: | 98 public: |
| 99 MockPlatform() | 99 MockPlatform() |
| 100 : m_mockWebThread(this) | 100 : m_mockWebThread(this) |
| 101 , m_mockWebTaskRunner(&m_tasks) | 101 , m_mockWebTaskRunner(&m_tasks) |
| 102 { | 102 { |
| 103 } | 103 } |
| 104 | 104 |
| 105 void cryptographicallyRandomValues(unsigned char* buffer, size_t length) ove
rride { } | 105 void cryptographicallyRandomValues(unsigned char* buffer, size_t length) ove
rride { } |
| 106 | 106 |
| 107 const unsigned char* getTraceCategoryEnabledFlag(const char* categoryName) o
verride |
| 108 { |
| 109 static const unsigned char tracingIsDisabled = 0; |
| 110 return &tracingIsDisabled; |
| 111 } |
| 112 |
| 107 WebThread* currentThread() override { return &m_mockWebThread; } | 113 WebThread* currentThread() override { return &m_mockWebThread; } |
| 108 | 114 |
| 109 WebTaskRunner* loadingTaskRunner() override | 115 WebTaskRunner* loadingTaskRunner() override |
| 110 { | 116 { |
| 111 return &m_mockWebTaskRunner; | 117 return &m_mockWebTaskRunner; |
| 112 } | 118 } |
| 113 | 119 |
| 114 WebTaskRunner* timerTaskRunner() override | 120 WebTaskRunner* timerTaskRunner() override |
| 115 { | 121 { |
| 116 ASSERT_NOT_REACHED(); | 122 ASSERT_NOT_REACHED(); |
| (...skipping 400 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 517 | 523 |
| 518 // At this moment all tasks can be already executed. Make sure that we do no
t crash here. | 524 // At this moment all tasks can be already executed. Make sure that we do no
t crash here. |
| 519 m_scriptRunner->notifyScriptReady(scriptLoader2.get(), ScriptRunner::IN_ORDE
R_EXECUTION); | 525 m_scriptRunner->notifyScriptReady(scriptLoader2.get(), ScriptRunner::IN_ORDE
R_EXECUTION); |
| 520 m_platform.runAllTasks(); | 526 m_platform.runAllTasks(); |
| 521 | 527 |
| 522 EXPECT_THAT(m_order, ElementsAre(1, 2)); | 528 EXPECT_THAT(m_order, ElementsAre(1, 2)); |
| 523 } | 529 } |
| 524 | 530 |
| 525 TEST_F(ScriptRunnerTest, TasksWithDeadScriptRunner) | 531 TEST_F(ScriptRunnerTest, TasksWithDeadScriptRunner) |
| 526 { | 532 { |
| 527 OwnPtrWillBeRawPtr<MockScriptLoader> scriptLoader1 = MockScriptLoader::creat
e(m_element.get()); | 533 OwnPtrWillBePersistent<MockScriptLoader> scriptLoader1 = MockScriptLoader::c
reate(m_element.get()); |
| 528 OwnPtrWillBeRawPtr<MockScriptLoader> scriptLoader2 = MockScriptLoader::creat
e(m_element.get()); | 534 OwnPtrWillBePersistent<MockScriptLoader> scriptLoader2 = MockScriptLoader::c
reate(m_element.get()); |
| 529 | 535 |
| 530 EXPECT_CALL(*scriptLoader1, isReady()).WillRepeatedly(Return(true)); | 536 EXPECT_CALL(*scriptLoader1, isReady()).WillRepeatedly(Return(true)); |
| 531 EXPECT_CALL(*scriptLoader2, isReady()).WillRepeatedly(Return(true)); | 537 EXPECT_CALL(*scriptLoader2, isReady()).WillRepeatedly(Return(true)); |
| 532 | 538 |
| 533 m_scriptRunner->queueScriptForExecution(scriptLoader1.get(), ScriptRunner::A
SYNC_EXECUTION); | 539 m_scriptRunner->queueScriptForExecution(scriptLoader1.get(), ScriptRunner::A
SYNC_EXECUTION); |
| 534 m_scriptRunner->queueScriptForExecution(scriptLoader2.get(), ScriptRunner::A
SYNC_EXECUTION); | 540 m_scriptRunner->queueScriptForExecution(scriptLoader2.get(), ScriptRunner::A
SYNC_EXECUTION); |
| 535 | 541 |
| 536 m_scriptRunner->notifyScriptReady(scriptLoader1.get(), ScriptRunner::ASYNC_E
XECUTION); | 542 m_scriptRunner->notifyScriptReady(scriptLoader1.get(), ScriptRunner::ASYNC_E
XECUTION); |
| 537 m_scriptRunner->notifyScriptReady(scriptLoader2.get(), ScriptRunner::ASYNC_E
XECUTION); | 543 m_scriptRunner->notifyScriptReady(scriptLoader2.get(), ScriptRunner::ASYNC_E
XECUTION); |
| 538 | 544 |
| 539 m_scriptRunner.release(); | 545 m_scriptRunner.release(); |
| 540 | 546 |
| 547 #if ENABLE(OILPAN) |
| 548 Heap::collectAllGarbage(); |
| 549 #endif |
| 550 |
| 541 // m_scriptRunner is gone. We need to make sure that ScriptRunner::Task do n
ot access dead object. | 551 // m_scriptRunner is gone. We need to make sure that ScriptRunner::Task do n
ot access dead object. |
| 542 EXPECT_CALL(*scriptLoader1, execute()).Times(0); | 552 EXPECT_CALL(*scriptLoader1, execute()).Times(0); |
| 543 EXPECT_CALL(*scriptLoader2, execute()).Times(0); | 553 EXPECT_CALL(*scriptLoader2, execute()).Times(0); |
| 544 | 554 |
| 545 m_platform.runAllTasks(); | 555 m_platform.runAllTasks(); |
| 546 } | 556 } |
| 547 | 557 |
| 548 } // namespace blink | 558 } // namespace blink |
| OLD | NEW |