Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(23)

Side by Side Diff: third_party/WebKit/Source/core/loader/ThreadableLoaderTest.cpp

Issue 2840473002: Worker: Remove WorkerLoaderProxy for clean-up (Closed)
Patch Set: wip Created 3 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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 <memory> 7 #include <memory>
8 #include "core/dom/TaskRunnerHelper.h" 8 #include "core/dom/TaskRunnerHelper.h"
9 #include "core/loader/DocumentThreadableLoader.h" 9 #include "core/loader/DocumentThreadableLoader.h"
10 #include "core/loader/ThreadableLoaderClient.h" 10 #include "core/loader/ThreadableLoaderClient.h"
11 #include "core/loader/ThreadableLoadingContext.h" 11 #include "core/loader/ThreadableLoadingContext.h"
12 #include "core/loader/WorkerThreadableLoader.h" 12 #include "core/loader/WorkerThreadableLoader.h"
13 #include "core/testing/DummyPageHolder.h" 13 #include "core/testing/DummyPageHolder.h"
14 #include "core/workers/WorkerLoaderProxy.h"
15 #include "core/workers/WorkerReportingProxy.h" 14 #include "core/workers/WorkerReportingProxy.h"
16 #include "core/workers/WorkerThreadTestHelper.h" 15 #include "core/workers/WorkerThreadTestHelper.h"
17 #include "platform/WaitableEvent.h" 16 #include "platform/WaitableEvent.h"
18 #include "platform/geometry/IntSize.h" 17 #include "platform/geometry/IntSize.h"
19 #include "platform/loader/fetch/MemoryCache.h" 18 #include "platform/loader/fetch/MemoryCache.h"
20 #include "platform/loader/fetch/ResourceError.h" 19 #include "platform/loader/fetch/ResourceError.h"
21 #include "platform/loader/fetch/ResourceLoaderOptions.h" 20 #include "platform/loader/fetch/ResourceLoaderOptions.h"
22 #include "platform/loader/fetch/ResourceRequest.h" 21 #include "platform/loader/fetch/ResourceRequest.h"
23 #include "platform/loader/fetch/ResourceResponse.h" 22 #include "platform/loader/fetch/ResourceResponse.h"
24 #include "platform/loader/fetch/ResourceTimingInfo.h" 23 #include "platform/loader/fetch/ResourceTimingInfo.h"
(...skipping 138 matching lines...) Expand 10 before | Expand all | Expand 10 after
163 } 162 }
164 163
165 private: 164 private:
166 Document& GetDocument() { return dummy_page_holder_->GetDocument(); } 165 Document& GetDocument() { return dummy_page_holder_->GetDocument(); }
167 166
168 std::unique_ptr<DummyPageHolder> dummy_page_holder_; 167 std::unique_ptr<DummyPageHolder> dummy_page_holder_;
169 Checkpoint checkpoint_; 168 Checkpoint checkpoint_;
170 Persistent<DocumentThreadableLoader> loader_; 169 Persistent<DocumentThreadableLoader> loader_;
171 }; 170 };
172 171
173 class WorkerThreadableLoaderTestHelper : public ThreadableLoaderTestHelper, 172 class WorkerThreadableLoaderTestHelper : public ThreadableLoaderTestHelper {
174 public WorkerLoaderProxyProvider {
175 public: 173 public:
176 WorkerThreadableLoaderTestHelper() 174 WorkerThreadableLoaderTestHelper()
177 : dummy_page_holder_(DummyPageHolder::Create(IntSize(1, 1))) {} 175 : dummy_page_holder_(DummyPageHolder::Create(IntSize(1, 1))) {}
178 176
179 void CreateLoader( 177 void CreateLoader(
180 ThreadableLoaderClient* client, 178 ThreadableLoaderClient* client,
181 CrossOriginRequestPolicy cross_origin_request_policy) override { 179 CrossOriginRequestPolicy cross_origin_request_policy) override {
182 std::unique_ptr<WaitableEvent> completion_event = 180 std::unique_ptr<WaitableEvent> completion_event =
183 WTF::MakeUnique<WaitableEvent>(); 181 WTF::MakeUnique<WaitableEvent>();
184 worker_loading_task_runner_->PostTask( 182 worker_loading_task_runner_->PostTask(
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
237 CrossThreadUnretained(this), 235 CrossThreadUnretained(this),
238 CrossThreadUnretained(completion_event.get()), n)); 236 CrossThreadUnretained(completion_event.get()), n));
239 completion_event->Wait(); 237 completion_event->Wait();
240 } 238 }
241 239
242 void OnSetUp() override { 240 void OnSetUp() override {
243 reporting_proxy_ = WTF::MakeUnique<WorkerReportingProxy>(); 241 reporting_proxy_ = WTF::MakeUnique<WorkerReportingProxy>();
244 security_origin_ = GetDocument().GetSecurityOrigin(); 242 security_origin_ = GetDocument().GetSecurityOrigin();
245 parent_frame_task_runners_ = 243 parent_frame_task_runners_ =
246 ParentFrameTaskRunners::Create(&dummy_page_holder_->GetFrame()); 244 ParentFrameTaskRunners::Create(&dummy_page_holder_->GetFrame());
247 worker_thread_ = 245 worker_thread_ = WTF::WrapUnique(new WorkerThreadForTest(
248 WTF::WrapUnique(new WorkerThreadForTest(this, *reporting_proxy_)); 246 ThreadableLoadingContext::Create(GetDocument()), *reporting_proxy_));
kinuko 2017/04/24 09:30:16 nit: makeunique (while you're there)
nhiroki 2017/05/29 04:20:24 Done.
249 loading_context_ = ThreadableLoadingContext::Create(GetDocument());
250 247
251 worker_thread_->StartWithSourceCode(security_origin_.Get(), 248 worker_thread_->StartWithSourceCode(security_origin_.Get(),
252 "//fake source code", 249 "//fake source code",
253 parent_frame_task_runners_.Get()); 250 parent_frame_task_runners_.Get());
254 worker_thread_->WaitForInit(); 251 worker_thread_->WaitForInit();
255 worker_loading_task_runner_ = 252 worker_loading_task_runner_ =
256 TaskRunnerHelper::Get(TaskType::kUnspecedLoading, worker_thread_.get()); 253 TaskRunnerHelper::Get(TaskType::kUnspecedLoading, worker_thread_.get());
257 } 254 }
258 255
259 void OnServeRequests() override { testing::RunPendingTasks(); } 256 void OnServeRequests() override { testing::RunPendingTasks(); }
260 257
261 void OnTearDown() override { 258 void OnTearDown() override {
262 worker_loading_task_runner_->PostTask( 259 worker_loading_task_runner_->PostTask(
263 BLINK_FROM_HERE, 260 BLINK_FROM_HERE,
264 CrossThreadBind(&WorkerThreadableLoaderTestHelper::ClearLoader, 261 CrossThreadBind(&WorkerThreadableLoaderTestHelper::ClearLoader,
265 CrossThreadUnretained(this))); 262 CrossThreadUnretained(this)));
266 WaitableEvent event; 263 WaitableEvent event;
267 worker_loading_task_runner_->PostTask( 264 worker_loading_task_runner_->PostTask(
268 BLINK_FROM_HERE, 265 BLINK_FROM_HERE,
269 CrossThreadBind(&WaitableEvent::Signal, CrossThreadUnretained(&event))); 266 CrossThreadBind(&WaitableEvent::Signal, CrossThreadUnretained(&event)));
270 event.Wait(); 267 event.Wait();
271 worker_thread_->TerminateAndWait(); 268 worker_thread_->TerminateAndWait();
272 269
273 // Needed to clean up the things on the main thread side and 270 // Needed to clean up the things on the main thread side and
274 // avoid Resource leaks. 271 // avoid Resource leaks.
275 testing::RunPendingTasks(); 272 testing::RunPendingTasks();
276
277 worker_thread_->GetWorkerLoaderProxy()->DetachProvider(this);
278 } 273 }
279 274
280 private: 275 private:
281 Document& GetDocument() { return dummy_page_holder_->GetDocument(); } 276 Document& GetDocument() { return dummy_page_holder_->GetDocument(); }
282 277
283 void WorkerCreateLoader( 278 void WorkerCreateLoader(
284 ThreadableLoaderClient* client, 279 ThreadableLoaderClient* client,
285 WaitableEvent* event, 280 WaitableEvent* event,
286 CrossOriginRequestPolicy cross_origin_request_policy) { 281 CrossOriginRequestPolicy cross_origin_request_policy) {
287 DCHECK(worker_thread_); 282 DCHECK(worker_thread_);
(...skipping 26 matching lines...) Expand all
314 event->Signal(); 309 event->Signal();
315 } 310 }
316 311
317 void WorkerCallCheckpoint(WaitableEvent* event, int n) { 312 void WorkerCallCheckpoint(WaitableEvent* event, int n) {
318 DCHECK(worker_thread_); 313 DCHECK(worker_thread_);
319 DCHECK(worker_thread_->IsCurrentThread()); 314 DCHECK(worker_thread_->IsCurrentThread());
320 checkpoint_.Call(n); 315 checkpoint_.Call(n);
321 event->Signal(); 316 event->Signal();
322 } 317 }
323 318
324 // WorkerLoaderProxyProvider methods.
325 ThreadableLoadingContext* GetThreadableLoadingContext() override {
326 return loading_context_.Get();
327 }
328
329 RefPtr<SecurityOrigin> security_origin_; 319 RefPtr<SecurityOrigin> security_origin_;
330 std::unique_ptr<WorkerReportingProxy> reporting_proxy_; 320 std::unique_ptr<WorkerReportingProxy> reporting_proxy_;
331 std::unique_ptr<WorkerThreadForTest> worker_thread_; 321 std::unique_ptr<WorkerThreadForTest> worker_thread_;
332 322
333 std::unique_ptr<DummyPageHolder> dummy_page_holder_; 323 std::unique_ptr<DummyPageHolder> dummy_page_holder_;
334 // Accessed cross-thread when worker thread posts tasks to the parent. 324 // Accessed cross-thread when worker thread posts tasks to the parent.
335 CrossThreadPersistent<ParentFrameTaskRunners> parent_frame_task_runners_; 325 CrossThreadPersistent<ParentFrameTaskRunners> parent_frame_task_runners_;
336 RefPtr<WebTaskRunner> worker_loading_task_runner_; 326 RefPtr<WebTaskRunner> worker_loading_task_runner_;
337 Checkpoint checkpoint_; 327 Checkpoint checkpoint_;
338 // |m_loader| must be touched only from the worker thread only. 328 // |m_loader| must be touched only from the worker thread only.
339 CrossThreadPersistent<ThreadableLoader> loader_; 329 CrossThreadPersistent<ThreadableLoader> loader_;
340
341 Persistent<ThreadableLoadingContext> loading_context_;
342 }; 330 };
343 331
344 class ThreadableLoaderTest 332 class ThreadableLoaderTest
345 : public ::testing::TestWithParam<ThreadableLoaderToTest> { 333 : public ::testing::TestWithParam<ThreadableLoaderToTest> {
346 public: 334 public:
347 ThreadableLoaderTest() { 335 ThreadableLoaderTest() {
348 switch (GetParam()) { 336 switch (GetParam()) {
349 case kDocumentThreadableLoaderTest: 337 case kDocumentThreadableLoaderTest:
350 helper_ = WTF::WrapUnique(new DocumentThreadableLoaderTestHelper); 338 helper_ = WTF::WrapUnique(new DocumentThreadableLoaderTestHelper);
351 break; 339 break;
(...skipping 517 matching lines...) Expand 10 before | Expand all | Expand 10 after
869 // test is not saying that didFailAccessControlCheck should be dispatched 857 // test is not saying that didFailAccessControlCheck should be dispatched
870 // synchronously, but is saying that even when a response is served 858 // synchronously, but is saying that even when a response is served
871 // synchronously it should not lead to a crash. 859 // synchronously it should not lead to a crash.
872 StartLoader(KURL(KURL(), "about:blank")); 860 StartLoader(KURL(KURL(), "about:blank"));
873 CallCheckpoint(2); 861 CallCheckpoint(2);
874 } 862 }
875 863
876 } // namespace 864 } // namespace
877 865
878 } // namespace blink 866 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698