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 11 matching lines...) Expand all Loading... | |
| 22 #include "platform/testing/URLTestHelpers.h" | 22 #include "platform/testing/URLTestHelpers.h" |
| 23 #include "platform/testing/UnitTestHelpers.h" | 23 #include "platform/testing/UnitTestHelpers.h" |
| 24 #include "platform/weborigin/KURL.h" | 24 #include "platform/weborigin/KURL.h" |
| 25 #include "platform/weborigin/SecurityOrigin.h" | 25 #include "platform/weborigin/SecurityOrigin.h" |
| 26 #include "public/platform/Platform.h" | 26 #include "public/platform/Platform.h" |
| 27 #include "public/platform/WebURLLoadTiming.h" | 27 #include "public/platform/WebURLLoadTiming.h" |
| 28 #include "public/platform/WebURLLoaderMockFactory.h" | 28 #include "public/platform/WebURLLoaderMockFactory.h" |
| 29 #include "public/platform/WebURLResponse.h" | 29 #include "public/platform/WebURLResponse.h" |
| 30 #include "testing/gmock/include/gmock/gmock.h" | 30 #include "testing/gmock/include/gmock/gmock.h" |
| 31 #include "testing/gtest/include/gtest/gtest.h" | 31 #include "testing/gtest/include/gtest/gtest.h" |
| 32 #include "wtf/Assertions.h" | 32 #include "wtf/Assertions.h" |
|
yhirano
2017/01/19 10:54:29
+wtf/Functional.h
nhiroki
2017/01/19 14:02:34
Done.
| |
| 33 #include "wtf/PtrUtil.h" | 33 #include "wtf/PtrUtil.h" |
| 34 #include "wtf/RefPtr.h" | 34 #include "wtf/RefPtr.h" |
| 35 #include <memory> | 35 #include <memory> |
| 36 | 36 |
| 37 namespace blink { | 37 namespace blink { |
| 38 | 38 |
| 39 namespace { | 39 namespace { |
| 40 | 40 |
| 41 using ::testing::_; | 41 using ::testing::_; |
| 42 using ::testing::InSequence; | 42 using ::testing::InSequence; |
| (...skipping 128 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 171 WorkerThreadableLoaderTestHelper() | 171 WorkerThreadableLoaderTestHelper() |
| 172 : m_dummyPageHolder(DummyPageHolder::create(IntSize(1, 1))) {} | 172 : m_dummyPageHolder(DummyPageHolder::create(IntSize(1, 1))) {} |
| 173 | 173 |
| 174 void createLoader( | 174 void createLoader( |
| 175 ThreadableLoaderClient* client, | 175 ThreadableLoaderClient* client, |
| 176 CrossOriginRequestPolicy crossOriginRequestPolicy) override { | 176 CrossOriginRequestPolicy crossOriginRequestPolicy) override { |
| 177 std::unique_ptr<WaitableEvent> completionEvent = | 177 std::unique_ptr<WaitableEvent> completionEvent = |
| 178 WTF::makeUnique<WaitableEvent>(); | 178 WTF::makeUnique<WaitableEvent>(); |
| 179 postTaskToWorkerGlobalScope( | 179 postTaskToWorkerGlobalScope( |
| 180 BLINK_FROM_HERE, | 180 BLINK_FROM_HERE, |
| 181 createCrossThreadTask( | 181 crossThreadBind(&WorkerThreadableLoaderTestHelper::workerCreateLoader, |
| 182 &WorkerThreadableLoaderTestHelper::workerCreateLoader, | 182 crossThreadUnretained(this), |
| 183 crossThreadUnretained(this), crossThreadUnretained(client), | 183 crossThreadUnretained(client), |
| 184 crossThreadUnretained(completionEvent.get()), | 184 crossThreadUnretained(completionEvent.get()), |
| 185 crossOriginRequestPolicy)); | 185 crossOriginRequestPolicy)); |
| 186 completionEvent->wait(); | 186 completionEvent->wait(); |
| 187 } | 187 } |
| 188 | 188 |
| 189 void startLoader(const ResourceRequest& request) override { | 189 void startLoader(const ResourceRequest& request) override { |
| 190 std::unique_ptr<WaitableEvent> completionEvent = | 190 std::unique_ptr<WaitableEvent> completionEvent = |
| 191 WTF::makeUnique<WaitableEvent>(); | 191 WTF::makeUnique<WaitableEvent>(); |
| 192 postTaskToWorkerGlobalScope( | 192 postTaskToWorkerGlobalScope( |
| 193 BLINK_FROM_HERE, | 193 BLINK_FROM_HERE, |
| 194 createCrossThreadTask( | 194 crossThreadBind(&WorkerThreadableLoaderTestHelper::workerStartLoader, |
| 195 &WorkerThreadableLoaderTestHelper::workerStartLoader, | 195 crossThreadUnretained(this), |
| 196 crossThreadUnretained(this), | 196 crossThreadUnretained(completionEvent.get()), request)); |
| 197 crossThreadUnretained(completionEvent.get()), request)); | |
| 198 completionEvent->wait(); | 197 completionEvent->wait(); |
| 199 } | 198 } |
| 200 | 199 |
| 201 // Must be called on the worker thread. | 200 // Must be called on the worker thread. |
| 202 void cancelLoader() override { | 201 void cancelLoader() override { |
| 203 DCHECK(m_workerThread); | 202 DCHECK(m_workerThread); |
| 204 DCHECK(m_workerThread->isCurrentThread()); | 203 DCHECK(m_workerThread->isCurrentThread()); |
| 205 m_loader->cancel(); | 204 m_loader->cancel(); |
| 206 } | 205 } |
| 207 | 206 |
| (...skipping 13 matching lines...) Expand all Loading... | |
| 221 | 220 |
| 222 Checkpoint& checkpoint() override { return m_checkpoint; } | 221 Checkpoint& checkpoint() override { return m_checkpoint; } |
| 223 | 222 |
| 224 void callCheckpoint(int n) override { | 223 void callCheckpoint(int n) override { |
| 225 testing::runPendingTasks(); | 224 testing::runPendingTasks(); |
| 226 | 225 |
| 227 std::unique_ptr<WaitableEvent> completionEvent = | 226 std::unique_ptr<WaitableEvent> completionEvent = |
| 228 WTF::makeUnique<WaitableEvent>(); | 227 WTF::makeUnique<WaitableEvent>(); |
| 229 postTaskToWorkerGlobalScope( | 228 postTaskToWorkerGlobalScope( |
| 230 BLINK_FROM_HERE, | 229 BLINK_FROM_HERE, |
| 231 createCrossThreadTask( | 230 crossThreadBind(&WorkerThreadableLoaderTestHelper::workerCallCheckpoint, |
| 232 &WorkerThreadableLoaderTestHelper::workerCallCheckpoint, | 231 crossThreadUnretained(this), |
| 233 crossThreadUnretained(this), | 232 crossThreadUnretained(completionEvent.get()), n)); |
| 234 crossThreadUnretained(completionEvent.get()), n)); | |
| 235 completionEvent->wait(); | 233 completionEvent->wait(); |
| 236 } | 234 } |
| 237 | 235 |
| 238 void onSetUp() override { | 236 void onSetUp() override { |
| 239 m_mockWorkerReportingProxy = WTF::makeUnique<MockWorkerReportingProxy>(); | 237 m_mockWorkerReportingProxy = WTF::makeUnique<MockWorkerReportingProxy>(); |
| 240 m_securityOrigin = document().getSecurityOrigin(); | 238 m_securityOrigin = document().getSecurityOrigin(); |
| 241 m_parentFrameTaskRunners = | 239 m_parentFrameTaskRunners = |
| 242 ParentFrameTaskRunners::create(&m_dummyPageHolder->frame()); | 240 ParentFrameTaskRunners::create(&m_dummyPageHolder->frame()); |
| 243 m_workerThread = WTF::wrapUnique( | 241 m_workerThread = WTF::wrapUnique( |
| 244 new WorkerThreadForTest(this, *m_mockWorkerReportingProxy)); | 242 new WorkerThreadForTest(this, *m_mockWorkerReportingProxy)); |
| 245 | 243 |
| 246 expectWorkerLifetimeReportingCalls(); | 244 expectWorkerLifetimeReportingCalls(); |
| 247 m_workerThread->startWithSourceCode(m_securityOrigin.get(), | 245 m_workerThread->startWithSourceCode(m_securityOrigin.get(), |
| 248 "//fake source code"); | 246 "//fake source code"); |
| 249 m_workerThread->waitForInit(); | 247 m_workerThread->waitForInit(); |
| 250 } | 248 } |
| 251 | 249 |
| 252 void onServeRequests() override { testing::runPendingTasks(); } | 250 void onServeRequests() override { testing::runPendingTasks(); } |
| 253 | 251 |
| 254 void onTearDown() override { | 252 void onTearDown() override { |
| 255 postTaskToWorkerGlobalScope( | 253 postTaskToWorkerGlobalScope( |
| 256 BLINK_FROM_HERE, | 254 BLINK_FROM_HERE, |
| 257 createCrossThreadTask(&WorkerThreadableLoaderTestHelper::clearLoader, | 255 crossThreadBind(&WorkerThreadableLoaderTestHelper::clearLoader, |
| 258 crossThreadUnretained(this))); | 256 crossThreadUnretained(this))); |
| 259 WaitableEvent event; | 257 WaitableEvent event; |
| 260 postTaskToWorkerGlobalScope( | 258 postTaskToWorkerGlobalScope( |
| 261 BLINK_FROM_HERE, createCrossThreadTask(&WaitableEvent::signal, | 259 BLINK_FROM_HERE, |
| 262 crossThreadUnretained(&event))); | 260 crossThreadBind(&WaitableEvent::signal, crossThreadUnretained(&event))); |
| 263 event.wait(); | 261 event.wait(); |
| 264 m_workerThread->terminateAndWait(); | 262 m_workerThread->terminateAndWait(); |
| 265 | 263 |
| 266 // Needed to clean up the things on the main thread side and | 264 // Needed to clean up the things on the main thread side and |
| 267 // avoid Resource leaks. | 265 // avoid Resource leaks. |
| 268 testing::runPendingTasks(); | 266 testing::runPendingTasks(); |
| 269 | 267 |
| 270 m_workerThread->workerLoaderProxy()->detachProvider(this); | 268 m_workerThread->workerLoaderProxy()->detachProvider(this); |
| 271 } | 269 } |
| 272 | 270 |
| (...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 333 m_parentFrameTaskRunners->get(TaskType::Networking) | 331 m_parentFrameTaskRunners->get(TaskType::Networking) |
| 334 ->postTask( | 332 ->postTask( |
| 335 BLINK_FROM_HERE, | 333 BLINK_FROM_HERE, |
| 336 crossThreadBind(&ExecutionContextTask::performTaskIfContextIsValid, | 334 crossThreadBind(&ExecutionContextTask::performTaskIfContextIsValid, |
| 337 WTF::passed(std::move(task)), | 335 WTF::passed(std::move(task)), |
| 338 wrapCrossThreadWeakPersistent(&document()))); | 336 wrapCrossThreadWeakPersistent(&document()))); |
| 339 } | 337 } |
| 340 | 338 |
| 341 void postTaskToWorkerGlobalScope( | 339 void postTaskToWorkerGlobalScope( |
| 342 const WebTraceLocation& location, | 340 const WebTraceLocation& location, |
| 343 std::unique_ptr<ExecutionContextTask> task) override { | 341 std::unique_ptr<WTF::CrossThreadClosure> task) override { |
| 344 DCHECK(m_workerThread); | 342 DCHECK(m_workerThread); |
| 345 m_workerThread->postTask(location, std::move(task)); | 343 m_workerThread->postTask(location, std::move(task)); |
| 346 } | 344 } |
| 347 | 345 |
| 348 RefPtr<SecurityOrigin> m_securityOrigin; | 346 RefPtr<SecurityOrigin> m_securityOrigin; |
| 349 std::unique_ptr<MockWorkerReportingProxy> m_mockWorkerReportingProxy; | 347 std::unique_ptr<MockWorkerReportingProxy> m_mockWorkerReportingProxy; |
| 350 std::unique_ptr<WorkerThreadForTest> m_workerThread; | 348 std::unique_ptr<WorkerThreadForTest> m_workerThread; |
| 351 | 349 |
| 352 std::unique_ptr<DummyPageHolder> m_dummyPageHolder; | 350 std::unique_ptr<DummyPageHolder> m_dummyPageHolder; |
| 353 Persistent<ParentFrameTaskRunners> m_parentFrameTaskRunners; | 351 Persistent<ParentFrameTaskRunners> m_parentFrameTaskRunners; |
| (...skipping 529 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 883 // test is not saying that didFailAccessControlCheck should be dispatched | 881 // test is not saying that didFailAccessControlCheck should be dispatched |
| 884 // synchronously, but is saying that even when a response is served | 882 // synchronously, but is saying that even when a response is served |
| 885 // synchronously it should not lead to a crash. | 883 // synchronously it should not lead to a crash. |
| 886 startLoader(KURL(KURL(), "about:blank")); | 884 startLoader(KURL(KURL(), "about:blank")); |
| 887 callCheckpoint(2); | 885 callCheckpoint(2); |
| 888 } | 886 } |
| 889 | 887 |
| 890 } // namespace | 888 } // namespace |
| 891 | 889 |
| 892 } // namespace blink | 890 } // namespace blink |
| OLD | NEW |