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 |