| OLD | NEW |
| 1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 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/ThreadableLoader.h" | 5 #include "core/loader/ThreadableLoader.h" |
| 6 | 6 |
| 7 #include "core/dom/ExecutionContextTask.h" | 7 #include "core/dom/ExecutionContextTask.h" |
| 8 #include "core/fetch/MemoryCache.h" | 8 #include "core/fetch/MemoryCache.h" |
| 9 #include "core/fetch/ResourceLoaderOptions.h" | 9 #include "core/fetch/ResourceLoaderOptions.h" |
| 10 #include "core/loader/DocumentThreadableLoader.h" | 10 #include "core/loader/DocumentThreadableLoader.h" |
| (...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 91 KURL redirectURL() { | 91 KURL redirectURL() { |
| 92 return KURL(KURL(), "http://example.com/redirect"); | 92 return KURL(KURL(), "http://example.com/redirect"); |
| 93 } | 93 } |
| 94 KURL redirectLoopURL() { | 94 KURL redirectLoopURL() { |
| 95 return KURL(KURL(), "http://example.com/loop"); | 95 return KURL(KURL(), "http://example.com/loop"); |
| 96 } | 96 } |
| 97 | 97 |
| 98 enum ThreadableLoaderToTest { | 98 enum ThreadableLoaderToTest { |
| 99 DocumentThreadableLoaderTest, | 99 DocumentThreadableLoaderTest, |
| 100 WorkerThreadableLoaderTest, | 100 WorkerThreadableLoaderTest, |
| 101 PerThreadHeapEnabledWorkerThreadableLoaderTest | |
| 102 }; | 101 }; |
| 103 | 102 |
| 104 class ThreadableLoaderTestHelper { | 103 class ThreadableLoaderTestHelper { |
| 105 public: | 104 public: |
| 106 virtual ~ThreadableLoaderTestHelper() {} | 105 virtual ~ThreadableLoaderTestHelper() {} |
| 107 | 106 |
| 108 virtual void createLoader(ThreadableLoaderClient*, | 107 virtual void createLoader(ThreadableLoaderClient*, |
| 109 CrossOriginRequestPolicy) = 0; | 108 CrossOriginRequestPolicy) = 0; |
| 110 virtual void startLoader(const ResourceRequest&) = 0; | 109 virtual void startLoader(const ResourceRequest&) = 0; |
| 111 virtual void cancelLoader() = 0; | 110 virtual void cancelLoader() = 0; |
| (...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 161 Document& document() { return m_dummyPageHolder->document(); } | 160 Document& document() { return m_dummyPageHolder->document(); } |
| 162 | 161 |
| 163 std::unique_ptr<DummyPageHolder> m_dummyPageHolder; | 162 std::unique_ptr<DummyPageHolder> m_dummyPageHolder; |
| 164 Checkpoint m_checkpoint; | 163 Checkpoint m_checkpoint; |
| 165 Persistent<DocumentThreadableLoader> m_loader; | 164 Persistent<DocumentThreadableLoader> m_loader; |
| 166 }; | 165 }; |
| 167 | 166 |
| 168 class WorkerThreadableLoaderTestHelper : public ThreadableLoaderTestHelper, | 167 class WorkerThreadableLoaderTestHelper : public ThreadableLoaderTestHelper, |
| 169 public WorkerLoaderProxyProvider { | 168 public WorkerLoaderProxyProvider { |
| 170 public: | 169 public: |
| 171 explicit WorkerThreadableLoaderTestHelper( | 170 WorkerThreadableLoaderTestHelper() |
| 172 BlinkGC::ThreadHeapMode threadHeapMode) | 171 : m_dummyPageHolder(DummyPageHolder::create(IntSize(1, 1))) {} |
| 173 : m_dummyPageHolder(DummyPageHolder::create(IntSize(1, 1))), | |
| 174 m_threadHeapMode(threadHeapMode) {} | |
| 175 | 172 |
| 176 void createLoader( | 173 void createLoader( |
| 177 ThreadableLoaderClient* client, | 174 ThreadableLoaderClient* client, |
| 178 CrossOriginRequestPolicy crossOriginRequestPolicy) override { | 175 CrossOriginRequestPolicy crossOriginRequestPolicy) override { |
| 179 std::unique_ptr<WaitableEvent> completionEvent = | 176 std::unique_ptr<WaitableEvent> completionEvent = |
| 180 WTF::makeUnique<WaitableEvent>(); | 177 WTF::makeUnique<WaitableEvent>(); |
| 181 postTaskToWorkerGlobalScope( | 178 postTaskToWorkerGlobalScope( |
| 182 BLINK_FROM_HERE, | 179 BLINK_FROM_HERE, |
| 183 createCrossThreadTask( | 180 createCrossThreadTask( |
| 184 &WorkerThreadableLoaderTestHelper::workerCreateLoader, | 181 &WorkerThreadableLoaderTestHelper::workerCreateLoader, |
| (...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 235 crossThreadUnretained(this), | 232 crossThreadUnretained(this), |
| 236 crossThreadUnretained(completionEvent.get()), n)); | 233 crossThreadUnretained(completionEvent.get()), n)); |
| 237 completionEvent->wait(); | 234 completionEvent->wait(); |
| 238 } | 235 } |
| 239 | 236 |
| 240 void onSetUp() override { | 237 void onSetUp() override { |
| 241 m_mockWorkerReportingProxy = WTF::makeUnique<MockWorkerReportingProxy>(); | 238 m_mockWorkerReportingProxy = WTF::makeUnique<MockWorkerReportingProxy>(); |
| 242 m_securityOrigin = document().getSecurityOrigin(); | 239 m_securityOrigin = document().getSecurityOrigin(); |
| 243 m_parentFrameTaskRunners = | 240 m_parentFrameTaskRunners = |
| 244 ParentFrameTaskRunners::create(&m_dummyPageHolder->frame()); | 241 ParentFrameTaskRunners::create(&m_dummyPageHolder->frame()); |
| 245 m_workerThread = WTF::wrapUnique(new WorkerThreadForTest( | 242 m_workerThread = WTF::wrapUnique( |
| 246 this, *m_mockWorkerReportingProxy, m_threadHeapMode)); | 243 new WorkerThreadForTest(this, *m_mockWorkerReportingProxy)); |
| 247 | 244 |
| 248 expectWorkerLifetimeReportingCalls(); | 245 expectWorkerLifetimeReportingCalls(); |
| 249 m_workerThread->startWithSourceCode(m_securityOrigin.get(), | 246 m_workerThread->startWithSourceCode(m_securityOrigin.get(), |
| 250 "//fake source code"); | 247 "//fake source code"); |
| 251 m_workerThread->waitForInit(); | 248 m_workerThread->waitForInit(); |
| 252 } | 249 } |
| 253 | 250 |
| 254 void onServeRequests() override { testing::runPendingTasks(); } | 251 void onServeRequests() override { testing::runPendingTasks(); } |
| 255 | 252 |
| 256 void onTearDown() override { | 253 void onTearDown() override { |
| (...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 348 | 345 |
| 349 RefPtr<SecurityOrigin> m_securityOrigin; | 346 RefPtr<SecurityOrigin> m_securityOrigin; |
| 350 std::unique_ptr<MockWorkerReportingProxy> m_mockWorkerReportingProxy; | 347 std::unique_ptr<MockWorkerReportingProxy> m_mockWorkerReportingProxy; |
| 351 std::unique_ptr<WorkerThreadForTest> m_workerThread; | 348 std::unique_ptr<WorkerThreadForTest> m_workerThread; |
| 352 | 349 |
| 353 std::unique_ptr<DummyPageHolder> m_dummyPageHolder; | 350 std::unique_ptr<DummyPageHolder> m_dummyPageHolder; |
| 354 Persistent<ParentFrameTaskRunners> m_parentFrameTaskRunners; | 351 Persistent<ParentFrameTaskRunners> m_parentFrameTaskRunners; |
| 355 Checkpoint m_checkpoint; | 352 Checkpoint m_checkpoint; |
| 356 // |m_loader| must be touched only from the worker thread only. | 353 // |m_loader| must be touched only from the worker thread only. |
| 357 CrossThreadPersistent<ThreadableLoader> m_loader; | 354 CrossThreadPersistent<ThreadableLoader> m_loader; |
| 358 const BlinkGC::ThreadHeapMode m_threadHeapMode; | |
| 359 }; | 355 }; |
| 360 | 356 |
| 361 class ThreadableLoaderTest | 357 class ThreadableLoaderTest |
| 362 : public ::testing::TestWithParam<ThreadableLoaderToTest> { | 358 : public ::testing::TestWithParam<ThreadableLoaderToTest> { |
| 363 public: | 359 public: |
| 364 ThreadableLoaderTest() { | 360 ThreadableLoaderTest() { |
| 365 switch (GetParam()) { | 361 switch (GetParam()) { |
| 366 case DocumentThreadableLoaderTest: | 362 case DocumentThreadableLoaderTest: |
| 367 m_helper = WTF::wrapUnique(new DocumentThreadableLoaderTestHelper); | 363 m_helper = WTF::wrapUnique(new DocumentThreadableLoaderTestHelper); |
| 368 break; | 364 break; |
| 369 case WorkerThreadableLoaderTest: | 365 case WorkerThreadableLoaderTest: |
| 370 m_helper = WTF::wrapUnique( | 366 m_helper = WTF::wrapUnique(new WorkerThreadableLoaderTestHelper()); |
| 371 new WorkerThreadableLoaderTestHelper(BlinkGC::MainThreadHeapMode)); | |
| 372 break; | |
| 373 case PerThreadHeapEnabledWorkerThreadableLoaderTest: | |
| 374 m_helper = WTF::wrapUnique( | |
| 375 new WorkerThreadableLoaderTestHelper(BlinkGC::PerThreadHeapMode)); | |
| 376 break; | 367 break; |
| 377 } | 368 } |
| 378 } | 369 } |
| 379 | 370 |
| 380 void startLoader(const KURL& url) { | 371 void startLoader(const KURL& url) { |
| 381 ResourceRequest request(url); | 372 ResourceRequest request(url); |
| 382 request.setRequestContext(WebURLRequest::RequestContextObject); | 373 request.setRequestContext(WebURLRequest::RequestContextObject); |
| 383 m_helper->startLoader(request); | 374 m_helper->startLoader(request); |
| 384 } | 375 } |
| 385 | 376 |
| (...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 467 }; | 458 }; |
| 468 | 459 |
| 469 INSTANTIATE_TEST_CASE_P(Document, | 460 INSTANTIATE_TEST_CASE_P(Document, |
| 470 ThreadableLoaderTest, | 461 ThreadableLoaderTest, |
| 471 ::testing::Values(DocumentThreadableLoaderTest)); | 462 ::testing::Values(DocumentThreadableLoaderTest)); |
| 472 | 463 |
| 473 INSTANTIATE_TEST_CASE_P(Worker, | 464 INSTANTIATE_TEST_CASE_P(Worker, |
| 474 ThreadableLoaderTest, | 465 ThreadableLoaderTest, |
| 475 ::testing::Values(WorkerThreadableLoaderTest)); | 466 ::testing::Values(WorkerThreadableLoaderTest)); |
| 476 | 467 |
| 477 INSTANTIATE_TEST_CASE_P( | |
| 478 PerThreadHeapEnabledWorker, | |
| 479 ThreadableLoaderTest, | |
| 480 ::testing::Values(PerThreadHeapEnabledWorkerThreadableLoaderTest)); | |
| 481 | |
| 482 TEST_P(ThreadableLoaderTest, StartAndStop) {} | 468 TEST_P(ThreadableLoaderTest, StartAndStop) {} |
| 483 | 469 |
| 484 TEST_P(ThreadableLoaderTest, CancelAfterStart) { | 470 TEST_P(ThreadableLoaderTest, CancelAfterStart) { |
| 485 InSequence s; | 471 InSequence s; |
| 486 EXPECT_CALL(checkpoint(), Call(1)); | 472 EXPECT_CALL(checkpoint(), Call(1)); |
| 487 createLoader(); | 473 createLoader(); |
| 488 callCheckpoint(1); | 474 callCheckpoint(1); |
| 489 | 475 |
| 490 EXPECT_CALL(checkpoint(), Call(2)) | 476 EXPECT_CALL(checkpoint(), Call(2)) |
| 491 .WillOnce(InvokeWithoutArgs(this, &ThreadableLoaderTest::cancelLoader)); | 477 .WillOnce(InvokeWithoutArgs(this, &ThreadableLoaderTest::cancelLoader)); |
| (...skipping 403 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 895 // test is not saying that didFailAccessControlCheck should be dispatched | 881 // test is not saying that didFailAccessControlCheck should be dispatched |
| 896 // synchronously, but is saying that even when a response is served | 882 // synchronously, but is saying that even when a response is served |
| 897 // synchronously it should not lead to a crash. | 883 // synchronously it should not lead to a crash. |
| 898 startLoader(KURL(KURL(), "about:blank")); | 884 startLoader(KURL(KURL(), "about:blank")); |
| 899 callCheckpoint(2); | 885 callCheckpoint(2); |
| 900 } | 886 } |
| 901 | 887 |
| 902 } // namespace | 888 } // namespace |
| 903 | 889 |
| 904 } // namespace blink | 890 } // namespace blink |
| OLD | NEW |