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

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

Issue 2811993007: Worker: Remove cross-thread PostTask functions from WorkerLoaderProxy (Closed)
Patch Set: address review comments 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"
(...skipping 163 matching lines...) Expand 10 before | Expand all | Expand 10 after
174 public WorkerLoaderProxyProvider { 174 public WorkerLoaderProxyProvider {
175 public: 175 public:
176 WorkerThreadableLoaderTestHelper() 176 WorkerThreadableLoaderTestHelper()
177 : dummy_page_holder_(DummyPageHolder::Create(IntSize(1, 1))) {} 177 : dummy_page_holder_(DummyPageHolder::Create(IntSize(1, 1))) {}
178 178
179 void CreateLoader( 179 void CreateLoader(
180 ThreadableLoaderClient* client, 180 ThreadableLoaderClient* client,
181 CrossOriginRequestPolicy cross_origin_request_policy) override { 181 CrossOriginRequestPolicy cross_origin_request_policy) override {
182 std::unique_ptr<WaitableEvent> completion_event = 182 std::unique_ptr<WaitableEvent> completion_event =
183 WTF::MakeUnique<WaitableEvent>(); 183 WTF::MakeUnique<WaitableEvent>();
184 PostTaskToWorkerGlobalScope( 184 worker_loading_task_runner_->PostTask(
185 BLINK_FROM_HERE, 185 BLINK_FROM_HERE,
186 CrossThreadBind(&WorkerThreadableLoaderTestHelper::WorkerCreateLoader, 186 CrossThreadBind(&WorkerThreadableLoaderTestHelper::WorkerCreateLoader,
187 CrossThreadUnretained(this), 187 CrossThreadUnretained(this),
188 CrossThreadUnretained(client), 188 CrossThreadUnretained(client),
189 CrossThreadUnretained(completion_event.get()), 189 CrossThreadUnretained(completion_event.get()),
190 cross_origin_request_policy)); 190 cross_origin_request_policy));
191 completion_event->Wait(); 191 completion_event->Wait();
192 } 192 }
193 193
194 void StartLoader(const ResourceRequest& request) override { 194 void StartLoader(const ResourceRequest& request) override {
195 std::unique_ptr<WaitableEvent> completion_event = 195 std::unique_ptr<WaitableEvent> completion_event =
196 WTF::MakeUnique<WaitableEvent>(); 196 WTF::MakeUnique<WaitableEvent>();
197 PostTaskToWorkerGlobalScope( 197 worker_loading_task_runner_->PostTask(
198 BLINK_FROM_HERE, 198 BLINK_FROM_HERE,
199 CrossThreadBind(&WorkerThreadableLoaderTestHelper::WorkerStartLoader, 199 CrossThreadBind(&WorkerThreadableLoaderTestHelper::WorkerStartLoader,
200 CrossThreadUnretained(this), 200 CrossThreadUnretained(this),
201 CrossThreadUnretained(completion_event.get()), 201 CrossThreadUnretained(completion_event.get()),
202 request)); 202 request));
203 completion_event->Wait(); 203 completion_event->Wait();
204 } 204 }
205 205
206 // Must be called on the worker thread. 206 // Must be called on the worker thread.
207 void CancelLoader() override { 207 void CancelLoader() override {
(...skipping 16 matching lines...) Expand all
224 loader_ = nullptr; 224 loader_ = nullptr;
225 } 225 }
226 226
227 Checkpoint& GetCheckpoint() override { return checkpoint_; } 227 Checkpoint& GetCheckpoint() override { return checkpoint_; }
228 228
229 void CallCheckpoint(int n) override { 229 void CallCheckpoint(int n) override {
230 testing::RunPendingTasks(); 230 testing::RunPendingTasks();
231 231
232 std::unique_ptr<WaitableEvent> completion_event = 232 std::unique_ptr<WaitableEvent> completion_event =
233 WTF::MakeUnique<WaitableEvent>(); 233 WTF::MakeUnique<WaitableEvent>();
234 PostTaskToWorkerGlobalScope( 234 worker_loading_task_runner_->PostTask(
235 BLINK_FROM_HERE, 235 BLINK_FROM_HERE,
236 CrossThreadBind(&WorkerThreadableLoaderTestHelper::WorkerCallCheckpoint, 236 CrossThreadBind(&WorkerThreadableLoaderTestHelper::WorkerCallCheckpoint,
237 CrossThreadUnretained(this), 237 CrossThreadUnretained(this),
238 CrossThreadUnretained(completion_event.get()), n)); 238 CrossThreadUnretained(completion_event.get()), n));
239 completion_event->Wait(); 239 completion_event->Wait();
240 } 240 }
241 241
242 void OnSetUp() override { 242 void OnSetUp() override {
243 reporting_proxy_ = WTF::MakeUnique<WorkerReportingProxy>(); 243 reporting_proxy_ = WTF::MakeUnique<WorkerReportingProxy>();
244 security_origin_ = GetDocument().GetSecurityOrigin(); 244 security_origin_ = GetDocument().GetSecurityOrigin();
245 parent_frame_task_runners_ = 245 parent_frame_task_runners_ =
246 ParentFrameTaskRunners::Create(&dummy_page_holder_->GetFrame()); 246 ParentFrameTaskRunners::Create(&dummy_page_holder_->GetFrame());
247 worker_thread_ = 247 worker_thread_ =
248 WTF::WrapUnique(new WorkerThreadForTest(this, *reporting_proxy_)); 248 WTF::WrapUnique(new WorkerThreadForTest(this, *reporting_proxy_));
249 loading_context_ = ThreadableLoadingContext::Create(GetDocument()); 249 loading_context_ = ThreadableLoadingContext::Create(GetDocument());
250 250
251 worker_thread_->StartWithSourceCode(security_origin_.Get(), 251 worker_thread_->StartWithSourceCode(security_origin_.Get(),
252 "//fake source code", 252 "//fake source code",
253 parent_frame_task_runners_.Get()); 253 parent_frame_task_runners_.Get());
254 worker_thread_->WaitForInit(); 254 worker_thread_->WaitForInit();
255 worker_loading_task_runner_ =
256 TaskRunnerHelper::Get(TaskType::kUnspecedLoading, worker_thread_.get());
255 } 257 }
256 258
257 void OnServeRequests() override { testing::RunPendingTasks(); } 259 void OnServeRequests() override { testing::RunPendingTasks(); }
258 260
259 void OnTearDown() override { 261 void OnTearDown() override {
260 PostTaskToWorkerGlobalScope( 262 worker_loading_task_runner_->PostTask(
261 BLINK_FROM_HERE, 263 BLINK_FROM_HERE,
262 CrossThreadBind(&WorkerThreadableLoaderTestHelper::ClearLoader, 264 CrossThreadBind(&WorkerThreadableLoaderTestHelper::ClearLoader,
263 CrossThreadUnretained(this))); 265 CrossThreadUnretained(this)));
264 WaitableEvent event; 266 WaitableEvent event;
265 PostTaskToWorkerGlobalScope( 267 worker_loading_task_runner_->PostTask(
266 BLINK_FROM_HERE, 268 BLINK_FROM_HERE,
267 CrossThreadBind(&WaitableEvent::Signal, CrossThreadUnretained(&event))); 269 CrossThreadBind(&WaitableEvent::Signal, CrossThreadUnretained(&event)));
268 event.Wait(); 270 event.Wait();
269 worker_thread_->TerminateAndWait(); 271 worker_thread_->TerminateAndWait();
270 272
271 // Needed to clean up the things on the main thread side and 273 // Needed to clean up the things on the main thread side and
272 // avoid Resource leaks. 274 // avoid Resource leaks.
273 testing::RunPendingTasks(); 275 testing::RunPendingTasks();
274 276
275 worker_thread_->GetWorkerLoaderProxy()->DetachProvider(this); 277 worker_thread_->GetWorkerLoaderProxy()->DetachProvider(this);
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
313 } 315 }
314 316
315 void WorkerCallCheckpoint(WaitableEvent* event, int n) { 317 void WorkerCallCheckpoint(WaitableEvent* event, int n) {
316 DCHECK(worker_thread_); 318 DCHECK(worker_thread_);
317 DCHECK(worker_thread_->IsCurrentThread()); 319 DCHECK(worker_thread_->IsCurrentThread());
318 checkpoint_.Call(n); 320 checkpoint_.Call(n);
319 event->Signal(); 321 event->Signal();
320 } 322 }
321 323
322 // WorkerLoaderProxyProvider methods. 324 // WorkerLoaderProxyProvider methods.
323 void PostTaskToLoader(
324 const WebTraceLocation& location,
325 std::unique_ptr<WTF::CrossThreadClosure> task) override {
326 DCHECK(worker_thread_);
327 DCHECK(worker_thread_->IsCurrentThread());
328 parent_frame_task_runners_->Get(TaskType::kNetworking)
329 ->PostTask(BLINK_FROM_HERE, std::move(task));
330 }
331
332 void PostTaskToWorkerGlobalScope(
333 const WebTraceLocation& location,
334 std::unique_ptr<WTF::CrossThreadClosure> task) override {
335 DCHECK(worker_thread_);
336 TaskRunnerHelper::Get(TaskType::kNetworking, worker_thread_.get())
337 ->PostTask(location, std::move(task));
338 }
339
340 ThreadableLoadingContext* GetThreadableLoadingContext() override { 325 ThreadableLoadingContext* GetThreadableLoadingContext() override {
341 return loading_context_.Get(); 326 return loading_context_.Get();
342 } 327 }
343 328
344 RefPtr<SecurityOrigin> security_origin_; 329 RefPtr<SecurityOrigin> security_origin_;
345 std::unique_ptr<WorkerReportingProxy> reporting_proxy_; 330 std::unique_ptr<WorkerReportingProxy> reporting_proxy_;
346 std::unique_ptr<WorkerThreadForTest> worker_thread_; 331 std::unique_ptr<WorkerThreadForTest> worker_thread_;
347 332
348 std::unique_ptr<DummyPageHolder> dummy_page_holder_; 333 std::unique_ptr<DummyPageHolder> dummy_page_holder_;
349 // Accessed cross-thread when worker thread posts tasks to the parent. 334 // Accessed cross-thread when worker thread posts tasks to the parent.
350 CrossThreadPersistent<ParentFrameTaskRunners> parent_frame_task_runners_; 335 CrossThreadPersistent<ParentFrameTaskRunners> parent_frame_task_runners_;
336 RefPtr<WebTaskRunner> worker_loading_task_runner_;
351 Checkpoint checkpoint_; 337 Checkpoint checkpoint_;
352 // |m_loader| must be touched only from the worker thread only. 338 // |m_loader| must be touched only from the worker thread only.
353 CrossThreadPersistent<ThreadableLoader> loader_; 339 CrossThreadPersistent<ThreadableLoader> loader_;
354 340
355 Persistent<ThreadableLoadingContext> loading_context_; 341 Persistent<ThreadableLoadingContext> loading_context_;
356 }; 342 };
357 343
358 class ThreadableLoaderTest 344 class ThreadableLoaderTest
359 : public ::testing::TestWithParam<ThreadableLoaderToTest> { 345 : public ::testing::TestWithParam<ThreadableLoaderToTest> {
360 public: 346 public:
(...skipping 522 matching lines...) Expand 10 before | Expand all | Expand 10 after
883 // test is not saying that didFailAccessControlCheck should be dispatched 869 // test is not saying that didFailAccessControlCheck should be dispatched
884 // synchronously, but is saying that even when a response is served 870 // synchronously, but is saying that even when a response is served
885 // synchronously it should not lead to a crash. 871 // synchronously it should not lead to a crash.
886 StartLoader(KURL(KURL(), "about:blank")); 872 StartLoader(KURL(KURL(), "about:blank"));
887 CallCheckpoint(2); 873 CallCheckpoint(2);
888 } 874 }
889 875
890 } // namespace 876 } // namespace
891 877
892 } // namespace blink 878 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698