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

Side by Side Diff: third_party/WebKit/Source/core/dom/ScriptRunnerTest.cpp

Issue 1686483002: Oilpan: Remove most WillBe types from the code base (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 8 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 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 "core/dom/ScriptRunner.h" 5 #include "core/dom/ScriptRunner.h"
6 6
7 #include "core/dom/Document.h" 7 #include "core/dom/Document.h"
8 #include "core/dom/Element.h" 8 #include "core/dom/Element.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"
11 #include "platform/scheduler/CancellableTaskFactory.h" 11 #include "platform/scheduler/CancellableTaskFactory.h"
12 #include "platform/testing/TestingPlatformSupport.h" 12 #include "platform/testing/TestingPlatformSupport.h"
13 #include "public/platform/Platform.h" 13 #include "public/platform/Platform.h"
14 #include "public/platform/WebViewScheduler.h" 14 #include "public/platform/WebViewScheduler.h"
15 #include "testing/gmock/include/gmock/gmock.h" 15 #include "testing/gmock/include/gmock/gmock.h"
16 #include "testing/gtest/include/gtest/gtest.h" 16 #include "testing/gtest/include/gtest/gtest.h"
17 17
18 using ::testing::Invoke; 18 using ::testing::Invoke;
19 using ::testing::ElementsAre; 19 using ::testing::ElementsAre;
20 using ::testing::Return; 20 using ::testing::Return;
21 using ::testing::WhenSorted; 21 using ::testing::WhenSorted;
22 using ::testing::ElementsAreArray; 22 using ::testing::ElementsAreArray;
23 23
24 namespace blink { 24 namespace blink {
25 25
26 class MockScriptLoader final : public ScriptLoader { 26 class MockScriptLoader final : public ScriptLoader {
27 public: 27 public:
28 static PassOwnPtrWillBeRawPtr<MockScriptLoader> create(Element* element) 28 static RawPtr<MockScriptLoader> create(Element* element)
29 { 29 {
30 return adoptPtrWillBeNoop(new MockScriptLoader(element)); 30 return new MockScriptLoader(element);
31 } 31 }
32 ~MockScriptLoader() override { } 32 ~MockScriptLoader() override { }
33 33
34 MOCK_METHOD0(execute, void()); 34 MOCK_METHOD0(execute, void());
35 MOCK_CONST_METHOD0(isReady, bool()); 35 MOCK_CONST_METHOD0(isReady, bool());
36 private: 36 private:
37 explicit MockScriptLoader(Element* element) : ScriptLoader(element, false, f alse) 37 explicit MockScriptLoader(Element* element) : ScriptLoader(element, false, f alse)
38 { 38 {
39 } 39 }
40 }; 40 };
(...skipping 12 matching lines...) Expand all
53 // Platform::current()->currentThread()->scheduler()->loadingTaskRunner( ) 53 // Platform::current()->currentThread()->scheduler()->loadingTaskRunner( )
54 // to be initialized before creating ScriptRunner to save it in construc tor. 54 // to be initialized before creating ScriptRunner to save it in construc tor.
55 m_scriptRunner = ScriptRunner::create(m_document.get()); 55 m_scriptRunner = ScriptRunner::create(m_document.get());
56 } 56 }
57 57
58 void TearDown() override 58 void TearDown() override
59 { 59 {
60 m_scriptRunner.release(); 60 m_scriptRunner.release();
61 } 61 }
62 62
63 RefPtrWillBePersistent<Document> m_document; 63 Persistent<Document> m_document;
64 RefPtrWillBePersistent<Element> m_element; 64 Persistent<Element> m_element;
65 TestingPlatformSupportWithMockScheduler m_platform; 65 TestingPlatformSupportWithMockScheduler m_platform;
66 OwnPtrWillBePersistent<ScriptRunner> m_scriptRunner; 66 Persistent<ScriptRunner> m_scriptRunner;
67 WTF::Vector<int> m_order; 67 WTF::Vector<int> m_order;
68 }; 68 };
69 69
70 TEST_F(ScriptRunnerTest, QueueSingleScript_Async) 70 TEST_F(ScriptRunnerTest, QueueSingleScript_Async)
71 { 71 {
72 OwnPtrWillBeRawPtr<MockScriptLoader> scriptLoader = MockScriptLoader::create (m_element.get()); 72 RawPtr<MockScriptLoader> scriptLoader = MockScriptLoader::create(m_element.g et());
73 m_scriptRunner->queueScriptForExecution(scriptLoader.get(), ScriptRunner::AS YNC_EXECUTION); 73 m_scriptRunner->queueScriptForExecution(scriptLoader.get(), ScriptRunner::AS YNC_EXECUTION);
74 m_scriptRunner->notifyScriptReady(scriptLoader.get(), ScriptRunner::ASYNC_EX ECUTION); 74 m_scriptRunner->notifyScriptReady(scriptLoader.get(), ScriptRunner::ASYNC_EX ECUTION);
75 75
76 EXPECT_CALL(*scriptLoader, execute()); 76 EXPECT_CALL(*scriptLoader, execute());
77 m_platform.mockWebScheduler()->runAllTasks(); 77 m_platform.mockWebScheduler()->runAllTasks();
78 } 78 }
79 79
80 TEST_F(ScriptRunnerTest, QueueSingleScript_InOrder) 80 TEST_F(ScriptRunnerTest, QueueSingleScript_InOrder)
81 { 81 {
82 OwnPtrWillBeRawPtr<MockScriptLoader> scriptLoader = MockScriptLoader::create (m_element.get()); 82 RawPtr<MockScriptLoader> scriptLoader = MockScriptLoader::create(m_element.g et());
83 m_scriptRunner->queueScriptForExecution(scriptLoader.get(), ScriptRunner::IN _ORDER_EXECUTION); 83 m_scriptRunner->queueScriptForExecution(scriptLoader.get(), ScriptRunner::IN _ORDER_EXECUTION);
84 84
85 EXPECT_CALL(*scriptLoader, isReady()).WillOnce(Return(true)); 85 EXPECT_CALL(*scriptLoader, isReady()).WillOnce(Return(true));
86 EXPECT_CALL(*scriptLoader, execute()); 86 EXPECT_CALL(*scriptLoader, execute());
87 87
88 m_scriptRunner->notifyScriptReady(scriptLoader.get(), ScriptRunner::IN_ORDER _EXECUTION); 88 m_scriptRunner->notifyScriptReady(scriptLoader.get(), ScriptRunner::IN_ORDER _EXECUTION);
89 89
90 m_platform.mockWebScheduler()->runAllTasks(); 90 m_platform.mockWebScheduler()->runAllTasks();
91 } 91 }
92 92
93 TEST_F(ScriptRunnerTest, QueueMultipleScripts_InOrder) 93 TEST_F(ScriptRunnerTest, QueueMultipleScripts_InOrder)
94 { 94 {
95 OwnPtrWillBeRawPtr<MockScriptLoader> scriptLoader1 = MockScriptLoader::creat e(m_element.get()); 95 RawPtr<MockScriptLoader> scriptLoader1 = MockScriptLoader::create(m_element. get());
96 OwnPtrWillBeRawPtr<MockScriptLoader> scriptLoader2 = MockScriptLoader::creat e(m_element.get()); 96 RawPtr<MockScriptLoader> scriptLoader2 = MockScriptLoader::create(m_element. get());
97 OwnPtrWillBeRawPtr<MockScriptLoader> scriptLoader3 = MockScriptLoader::creat e(m_element.get()); 97 RawPtr<MockScriptLoader> scriptLoader3 = MockScriptLoader::create(m_element. get());
98 98
99 WillBeHeapVector<RawPtrWillBeMember<MockScriptLoader>> scriptLoaders; 99 HeapVector<Member<MockScriptLoader>> scriptLoaders;
100 scriptLoaders.append(scriptLoader1.get()); 100 scriptLoaders.append(scriptLoader1.get());
101 scriptLoaders.append(scriptLoader2.get()); 101 scriptLoaders.append(scriptLoader2.get());
102 scriptLoaders.append(scriptLoader3.get()); 102 scriptLoaders.append(scriptLoader3.get());
103 103
104 for (ScriptLoader* scriptLoader : scriptLoaders) { 104 for (ScriptLoader* scriptLoader : scriptLoaders) {
105 m_scriptRunner->queueScriptForExecution(scriptLoader, ScriptRunner::IN_O RDER_EXECUTION); 105 m_scriptRunner->queueScriptForExecution(scriptLoader, ScriptRunner::IN_O RDER_EXECUTION);
106 } 106 }
107 107
108 for (size_t i = 0; i < scriptLoaders.size(); ++i) { 108 for (size_t i = 0; i < scriptLoaders.size(); ++i) {
109 EXPECT_CALL(*scriptLoaders[i], execute()) 109 EXPECT_CALL(*scriptLoaders[i], execute())
(...skipping 17 matching lines...) Expand all
127 m_scriptRunner->notifyScriptReady(scriptLoaders[i], ScriptRunner::IN_ORD ER_EXECUTION); 127 m_scriptRunner->notifyScriptReady(scriptLoaders[i], ScriptRunner::IN_ORD ER_EXECUTION);
128 m_platform.mockWebScheduler()->runAllTasks(); 128 m_platform.mockWebScheduler()->runAllTasks();
129 } 129 }
130 130
131 // But ensure the scripts were run in the expected order. 131 // But ensure the scripts were run in the expected order.
132 EXPECT_THAT(m_order, ElementsAre(1, 2, 3)); 132 EXPECT_THAT(m_order, ElementsAre(1, 2, 3));
133 } 133 }
134 134
135 TEST_F(ScriptRunnerTest, QueueMixedScripts) 135 TEST_F(ScriptRunnerTest, QueueMixedScripts)
136 { 136 {
137 OwnPtrWillBeRawPtr<MockScriptLoader> scriptLoader1 = MockScriptLoader::creat e(m_element.get()); 137 RawPtr<MockScriptLoader> scriptLoader1 = MockScriptLoader::create(m_element. get());
138 OwnPtrWillBeRawPtr<MockScriptLoader> scriptLoader2 = MockScriptLoader::creat e(m_element.get()); 138 RawPtr<MockScriptLoader> scriptLoader2 = MockScriptLoader::create(m_element. get());
139 OwnPtrWillBeRawPtr<MockScriptLoader> scriptLoader3 = MockScriptLoader::creat e(m_element.get()); 139 RawPtr<MockScriptLoader> scriptLoader3 = MockScriptLoader::create(m_element. get());
140 OwnPtrWillBeRawPtr<MockScriptLoader> scriptLoader4 = MockScriptLoader::creat e(m_element.get()); 140 RawPtr<MockScriptLoader> scriptLoader4 = MockScriptLoader::create(m_element. get());
141 OwnPtrWillBeRawPtr<MockScriptLoader> scriptLoader5 = MockScriptLoader::creat e(m_element.get()); 141 RawPtr<MockScriptLoader> scriptLoader5 = MockScriptLoader::create(m_element. get());
142 142
143 143
144 m_scriptRunner->queueScriptForExecution(scriptLoader1.get(), ScriptRunner::I N_ORDER_EXECUTION); 144 m_scriptRunner->queueScriptForExecution(scriptLoader1.get(), ScriptRunner::I N_ORDER_EXECUTION);
145 m_scriptRunner->queueScriptForExecution(scriptLoader2.get(), ScriptRunner::I N_ORDER_EXECUTION); 145 m_scriptRunner->queueScriptForExecution(scriptLoader2.get(), ScriptRunner::I N_ORDER_EXECUTION);
146 m_scriptRunner->queueScriptForExecution(scriptLoader3.get(), ScriptRunner::I N_ORDER_EXECUTION); 146 m_scriptRunner->queueScriptForExecution(scriptLoader3.get(), ScriptRunner::I N_ORDER_EXECUTION);
147 m_scriptRunner->queueScriptForExecution(scriptLoader4.get(), ScriptRunner::A SYNC_EXECUTION); 147 m_scriptRunner->queueScriptForExecution(scriptLoader4.get(), ScriptRunner::A SYNC_EXECUTION);
148 m_scriptRunner->queueScriptForExecution(scriptLoader5.get(), ScriptRunner::A SYNC_EXECUTION); 148 m_scriptRunner->queueScriptForExecution(scriptLoader5.get(), ScriptRunner::A SYNC_EXECUTION);
149 149
150 EXPECT_CALL(*scriptLoader1, isReady()).WillRepeatedly(Return(true)); 150 EXPECT_CALL(*scriptLoader1, isReady()).WillRepeatedly(Return(true));
151 EXPECT_CALL(*scriptLoader2, isReady()) 151 EXPECT_CALL(*scriptLoader2, isReady())
(...skipping 29 matching lines...) Expand all
181 })); 181 }));
182 182
183 m_platform.mockWebScheduler()->runAllTasks(); 183 m_platform.mockWebScheduler()->runAllTasks();
184 184
185 // Async tasks are expected to run first. 185 // Async tasks are expected to run first.
186 EXPECT_THAT(m_order, ElementsAre(4, 5, 1, 2, 3)); 186 EXPECT_THAT(m_order, ElementsAre(4, 5, 1, 2, 3));
187 } 187 }
188 188
189 TEST_F(ScriptRunnerTest, QueueReentrantScript_Async) 189 TEST_F(ScriptRunnerTest, QueueReentrantScript_Async)
190 { 190 {
191 OwnPtrWillBeRawPtr<MockScriptLoader> scriptLoader1 = MockScriptLoader::creat e(m_element.get()); 191 RawPtr<MockScriptLoader> scriptLoader1 = MockScriptLoader::create(m_element. get());
192 OwnPtrWillBeRawPtr<MockScriptLoader> scriptLoader2 = MockScriptLoader::creat e(m_element.get()); 192 RawPtr<MockScriptLoader> scriptLoader2 = MockScriptLoader::create(m_element. get());
193 OwnPtrWillBeRawPtr<MockScriptLoader> scriptLoader3 = MockScriptLoader::creat e(m_element.get()); 193 RawPtr<MockScriptLoader> scriptLoader3 = MockScriptLoader::create(m_element. get());
194 194
195 m_scriptRunner->queueScriptForExecution(scriptLoader1.get(), ScriptRunner::A SYNC_EXECUTION); 195 m_scriptRunner->queueScriptForExecution(scriptLoader1.get(), ScriptRunner::A SYNC_EXECUTION);
196 m_scriptRunner->queueScriptForExecution(scriptLoader2.get(), ScriptRunner::A SYNC_EXECUTION); 196 m_scriptRunner->queueScriptForExecution(scriptLoader2.get(), ScriptRunner::A SYNC_EXECUTION);
197 m_scriptRunner->queueScriptForExecution(scriptLoader3.get(), ScriptRunner::A SYNC_EXECUTION); 197 m_scriptRunner->queueScriptForExecution(scriptLoader3.get(), ScriptRunner::A SYNC_EXECUTION);
198 m_scriptRunner->notifyScriptReady(scriptLoader1.get(), ScriptRunner::ASYNC_E XECUTION); 198 m_scriptRunner->notifyScriptReady(scriptLoader1.get(), ScriptRunner::ASYNC_E XECUTION);
199 199
200 MockScriptLoader* scriptLoader = scriptLoader2.get(); 200 MockScriptLoader* scriptLoader = scriptLoader2.get();
201 EXPECT_CALL(*scriptLoader1, execute()).WillOnce(Invoke([scriptLoader, this] { 201 EXPECT_CALL(*scriptLoader1, execute()).WillOnce(Invoke([scriptLoader, this] {
202 m_order.append(1); 202 m_order.append(1);
203 m_scriptRunner->notifyScriptReady(scriptLoader, ScriptRunner::ASYNC_EXEC UTION); 203 m_scriptRunner->notifyScriptReady(scriptLoader, ScriptRunner::ASYNC_EXEC UTION);
(...skipping 16 matching lines...) Expand all
220 220
221 m_platform.mockWebScheduler()->runSingleTask(); 221 m_platform.mockWebScheduler()->runSingleTask();
222 EXPECT_THAT(m_order, ElementsAre(1, 2)); 222 EXPECT_THAT(m_order, ElementsAre(1, 2));
223 223
224 m_platform.mockWebScheduler()->runSingleTask(); 224 m_platform.mockWebScheduler()->runSingleTask();
225 EXPECT_THAT(m_order, ElementsAre(1, 2, 3)); 225 EXPECT_THAT(m_order, ElementsAre(1, 2, 3));
226 } 226 }
227 227
228 TEST_F(ScriptRunnerTest, QueueReentrantScript_InOrder) 228 TEST_F(ScriptRunnerTest, QueueReentrantScript_InOrder)
229 { 229 {
230 OwnPtrWillBeRawPtr<MockScriptLoader> scriptLoader1 = MockScriptLoader::creat e(m_element.get()); 230 RawPtr<MockScriptLoader> scriptLoader1 = MockScriptLoader::create(m_element. get());
231 OwnPtrWillBeRawPtr<MockScriptLoader> scriptLoader2 = MockScriptLoader::creat e(m_element.get()); 231 RawPtr<MockScriptLoader> scriptLoader2 = MockScriptLoader::create(m_element. get());
232 OwnPtrWillBeRawPtr<MockScriptLoader> scriptLoader3 = MockScriptLoader::creat e(m_element.get()); 232 RawPtr<MockScriptLoader> scriptLoader3 = MockScriptLoader::create(m_element. get());
233 233
234 EXPECT_CALL(*scriptLoader1, isReady()).WillRepeatedly(Return(true)); 234 EXPECT_CALL(*scriptLoader1, isReady()).WillRepeatedly(Return(true));
235 EXPECT_CALL(*scriptLoader2, isReady()).WillRepeatedly(Return(true)); 235 EXPECT_CALL(*scriptLoader2, isReady()).WillRepeatedly(Return(true));
236 EXPECT_CALL(*scriptLoader3, isReady()).WillRepeatedly(Return(true)); 236 EXPECT_CALL(*scriptLoader3, isReady()).WillRepeatedly(Return(true));
237 237
238 m_scriptRunner->queueScriptForExecution(scriptLoader1.get(), ScriptRunner::I N_ORDER_EXECUTION); 238 m_scriptRunner->queueScriptForExecution(scriptLoader1.get(), ScriptRunner::I N_ORDER_EXECUTION);
239 m_scriptRunner->notifyScriptReady(scriptLoader1.get(), ScriptRunner::IN_ORDE R_EXECUTION); 239 m_scriptRunner->notifyScriptReady(scriptLoader1.get(), ScriptRunner::IN_ORDE R_EXECUTION);
240 240
241 MockScriptLoader* scriptLoader = scriptLoader2.get(); 241 MockScriptLoader* scriptLoader = scriptLoader2.get();
242 EXPECT_CALL(*scriptLoader1, execute()) 242 EXPECT_CALL(*scriptLoader1, execute())
(...skipping 22 matching lines...) Expand all
265 265
266 m_platform.mockWebScheduler()->runSingleTask(); 266 m_platform.mockWebScheduler()->runSingleTask();
267 EXPECT_THAT(m_order, ElementsAre(1, 2)); 267 EXPECT_THAT(m_order, ElementsAre(1, 2));
268 268
269 m_platform.mockWebScheduler()->runSingleTask(); 269 m_platform.mockWebScheduler()->runSingleTask();
270 EXPECT_THAT(m_order, ElementsAre(1, 2, 3)); 270 EXPECT_THAT(m_order, ElementsAre(1, 2, 3));
271 } 271 }
272 272
273 TEST_F(ScriptRunnerTest, QueueReentrantScript_ManyAsyncScripts) 273 TEST_F(ScriptRunnerTest, QueueReentrantScript_ManyAsyncScripts)
274 { 274 {
275 OwnPtrWillBeRawPtr<MockScriptLoader> scriptLoaders[20]; 275 RawPtr<MockScriptLoader> scriptLoaders[20];
276 for (int i = 0; i < 20; i++) 276 for (int i = 0; i < 20; i++)
277 scriptLoaders[i] = nullptr; 277 scriptLoaders[i] = nullptr;
278 278
279 for (int i = 0; i < 20; i++) { 279 for (int i = 0; i < 20; i++) {
280 scriptLoaders[i] = MockScriptLoader::create(m_element.get()); 280 scriptLoaders[i] = MockScriptLoader::create(m_element.get());
281 EXPECT_CALL(*scriptLoaders[i], isReady()).WillRepeatedly(Return(true)); 281 EXPECT_CALL(*scriptLoaders[i], isReady()).WillRepeatedly(Return(true));
282 282
283 m_scriptRunner->queueScriptForExecution(scriptLoaders[i].get(), ScriptRu nner::ASYNC_EXECUTION); 283 m_scriptRunner->queueScriptForExecution(scriptLoaders[i].get(), ScriptRu nner::ASYNC_EXECUTION);
284 284
285 if (i > 0) { 285 if (i > 0) {
(...skipping 16 matching lines...) Expand all
302 302
303 int expected[] = { 303 int expected[] = {
304 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19 304 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19
305 }; 305 };
306 306
307 EXPECT_THAT(m_order, testing::ElementsAreArray(expected)); 307 EXPECT_THAT(m_order, testing::ElementsAreArray(expected));
308 } 308 }
309 309
310 TEST_F(ScriptRunnerTest, ResumeAndSuspend_InOrder) 310 TEST_F(ScriptRunnerTest, ResumeAndSuspend_InOrder)
311 { 311 {
312 OwnPtrWillBeRawPtr<MockScriptLoader> scriptLoader1 = MockScriptLoader::creat e(m_element.get()); 312 RawPtr<MockScriptLoader> scriptLoader1 = MockScriptLoader::create(m_element. get());
313 OwnPtrWillBeRawPtr<MockScriptLoader> scriptLoader2 = MockScriptLoader::creat e(m_element.get()); 313 RawPtr<MockScriptLoader> scriptLoader2 = MockScriptLoader::create(m_element. get());
314 OwnPtrWillBeRawPtr<MockScriptLoader> scriptLoader3 = MockScriptLoader::creat e(m_element.get()); 314 RawPtr<MockScriptLoader> scriptLoader3 = MockScriptLoader::create(m_element. get());
315 315
316 m_scriptRunner->queueScriptForExecution(scriptLoader1.get(), ScriptRunner::I N_ORDER_EXECUTION); 316 m_scriptRunner->queueScriptForExecution(scriptLoader1.get(), ScriptRunner::I N_ORDER_EXECUTION);
317 m_scriptRunner->queueScriptForExecution(scriptLoader2.get(), ScriptRunner::I N_ORDER_EXECUTION); 317 m_scriptRunner->queueScriptForExecution(scriptLoader2.get(), ScriptRunner::I N_ORDER_EXECUTION);
318 m_scriptRunner->queueScriptForExecution(scriptLoader3.get(), ScriptRunner::I N_ORDER_EXECUTION); 318 m_scriptRunner->queueScriptForExecution(scriptLoader3.get(), ScriptRunner::I N_ORDER_EXECUTION);
319 319
320 EXPECT_CALL(*scriptLoader1, execute()).WillOnce(Invoke([this] { 320 EXPECT_CALL(*scriptLoader1, execute()).WillOnce(Invoke([this] {
321 m_order.append(1); 321 m_order.append(1);
322 })); 322 }));
323 EXPECT_CALL(*scriptLoader2, execute()).WillOnce(Invoke([this] { 323 EXPECT_CALL(*scriptLoader2, execute()).WillOnce(Invoke([this] {
324 m_order.append(2); 324 m_order.append(2);
(...skipping 27 matching lines...) Expand all
352 m_scriptRunner->suspend(); 352 m_scriptRunner->suspend();
353 m_scriptRunner->resume(); 353 m_scriptRunner->resume();
354 m_platform.mockWebScheduler()->runAllTasks(); 354 m_platform.mockWebScheduler()->runAllTasks();
355 355
356 // Make sure elements are correct and in right order. 356 // Make sure elements are correct and in right order.
357 EXPECT_THAT(m_order, ElementsAre(1, 2, 3)); 357 EXPECT_THAT(m_order, ElementsAre(1, 2, 3));
358 } 358 }
359 359
360 TEST_F(ScriptRunnerTest, ResumeAndSuspend_Async) 360 TEST_F(ScriptRunnerTest, ResumeAndSuspend_Async)
361 { 361 {
362 OwnPtrWillBeRawPtr<MockScriptLoader> scriptLoader1 = MockScriptLoader::creat e(m_element.get()); 362 RawPtr<MockScriptLoader> scriptLoader1 = MockScriptLoader::create(m_element. get());
363 OwnPtrWillBeRawPtr<MockScriptLoader> scriptLoader2 = MockScriptLoader::creat e(m_element.get()); 363 RawPtr<MockScriptLoader> scriptLoader2 = MockScriptLoader::create(m_element. get());
364 OwnPtrWillBeRawPtr<MockScriptLoader> scriptLoader3 = MockScriptLoader::creat e(m_element.get()); 364 RawPtr<MockScriptLoader> scriptLoader3 = MockScriptLoader::create(m_element. get());
365 365
366 m_scriptRunner->queueScriptForExecution(scriptLoader1.get(), ScriptRunner::A SYNC_EXECUTION); 366 m_scriptRunner->queueScriptForExecution(scriptLoader1.get(), ScriptRunner::A SYNC_EXECUTION);
367 m_scriptRunner->queueScriptForExecution(scriptLoader2.get(), ScriptRunner::A SYNC_EXECUTION); 367 m_scriptRunner->queueScriptForExecution(scriptLoader2.get(), ScriptRunner::A SYNC_EXECUTION);
368 m_scriptRunner->queueScriptForExecution(scriptLoader3.get(), ScriptRunner::A SYNC_EXECUTION); 368 m_scriptRunner->queueScriptForExecution(scriptLoader3.get(), ScriptRunner::A SYNC_EXECUTION);
369 369
370 m_scriptRunner->notifyScriptReady(scriptLoader1.get(), ScriptRunner::ASYNC_E XECUTION); 370 m_scriptRunner->notifyScriptReady(scriptLoader1.get(), ScriptRunner::ASYNC_E XECUTION);
371 m_scriptRunner->notifyScriptReady(scriptLoader2.get(), ScriptRunner::ASYNC_E XECUTION); 371 m_scriptRunner->notifyScriptReady(scriptLoader2.get(), ScriptRunner::ASYNC_E XECUTION);
372 m_scriptRunner->notifyScriptReady(scriptLoader3.get(), ScriptRunner::ASYNC_E XECUTION); 372 m_scriptRunner->notifyScriptReady(scriptLoader3.get(), ScriptRunner::ASYNC_E XECUTION);
373 373
374 EXPECT_CALL(*scriptLoader1, execute()) 374 EXPECT_CALL(*scriptLoader1, execute())
(...skipping 13 matching lines...) Expand all
388 m_scriptRunner->suspend(); 388 m_scriptRunner->suspend();
389 m_scriptRunner->resume(); 389 m_scriptRunner->resume();
390 m_platform.mockWebScheduler()->runAllTasks(); 390 m_platform.mockWebScheduler()->runAllTasks();
391 391
392 // Make sure elements are correct. 392 // Make sure elements are correct.
393 EXPECT_THAT(m_order, WhenSorted(ElementsAre(1, 2, 3))); 393 EXPECT_THAT(m_order, WhenSorted(ElementsAre(1, 2, 3)));
394 } 394 }
395 395
396 TEST_F(ScriptRunnerTest, LateNotifications) 396 TEST_F(ScriptRunnerTest, LateNotifications)
397 { 397 {
398 OwnPtrWillBeRawPtr<MockScriptLoader> scriptLoader1 = MockScriptLoader::creat e(m_element.get()); 398 RawPtr<MockScriptLoader> scriptLoader1 = MockScriptLoader::create(m_element. get());
399 OwnPtrWillBeRawPtr<MockScriptLoader> scriptLoader2 = MockScriptLoader::creat e(m_element.get()); 399 RawPtr<MockScriptLoader> scriptLoader2 = MockScriptLoader::create(m_element. get());
400 400
401 EXPECT_CALL(*scriptLoader1, isReady()).WillRepeatedly(Return(true)); 401 EXPECT_CALL(*scriptLoader1, isReady()).WillRepeatedly(Return(true));
402 EXPECT_CALL(*scriptLoader2, isReady()).WillRepeatedly(Return(true)); 402 EXPECT_CALL(*scriptLoader2, isReady()).WillRepeatedly(Return(true));
403 403
404 m_scriptRunner->queueScriptForExecution(scriptLoader1.get(), ScriptRunner::I N_ORDER_EXECUTION); 404 m_scriptRunner->queueScriptForExecution(scriptLoader1.get(), ScriptRunner::I N_ORDER_EXECUTION);
405 m_scriptRunner->queueScriptForExecution(scriptLoader2.get(), ScriptRunner::I N_ORDER_EXECUTION); 405 m_scriptRunner->queueScriptForExecution(scriptLoader2.get(), ScriptRunner::I N_ORDER_EXECUTION);
406 406
407 EXPECT_CALL(*scriptLoader1, execute()).WillOnce(Invoke([this] { 407 EXPECT_CALL(*scriptLoader1, execute()).WillOnce(Invoke([this] {
408 m_order.append(1); 408 m_order.append(1);
409 })); 409 }));
410 EXPECT_CALL(*scriptLoader2, execute()).WillOnce(Invoke([this] { 410 EXPECT_CALL(*scriptLoader2, execute()).WillOnce(Invoke([this] {
411 m_order.append(2); 411 m_order.append(2);
412 })); 412 }));
413 413
414 m_scriptRunner->notifyScriptReady(scriptLoader1.get(), ScriptRunner::IN_ORDE R_EXECUTION); 414 m_scriptRunner->notifyScriptReady(scriptLoader1.get(), ScriptRunner::IN_ORDE R_EXECUTION);
415 m_platform.mockWebScheduler()->runAllTasks(); 415 m_platform.mockWebScheduler()->runAllTasks();
416 416
417 // At this moment all tasks can be already executed. Make sure that we do no t crash here. 417 // At this moment all tasks can be already executed. Make sure that we do no t crash here.
418 m_scriptRunner->notifyScriptReady(scriptLoader2.get(), ScriptRunner::IN_ORDE R_EXECUTION); 418 m_scriptRunner->notifyScriptReady(scriptLoader2.get(), ScriptRunner::IN_ORDE R_EXECUTION);
419 m_platform.mockWebScheduler()->runAllTasks(); 419 m_platform.mockWebScheduler()->runAllTasks();
420 420
421 EXPECT_THAT(m_order, ElementsAre(1, 2)); 421 EXPECT_THAT(m_order, ElementsAre(1, 2));
422 } 422 }
423 423
424 TEST_F(ScriptRunnerTest, TasksWithDeadScriptRunner) 424 TEST_F(ScriptRunnerTest, TasksWithDeadScriptRunner)
425 { 425 {
426 OwnPtrWillBePersistent<MockScriptLoader> scriptLoader1 = MockScriptLoader::c reate(m_element.get()); 426 Persistent<MockScriptLoader> scriptLoader1 = MockScriptLoader::create(m_elem ent.get());
427 OwnPtrWillBePersistent<MockScriptLoader> scriptLoader2 = MockScriptLoader::c reate(m_element.get()); 427 Persistent<MockScriptLoader> scriptLoader2 = MockScriptLoader::create(m_elem ent.get());
428 428
429 EXPECT_CALL(*scriptLoader1, isReady()).WillRepeatedly(Return(true)); 429 EXPECT_CALL(*scriptLoader1, isReady()).WillRepeatedly(Return(true));
430 EXPECT_CALL(*scriptLoader2, isReady()).WillRepeatedly(Return(true)); 430 EXPECT_CALL(*scriptLoader2, isReady()).WillRepeatedly(Return(true));
431 431
432 m_scriptRunner->queueScriptForExecution(scriptLoader1.get(), ScriptRunner::A SYNC_EXECUTION); 432 m_scriptRunner->queueScriptForExecution(scriptLoader1.get(), ScriptRunner::A SYNC_EXECUTION);
433 m_scriptRunner->queueScriptForExecution(scriptLoader2.get(), ScriptRunner::A SYNC_EXECUTION); 433 m_scriptRunner->queueScriptForExecution(scriptLoader2.get(), ScriptRunner::A SYNC_EXECUTION);
434 434
435 m_scriptRunner->notifyScriptReady(scriptLoader1.get(), ScriptRunner::ASYNC_E XECUTION); 435 m_scriptRunner->notifyScriptReady(scriptLoader1.get(), ScriptRunner::ASYNC_E XECUTION);
436 m_scriptRunner->notifyScriptReady(scriptLoader2.get(), ScriptRunner::ASYNC_E XECUTION); 436 m_scriptRunner->notifyScriptReady(scriptLoader2.get(), ScriptRunner::ASYNC_E XECUTION);
437 437
438 m_scriptRunner.release(); 438 m_scriptRunner.release();
439 439
440 #if ENABLE(OILPAN) 440 #if ENABLE(OILPAN)
441 Heap::collectAllGarbage(); 441 Heap::collectAllGarbage();
442 #endif 442 #endif
443 443
444 // m_scriptRunner is gone. We need to make sure that ScriptRunner::Task do n ot access dead object. 444 // m_scriptRunner is gone. We need to make sure that ScriptRunner::Task do n ot access dead object.
445 EXPECT_CALL(*scriptLoader1, execute()).Times(0); 445 EXPECT_CALL(*scriptLoader1, execute()).Times(0);
446 EXPECT_CALL(*scriptLoader2, execute()).Times(0); 446 EXPECT_CALL(*scriptLoader2, execute()).Times(0);
447 447
448 m_platform.mockWebScheduler()->runAllTasks(); 448 m_platform.mockWebScheduler()->runAllTasks();
449 } 449 }
450 450
451 } // namespace blink 451 } // namespace blink
OLDNEW
« no previous file with comments | « third_party/WebKit/Source/core/dom/ScriptRunner.cpp ('k') | third_party/WebKit/Source/core/dom/ScriptedAnimationController.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698