| 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 30 matching lines...) Expand all Loading... |
| 41 using ::testing::_; | 41 using ::testing::_; |
| 42 using ::testing::InSequence; | 42 using ::testing::InSequence; |
| 43 using ::testing::InvokeWithoutArgs; | 43 using ::testing::InvokeWithoutArgs; |
| 44 using ::testing::StrEq; | 44 using ::testing::StrEq; |
| 45 using ::testing::Truly; | 45 using ::testing::Truly; |
| 46 using Checkpoint = ::testing::StrictMock<::testing::MockFunction<void(int)>>; | 46 using Checkpoint = ::testing::StrictMock<::testing::MockFunction<void(int)>>; |
| 47 | 47 |
| 48 class MockThreadableLoaderClient : public ThreadableLoaderClient { | 48 class MockThreadableLoaderClient : public ThreadableLoaderClient { |
| 49 public: | 49 public: |
| 50 static std::unique_ptr<MockThreadableLoaderClient> create() { | 50 static std::unique_ptr<MockThreadableLoaderClient> create() { |
| 51 return wrapUnique(new ::testing::StrictMock<MockThreadableLoaderClient>); | 51 return WTF::wrapUnique( |
| 52 new ::testing::StrictMock<MockThreadableLoaderClient>); |
| 52 } | 53 } |
| 53 MOCK_METHOD2(didSendData, void(unsigned long long, unsigned long long)); | 54 MOCK_METHOD2(didSendData, void(unsigned long long, unsigned long long)); |
| 54 MOCK_METHOD3(didReceiveResponseMock, | 55 MOCK_METHOD3(didReceiveResponseMock, |
| 55 void(unsigned long, | 56 void(unsigned long, |
| 56 const ResourceResponse&, | 57 const ResourceResponse&, |
| 57 WebDataConsumerHandle*)); | 58 WebDataConsumerHandle*)); |
| 58 void didReceiveResponse(unsigned long identifier, | 59 void didReceiveResponse(unsigned long identifier, |
| 59 const ResourceResponse& response, | 60 const ResourceResponse& response, |
| 60 std::unique_ptr<WebDataConsumerHandle> handle) { | 61 std::unique_ptr<WebDataConsumerHandle> handle) { |
| 61 didReceiveResponseMock(identifier, response, handle.get()); | 62 didReceiveResponseMock(identifier, response, handle.get()); |
| (...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 169 public: | 170 public: |
| 170 explicit WorkerThreadableLoaderTestHelper( | 171 explicit WorkerThreadableLoaderTestHelper( |
| 171 BlinkGC::ThreadHeapMode threadHeapMode) | 172 BlinkGC::ThreadHeapMode threadHeapMode) |
| 172 : m_dummyPageHolder(DummyPageHolder::create(IntSize(1, 1))), | 173 : m_dummyPageHolder(DummyPageHolder::create(IntSize(1, 1))), |
| 173 m_threadHeapMode(threadHeapMode) {} | 174 m_threadHeapMode(threadHeapMode) {} |
| 174 | 175 |
| 175 void createLoader( | 176 void createLoader( |
| 176 ThreadableLoaderClient* client, | 177 ThreadableLoaderClient* client, |
| 177 CrossOriginRequestPolicy crossOriginRequestPolicy) override { | 178 CrossOriginRequestPolicy crossOriginRequestPolicy) override { |
| 178 std::unique_ptr<WaitableEvent> completionEvent = | 179 std::unique_ptr<WaitableEvent> completionEvent = |
| 179 makeUnique<WaitableEvent>(); | 180 WTF::makeUnique<WaitableEvent>(); |
| 180 postTaskToWorkerGlobalScope( | 181 postTaskToWorkerGlobalScope( |
| 181 BLINK_FROM_HERE, | 182 BLINK_FROM_HERE, |
| 182 createCrossThreadTask( | 183 createCrossThreadTask( |
| 183 &WorkerThreadableLoaderTestHelper::workerCreateLoader, | 184 &WorkerThreadableLoaderTestHelper::workerCreateLoader, |
| 184 crossThreadUnretained(this), crossThreadUnretained(client), | 185 crossThreadUnretained(this), crossThreadUnretained(client), |
| 185 crossThreadUnretained(completionEvent.get()), | 186 crossThreadUnretained(completionEvent.get()), |
| 186 crossOriginRequestPolicy)); | 187 crossOriginRequestPolicy)); |
| 187 completionEvent->wait(); | 188 completionEvent->wait(); |
| 188 } | 189 } |
| 189 | 190 |
| 190 void startLoader(const ResourceRequest& request) override { | 191 void startLoader(const ResourceRequest& request) override { |
| 191 std::unique_ptr<WaitableEvent> completionEvent = | 192 std::unique_ptr<WaitableEvent> completionEvent = |
| 192 makeUnique<WaitableEvent>(); | 193 WTF::makeUnique<WaitableEvent>(); |
| 193 postTaskToWorkerGlobalScope( | 194 postTaskToWorkerGlobalScope( |
| 194 BLINK_FROM_HERE, | 195 BLINK_FROM_HERE, |
| 195 createCrossThreadTask( | 196 createCrossThreadTask( |
| 196 &WorkerThreadableLoaderTestHelper::workerStartLoader, | 197 &WorkerThreadableLoaderTestHelper::workerStartLoader, |
| 197 crossThreadUnretained(this), | 198 crossThreadUnretained(this), |
| 198 crossThreadUnretained(completionEvent.get()), request)); | 199 crossThreadUnretained(completionEvent.get()), request)); |
| 199 completionEvent->wait(); | 200 completionEvent->wait(); |
| 200 } | 201 } |
| 201 | 202 |
| 202 // Must be called on the worker thread. | 203 // Must be called on the worker thread. |
| (...skipping 16 matching lines...) Expand all Loading... |
| 219 DCHECK(m_workerThread->isCurrentThread()); | 220 DCHECK(m_workerThread->isCurrentThread()); |
| 220 m_loader = nullptr; | 221 m_loader = nullptr; |
| 221 } | 222 } |
| 222 | 223 |
| 223 Checkpoint& checkpoint() override { return m_checkpoint; } | 224 Checkpoint& checkpoint() override { return m_checkpoint; } |
| 224 | 225 |
| 225 void callCheckpoint(int n) override { | 226 void callCheckpoint(int n) override { |
| 226 testing::runPendingTasks(); | 227 testing::runPendingTasks(); |
| 227 | 228 |
| 228 std::unique_ptr<WaitableEvent> completionEvent = | 229 std::unique_ptr<WaitableEvent> completionEvent = |
| 229 makeUnique<WaitableEvent>(); | 230 WTF::makeUnique<WaitableEvent>(); |
| 230 postTaskToWorkerGlobalScope( | 231 postTaskToWorkerGlobalScope( |
| 231 BLINK_FROM_HERE, | 232 BLINK_FROM_HERE, |
| 232 createCrossThreadTask( | 233 createCrossThreadTask( |
| 233 &WorkerThreadableLoaderTestHelper::workerCallCheckpoint, | 234 &WorkerThreadableLoaderTestHelper::workerCallCheckpoint, |
| 234 crossThreadUnretained(this), | 235 crossThreadUnretained(this), |
| 235 crossThreadUnretained(completionEvent.get()), n)); | 236 crossThreadUnretained(completionEvent.get()), n)); |
| 236 completionEvent->wait(); | 237 completionEvent->wait(); |
| 237 } | 238 } |
| 238 | 239 |
| 239 void onSetUp() override { | 240 void onSetUp() override { |
| 240 m_mockWorkerReportingProxy = makeUnique<MockWorkerReportingProxy>(); | 241 m_mockWorkerReportingProxy = WTF::makeUnique<MockWorkerReportingProxy>(); |
| 241 m_securityOrigin = document().getSecurityOrigin(); | 242 m_securityOrigin = document().getSecurityOrigin(); |
| 242 m_workerThread = wrapUnique(new WorkerThreadForTest( | 243 m_workerThread = WTF::wrapUnique(new WorkerThreadForTest( |
| 243 this, *m_mockWorkerReportingProxy, m_threadHeapMode)); | 244 this, *m_mockWorkerReportingProxy, m_threadHeapMode)); |
| 244 | 245 |
| 245 expectWorkerLifetimeReportingCalls(); | 246 expectWorkerLifetimeReportingCalls(); |
| 246 m_workerThread->startWithSourceCode(m_securityOrigin.get(), | 247 m_workerThread->startWithSourceCode(m_securityOrigin.get(), |
| 247 "//fake source code"); | 248 "//fake source code"); |
| 248 m_workerThread->waitForInit(); | 249 m_workerThread->waitForInit(); |
| 249 } | 250 } |
| 250 | 251 |
| 251 void onServeRequests() override { testing::runPendingTasks(); } | 252 void onServeRequests() override { testing::runPendingTasks(); } |
| 252 | 253 |
| (...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 348 CrossThreadPersistent<ThreadableLoader> m_loader; | 349 CrossThreadPersistent<ThreadableLoader> m_loader; |
| 349 const BlinkGC::ThreadHeapMode m_threadHeapMode; | 350 const BlinkGC::ThreadHeapMode m_threadHeapMode; |
| 350 }; | 351 }; |
| 351 | 352 |
| 352 class ThreadableLoaderTest | 353 class ThreadableLoaderTest |
| 353 : public ::testing::TestWithParam<ThreadableLoaderToTest> { | 354 : public ::testing::TestWithParam<ThreadableLoaderToTest> { |
| 354 public: | 355 public: |
| 355 ThreadableLoaderTest() { | 356 ThreadableLoaderTest() { |
| 356 switch (GetParam()) { | 357 switch (GetParam()) { |
| 357 case DocumentThreadableLoaderTest: | 358 case DocumentThreadableLoaderTest: |
| 358 m_helper = wrapUnique(new DocumentThreadableLoaderTestHelper); | 359 m_helper = WTF::wrapUnique(new DocumentThreadableLoaderTestHelper); |
| 359 break; | 360 break; |
| 360 case WorkerThreadableLoaderTest: | 361 case WorkerThreadableLoaderTest: |
| 361 m_helper = wrapUnique( | 362 m_helper = WTF::wrapUnique( |
| 362 new WorkerThreadableLoaderTestHelper(BlinkGC::MainThreadHeapMode)); | 363 new WorkerThreadableLoaderTestHelper(BlinkGC::MainThreadHeapMode)); |
| 363 break; | 364 break; |
| 364 case PerThreadHeapEnabledWorkerThreadableLoaderTest: | 365 case PerThreadHeapEnabledWorkerThreadableLoaderTest: |
| 365 m_helper = wrapUnique( | 366 m_helper = WTF::wrapUnique( |
| 366 new WorkerThreadableLoaderTestHelper(BlinkGC::PerThreadHeapMode)); | 367 new WorkerThreadableLoaderTestHelper(BlinkGC::PerThreadHeapMode)); |
| 367 break; | 368 break; |
| 368 } | 369 } |
| 369 } | 370 } |
| 370 | 371 |
| 371 void startLoader(const KURL& url) { | 372 void startLoader(const KURL& url) { |
| 372 ResourceRequest request(url); | 373 ResourceRequest request(url); |
| 373 request.setRequestContext(WebURLRequest::RequestContextObject); | 374 request.setRequestContext(WebURLRequest::RequestContextObject); |
| 374 m_helper->startLoader(request); | 375 m_helper->startLoader(request); |
| 375 } | 376 } |
| (...skipping 510 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 886 // test is not saying that didFailAccessControlCheck should be dispatched | 887 // test is not saying that didFailAccessControlCheck should be dispatched |
| 887 // synchronously, but is saying that even when a response is served | 888 // synchronously, but is saying that even when a response is served |
| 888 // synchronously it should not lead to a crash. | 889 // synchronously it should not lead to a crash. |
| 889 startLoader(KURL(KURL(), "about:blank")); | 890 startLoader(KURL(KURL(), "about:blank")); |
| 890 callCheckpoint(2); | 891 callCheckpoint(2); |
| 891 } | 892 } |
| 892 | 893 |
| 893 } // namespace | 894 } // namespace |
| 894 | 895 |
| 895 } // namespace blink | 896 } // namespace blink |
| OLD | NEW |