Chromium Code Reviews| 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 69 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 80 return !error.isCancellation(); | 80 return !error.isCancellation(); |
| 81 } | 81 } |
| 82 | 82 |
| 83 KURL successURL() { return KURL(KURL(), "http://example.com/success"); } | 83 KURL successURL() { return KURL(KURL(), "http://example.com/success"); } |
| 84 KURL errorURL() { return KURL(KURL(), "http://example.com/error"); } | 84 KURL errorURL() { return KURL(KURL(), "http://example.com/error"); } |
| 85 KURL redirectURL() { return KURL(KURL(), "http://example.com/redirect"); } | 85 KURL redirectURL() { return KURL(KURL(), "http://example.com/redirect"); } |
| 86 KURL redirectLoopURL() { return KURL(KURL(), "http://example.com/loop"); } | 86 KURL redirectLoopURL() { return KURL(KURL(), "http://example.com/loop"); } |
| 87 | 87 |
| 88 enum ThreadableLoaderToTest { | 88 enum ThreadableLoaderToTest { |
| 89 DocumentThreadableLoaderTest, | 89 DocumentThreadableLoaderTest, |
| 90 WorkerThreadableLoaderTest | 90 WorkerThreadableLoaderTest, |
| 91 PerThreadHeapEnabledWorkerThreadableLoaderTest | |
| 91 }; | 92 }; |
| 92 | 93 |
| 93 class ThreadableLoaderTestHelper { | 94 class ThreadableLoaderTestHelper { |
| 94 public: | 95 public: |
| 95 virtual ~ThreadableLoaderTestHelper() { } | 96 virtual ~ThreadableLoaderTestHelper() { } |
| 96 | 97 |
| 97 virtual void createLoader(ThreadableLoaderClient*, CrossOriginRequestPolicy) = 0; | 98 virtual void createLoader(ThreadableLoaderClient*, CrossOriginRequestPolicy) = 0; |
| 98 virtual void startLoader(const ResourceRequest&) = 0; | 99 virtual void startLoader(const ResourceRequest&) = 0; |
| 99 virtual void cancelLoader() = 0; | 100 virtual void cancelLoader() = 0; |
| 100 virtual void cancelAndClearLoader() = 0; | 101 virtual void cancelAndClearLoader() = 0; |
| (...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 155 private: | 156 private: |
| 156 Document& document() { return m_dummyPageHolder->document(); } | 157 Document& document() { return m_dummyPageHolder->document(); } |
| 157 | 158 |
| 158 std::unique_ptr<DummyPageHolder> m_dummyPageHolder; | 159 std::unique_ptr<DummyPageHolder> m_dummyPageHolder; |
| 159 Checkpoint m_checkpoint; | 160 Checkpoint m_checkpoint; |
| 160 Persistent<DocumentThreadableLoader> m_loader; | 161 Persistent<DocumentThreadableLoader> m_loader; |
| 161 }; | 162 }; |
| 162 | 163 |
| 163 class WorkerThreadableLoaderTestHelper : public ThreadableLoaderTestHelper, publ ic WorkerLoaderProxyProvider { | 164 class WorkerThreadableLoaderTestHelper : public ThreadableLoaderTestHelper, publ ic WorkerLoaderProxyProvider { |
| 164 public: | 165 public: |
| 165 WorkerThreadableLoaderTestHelper() | 166 WorkerThreadableLoaderTestHelper(ThreadHeapMode threadHeapMode) |
| 166 : m_dummyPageHolder(DummyPageHolder::create(IntSize(1, 1))) | 167 : m_dummyPageHolder(DummyPageHolder::create(IntSize(1, 1))) |
| 168 , m_threadHeapMode(threadHeapMode) | |
| 167 { | 169 { |
| 168 } | 170 } |
| 169 | 171 |
| 170 void createLoader(ThreadableLoaderClient* client, CrossOriginRequestPolicy c rossOriginRequestPolicy) override | 172 void createLoader(ThreadableLoaderClient* client, CrossOriginRequestPolicy c rossOriginRequestPolicy) override |
| 171 { | 173 { |
| 172 std::unique_ptr<WaitableEvent> completionEvent = wrapUnique(new Waitable Event()); | 174 std::unique_ptr<WaitableEvent> completionEvent = wrapUnique(new Waitable Event()); |
| 173 postTaskToWorkerGlobalScope(BLINK_FROM_HERE, | 175 postTaskToWorkerGlobalScope(BLINK_FROM_HERE, |
| 174 createCrossThreadTask( | 176 createCrossThreadTask( |
| 175 &WorkerThreadableLoaderTestHelper::workerCreateLoader, | 177 &WorkerThreadableLoaderTestHelper::workerCreateLoader, |
| 176 crossThreadUnretained(this), | 178 crossThreadUnretained(this), |
| (...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 234 n)); | 236 n)); |
| 235 completionEvent->wait(); | 237 completionEvent->wait(); |
| 236 } | 238 } |
| 237 | 239 |
| 238 void onSetUp() override | 240 void onSetUp() override |
| 239 { | 241 { |
| 240 m_mockWorkerReportingProxy = wrapUnique(new MockWorkerReportingProxy()); | 242 m_mockWorkerReportingProxy = wrapUnique(new MockWorkerReportingProxy()); |
| 241 m_securityOrigin = document().getSecurityOrigin(); | 243 m_securityOrigin = document().getSecurityOrigin(); |
| 242 m_workerThread = wrapUnique(new WorkerThreadForTest( | 244 m_workerThread = wrapUnique(new WorkerThreadForTest( |
| 243 this, | 245 this, |
| 244 *m_mockWorkerReportingProxy)); | 246 *m_mockWorkerReportingProxy, |
| 247 m_threadHeapMode)); | |
| 245 | 248 |
| 246 expectWorkerLifetimeReportingCalls(); | 249 expectWorkerLifetimeReportingCalls(); |
| 247 m_workerThread->startWithSourceCode(m_securityOrigin.get(), "//fake sour ce code"); | 250 m_workerThread->startWithSourceCode(m_securityOrigin.get(), "//fake sour ce code"); |
| 248 m_workerThread->waitForInit(); | 251 m_workerThread->waitForInit(); |
| 249 } | 252 } |
| 250 | 253 |
| 251 void onServeRequests() override | 254 void onServeRequests() override |
| 252 { | 255 { |
| 253 testing::runPendingTasks(); | 256 testing::runPendingTasks(); |
| 254 } | 257 } |
| (...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 332 } | 335 } |
| 333 | 336 |
| 334 RefPtr<SecurityOrigin> m_securityOrigin; | 337 RefPtr<SecurityOrigin> m_securityOrigin; |
| 335 std::unique_ptr<MockWorkerReportingProxy> m_mockWorkerReportingProxy; | 338 std::unique_ptr<MockWorkerReportingProxy> m_mockWorkerReportingProxy; |
| 336 std::unique_ptr<WorkerThreadForTest> m_workerThread; | 339 std::unique_ptr<WorkerThreadForTest> m_workerThread; |
| 337 | 340 |
| 338 std::unique_ptr<DummyPageHolder> m_dummyPageHolder; | 341 std::unique_ptr<DummyPageHolder> m_dummyPageHolder; |
| 339 Checkpoint m_checkpoint; | 342 Checkpoint m_checkpoint; |
| 340 // |m_loader| must be touched only from the worker thread only. | 343 // |m_loader| must be touched only from the worker thread only. |
| 341 CrossThreadPersistent<ThreadableLoader> m_loader; | 344 CrossThreadPersistent<ThreadableLoader> m_loader; |
| 345 ThreadHeapMode m_threadHeapMode; | |
|
nhiroki
2016/09/21 05:32:59
Can you add 'const' for clarifying that the heap m
keishi
2016/09/21 09:16:11
Done.
| |
| 342 }; | 346 }; |
| 343 | 347 |
| 344 class ThreadableLoaderTest : public ::testing::TestWithParam<ThreadableLoaderToT est> { | 348 class ThreadableLoaderTest : public ::testing::TestWithParam<ThreadableLoaderToT est> { |
| 345 public: | 349 public: |
| 346 ThreadableLoaderTest() | 350 ThreadableLoaderTest() |
| 347 { | 351 { |
| 348 switch (GetParam()) { | 352 switch (GetParam()) { |
| 349 case DocumentThreadableLoaderTest: | 353 case DocumentThreadableLoaderTest: |
| 350 m_helper = wrapUnique(new DocumentThreadableLoaderTestHelper); | 354 m_helper = wrapUnique(new DocumentThreadableLoaderTestHelper); |
| 351 break; | 355 break; |
| 352 case WorkerThreadableLoaderTest: | 356 case WorkerThreadableLoaderTest: |
| 353 m_helper = wrapUnique(new WorkerThreadableLoaderTestHelper); | 357 m_helper = wrapUnique(new WorkerThreadableLoaderTestHelper(MainThrea dHeapMode)); |
| 358 break; | |
| 359 case PerThreadHeapEnabledWorkerThreadableLoaderTest: | |
| 360 m_helper = wrapUnique(new WorkerThreadableLoaderTestHelper(PerThread HeapMode)); | |
| 354 break; | 361 break; |
| 355 } | 362 } |
| 356 } | 363 } |
| 357 | 364 |
| 358 void startLoader(const KURL& url) | 365 void startLoader(const KURL& url) |
| 359 { | 366 { |
| 360 ResourceRequest request(url); | 367 ResourceRequest request(url); |
| 361 request.setRequestContext(WebURLRequest::RequestContextObject); | 368 request.setRequestContext(WebURLRequest::RequestContextObject); |
| 362 m_helper->startLoader(request); | 369 m_helper->startLoader(request); |
| 363 } | 370 } |
| (...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 450 }; | 457 }; |
| 451 | 458 |
| 452 INSTANTIATE_TEST_CASE_P(Document, | 459 INSTANTIATE_TEST_CASE_P(Document, |
| 453 ThreadableLoaderTest, | 460 ThreadableLoaderTest, |
| 454 ::testing::Values(DocumentThreadableLoaderTest)); | 461 ::testing::Values(DocumentThreadableLoaderTest)); |
| 455 | 462 |
| 456 INSTANTIATE_TEST_CASE_P(Worker, | 463 INSTANTIATE_TEST_CASE_P(Worker, |
| 457 ThreadableLoaderTest, | 464 ThreadableLoaderTest, |
| 458 ::testing::Values(WorkerThreadableLoaderTest)); | 465 ::testing::Values(WorkerThreadableLoaderTest)); |
| 459 | 466 |
| 467 INSTANTIATE_TEST_CASE_P(PerThreadHeapEnabledWorker, | |
| 468 ThreadableLoaderTest, | |
| 469 ::testing::Values(PerThreadHeapEnabledWorkerThreadableLoaderTest)); | |
| 470 | |
| 460 TEST_P(ThreadableLoaderTest, StartAndStop) | 471 TEST_P(ThreadableLoaderTest, StartAndStop) |
| 461 { | 472 { |
| 462 } | 473 } |
| 463 | 474 |
| 464 TEST_P(ThreadableLoaderTest, CancelAfterStart) | 475 TEST_P(ThreadableLoaderTest, CancelAfterStart) |
| 465 { | 476 { |
| 466 InSequence s; | 477 InSequence s; |
| 467 EXPECT_CALL(checkpoint(), Call(1)); | 478 EXPECT_CALL(checkpoint(), Call(1)); |
| 468 createLoader(); | 479 createLoader(); |
| 469 callCheckpoint(1); | 480 callCheckpoint(1); |
| (...skipping 401 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 871 // test is not saying that didFailAccessControlCheck should be dispatched | 882 // test is not saying that didFailAccessControlCheck should be dispatched |
| 872 // synchronously, but is saying that even when a response is served | 883 // synchronously, but is saying that even when a response is served |
| 873 // synchronously it should not lead to a crash. | 884 // synchronously it should not lead to a crash. |
| 874 startLoader(KURL(KURL(), "about:blank")); | 885 startLoader(KURL(KURL(), "about:blank")); |
| 875 callCheckpoint(2); | 886 callCheckpoint(2); |
| 876 } | 887 } |
| 877 | 888 |
| 878 } // namespace | 889 } // namespace |
| 879 | 890 |
| 880 } // namespace blink | 891 } // namespace blink |
| OLD | NEW |