| 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/CrossThreadTask.h" | 7 #include "core/dom/CrossThreadTask.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 145 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 156 WorkerThreadableLoaderTestHelper() | 156 WorkerThreadableLoaderTestHelper() |
| 157 : m_dummyPageHolder(DummyPageHolder::create(IntSize(1, 1))) | 157 : m_dummyPageHolder(DummyPageHolder::create(IntSize(1, 1))) |
| 158 { | 158 { |
| 159 } | 159 } |
| 160 | 160 |
| 161 void createLoader(ThreadableLoaderClient* client, CrossOriginRequestPolicy c
rossOriginRequestPolicy) override | 161 void createLoader(ThreadableLoaderClient* client, CrossOriginRequestPolicy c
rossOriginRequestPolicy) override |
| 162 { | 162 { |
| 163 std::unique_ptr<WaitableEvent> completionEvent = wrapUnique(new Waitable
Event()); | 163 std::unique_ptr<WaitableEvent> completionEvent = wrapUnique(new Waitable
Event()); |
| 164 postTaskToWorkerGlobalScope(createCrossThreadTask( | 164 postTaskToWorkerGlobalScope(createCrossThreadTask( |
| 165 &WorkerThreadableLoaderTestHelper::workerCreateLoader, | 165 &WorkerThreadableLoaderTestHelper::workerCreateLoader, |
| 166 AllowCrossThreadAccess(this), | 166 crossThreadUnretained(this), |
| 167 AllowCrossThreadAccess(client), | 167 crossThreadUnretained(client), |
| 168 AllowCrossThreadAccess(completionEvent.get()), | 168 crossThreadUnretained(completionEvent.get()), |
| 169 crossOriginRequestPolicy)); | 169 crossOriginRequestPolicy)); |
| 170 completionEvent->wait(); | 170 completionEvent->wait(); |
| 171 } | 171 } |
| 172 | 172 |
| 173 void startLoader(const ResourceRequest& request) override | 173 void startLoader(const ResourceRequest& request) override |
| 174 { | 174 { |
| 175 std::unique_ptr<WaitableEvent> completionEvent = wrapUnique(new Waitable
Event()); | 175 std::unique_ptr<WaitableEvent> completionEvent = wrapUnique(new Waitable
Event()); |
| 176 postTaskToWorkerGlobalScope(createCrossThreadTask( | 176 postTaskToWorkerGlobalScope(createCrossThreadTask( |
| 177 &WorkerThreadableLoaderTestHelper::workerStartLoader, | 177 &WorkerThreadableLoaderTestHelper::workerStartLoader, |
| 178 AllowCrossThreadAccess(this), | 178 crossThreadUnretained(this), |
| 179 AllowCrossThreadAccess(completionEvent.get()), | 179 crossThreadUnretained(completionEvent.get()), |
| 180 request)); | 180 request)); |
| 181 completionEvent->wait(); | 181 completionEvent->wait(); |
| 182 } | 182 } |
| 183 | 183 |
| 184 // Must be called on the worker thread. | 184 // Must be called on the worker thread. |
| 185 void cancelLoader() override | 185 void cancelLoader() override |
| 186 { | 186 { |
| 187 ASSERT(m_workerThread); | 187 ASSERT(m_workerThread); |
| 188 ASSERT(m_workerThread->isCurrentThread()); | 188 ASSERT(m_workerThread->isCurrentThread()); |
| 189 m_loader->cancel(); | 189 m_loader->cancel(); |
| (...skipping 12 matching lines...) Expand all Loading... |
| 202 return m_checkpoint; | 202 return m_checkpoint; |
| 203 } | 203 } |
| 204 | 204 |
| 205 void callCheckpoint(int n) override | 205 void callCheckpoint(int n) override |
| 206 { | 206 { |
| 207 testing::runPendingTasks(); | 207 testing::runPendingTasks(); |
| 208 | 208 |
| 209 std::unique_ptr<WaitableEvent> completionEvent = wrapUnique(new Waitable
Event()); | 209 std::unique_ptr<WaitableEvent> completionEvent = wrapUnique(new Waitable
Event()); |
| 210 postTaskToWorkerGlobalScope(createCrossThreadTask( | 210 postTaskToWorkerGlobalScope(createCrossThreadTask( |
| 211 &WorkerThreadableLoaderTestHelper::workerCallCheckpoint, | 211 &WorkerThreadableLoaderTestHelper::workerCallCheckpoint, |
| 212 AllowCrossThreadAccess(this), | 212 crossThreadUnretained(this), |
| 213 AllowCrossThreadAccess(completionEvent.get()), | 213 crossThreadUnretained(completionEvent.get()), |
| 214 n)); | 214 n)); |
| 215 completionEvent->wait(); | 215 completionEvent->wait(); |
| 216 } | 216 } |
| 217 | 217 |
| 218 void onSetUp() override | 218 void onSetUp() override |
| 219 { | 219 { |
| 220 m_mockWorkerReportingProxy = wrapUnique(new MockWorkerReportingProxy()); | 220 m_mockWorkerReportingProxy = wrapUnique(new MockWorkerReportingProxy()); |
| 221 m_securityOrigin = document().getSecurityOrigin(); | 221 m_securityOrigin = document().getSecurityOrigin(); |
| 222 m_workerThread = wrapUnique(new WorkerThreadForTest( | 222 m_workerThread = wrapUnique(new WorkerThreadForTest( |
| 223 this, | 223 this, |
| 224 *m_mockWorkerReportingProxy)); | 224 *m_mockWorkerReportingProxy)); |
| 225 | 225 |
| 226 expectWorkerLifetimeReportingCalls(); | 226 expectWorkerLifetimeReportingCalls(); |
| 227 m_workerThread->startWithSourceCode(m_securityOrigin.get(), "//fake sour
ce code"); | 227 m_workerThread->startWithSourceCode(m_securityOrigin.get(), "//fake sour
ce code"); |
| 228 m_workerThread->waitForInit(); | 228 m_workerThread->waitForInit(); |
| 229 } | 229 } |
| 230 | 230 |
| 231 void onServeRequests() override | 231 void onServeRequests() override |
| 232 { | 232 { |
| 233 testing::runPendingTasks(); | 233 testing::runPendingTasks(); |
| 234 } | 234 } |
| 235 | 235 |
| 236 void onTearDown() override | 236 void onTearDown() override |
| 237 { | 237 { |
| 238 postTaskToWorkerGlobalScope(createCrossThreadTask(&WorkerThreadableLoade
rTestHelper::clearLoader, AllowCrossThreadAccess(this))); | 238 postTaskToWorkerGlobalScope(createCrossThreadTask(&WorkerThreadableLoade
rTestHelper::clearLoader, crossThreadUnretained(this))); |
| 239 m_workerThread->terminateAndWait(); | 239 m_workerThread->terminateAndWait(); |
| 240 | 240 |
| 241 // Needed to clean up the things on the main thread side and | 241 // Needed to clean up the things on the main thread side and |
| 242 // avoid Resource leaks. | 242 // avoid Resource leaks. |
| 243 testing::runPendingTasks(); | 243 testing::runPendingTasks(); |
| 244 | 244 |
| 245 m_workerThread->workerLoaderProxy()->detachProvider(this); | 245 m_workerThread->workerLoaderProxy()->detachProvider(this); |
| 246 } | 246 } |
| 247 | 247 |
| 248 private: | 248 private: |
| (...skipping 584 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 833 EXPECT_CALL(*client(), didFailRedirectCheck()).WillOnce(InvokeWithoutArgs(th
is, &ThreadableLoaderTest::clearLoader)); | 833 EXPECT_CALL(*client(), didFailRedirectCheck()).WillOnce(InvokeWithoutArgs(th
is, &ThreadableLoaderTest::clearLoader)); |
| 834 | 834 |
| 835 startLoader(redirectLoopURL()); | 835 startLoader(redirectLoopURL()); |
| 836 callCheckpoint(2); | 836 callCheckpoint(2); |
| 837 serveRequests(); | 837 serveRequests(); |
| 838 } | 838 } |
| 839 | 839 |
| 840 } // namespace | 840 } // namespace |
| 841 | 841 |
| 842 } // namespace blink | 842 } // namespace blink |
| OLD | NEW |