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

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

Issue 2645613006: Worker: Stop using ExecutionContextTask on WorkerLoaderProxy::postTaskToWorkerGlobalScope (Closed)
Patch Set: rebase Created 3 years, 11 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 /* 1 /*
2 * Copyright (C) 2009, 2010 Google Inc. All rights reserved. 2 * Copyright (C) 2009, 2010 Google Inc. All rights reserved.
3 * 3 *
4 * Redistribution and use in source and binary forms, with or without 4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions are 5 * modification, are permitted provided that the following conditions are
6 * met: 6 * met:
7 * 7 *
8 * * Redistributions of source code must retain the above copyright 8 * * Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer. 9 * notice, this list of conditions and the following disclaimer.
10 * * Redistributions in binary form must reproduce the above 10 * * Redistributions in binary form must reproduce the above
(...skipping 25 matching lines...) Expand all
36 #include "core/timing/WorkerGlobalScopePerformance.h" 36 #include "core/timing/WorkerGlobalScopePerformance.h"
37 #include "core/workers/WorkerGlobalScope.h" 37 #include "core/workers/WorkerGlobalScope.h"
38 #include "core/workers/WorkerLoaderProxy.h" 38 #include "core/workers/WorkerLoaderProxy.h"
39 #include "platform/CrossThreadFunctional.h" 39 #include "platform/CrossThreadFunctional.h"
40 #include "platform/heap/SafePoint.h" 40 #include "platform/heap/SafePoint.h"
41 #include "platform/network/ResourceError.h" 41 #include "platform/network/ResourceError.h"
42 #include "platform/network/ResourceRequest.h" 42 #include "platform/network/ResourceRequest.h"
43 #include "platform/network/ResourceResponse.h" 43 #include "platform/network/ResourceResponse.h"
44 #include "platform/network/ResourceTimingInfo.h" 44 #include "platform/network/ResourceTimingInfo.h"
45 #include "platform/weborigin/KURL.h" 45 #include "platform/weborigin/KURL.h"
46 #include "platform/weborigin/SecurityPolicy.h" 46 #include "platform/weborigin/SecurityPolicy.h"
yhirano 2017/01/19 10:54:29 +wtf/Functional.h
nhiroki 2017/01/19 14:02:34 Done.
47 #include "wtf/debug/Alias.h" 47 #include "wtf/debug/Alias.h"
48 #include <memory> 48 #include <memory>
49 49
50 namespace blink { 50 namespace blink {
51 51
52 namespace { 52 namespace {
53 53
54 std::unique_ptr<Vector<char>> createVectorFromMemoryRegion( 54 std::unique_ptr<Vector<char>> createVectorFromMemoryRegion(
55 const char* data, 55 const char* data,
56 unsigned dataLength) { 56 unsigned dataLength) {
57 std::unique_ptr<Vector<char>> buffer = 57 std::unique_ptr<Vector<char>> buffer =
58 WTF::makeUnique<Vector<char>>(dataLength); 58 WTF::makeUnique<Vector<char>>(dataLength);
59 memcpy(buffer->data(), data, dataLength); 59 memcpy(buffer->data(), data, dataLength);
60 return buffer; 60 return buffer;
61 } 61 }
62 62
63 } // namespace 63 } // namespace
64 64
65 class WorkerThreadableLoader::AsyncTaskForwarder final 65 class WorkerThreadableLoader::AsyncTaskForwarder final
66 : public WorkerThreadableLoader::TaskForwarder { 66 : public WorkerThreadableLoader::TaskForwarder {
67 public: 67 public:
68 explicit AsyncTaskForwarder(PassRefPtr<WorkerLoaderProxy> loaderProxy) 68 explicit AsyncTaskForwarder(PassRefPtr<WorkerLoaderProxy> loaderProxy)
69 : m_loaderProxy(loaderProxy) { 69 : m_loaderProxy(loaderProxy) {
70 DCHECK(isMainThread()); 70 DCHECK(isMainThread());
71 } 71 }
72 ~AsyncTaskForwarder() override { DCHECK(isMainThread()); } 72 ~AsyncTaskForwarder() override { DCHECK(isMainThread()); }
73 73
74 void forwardTask(const WebTraceLocation& location, 74 void forwardTask(const WebTraceLocation& location,
75 std::unique_ptr<ExecutionContextTask> task) override { 75 std::unique_ptr<WTF::CrossThreadClosure> task) override {
76 DCHECK(isMainThread()); 76 DCHECK(isMainThread());
77 m_loaderProxy->postTaskToWorkerGlobalScope(location, std::move(task)); 77 m_loaderProxy->postTaskToWorkerGlobalScope(location, std::move(task));
78 } 78 }
79 void forwardTaskWithDoneSignal( 79 void forwardTaskWithDoneSignal(
80 const WebTraceLocation& location, 80 const WebTraceLocation& location,
81 std::unique_ptr<ExecutionContextTask> task) override { 81 std::unique_ptr<WTF::CrossThreadClosure> task) override {
82 DCHECK(isMainThread()); 82 DCHECK(isMainThread());
83 m_loaderProxy->postTaskToWorkerGlobalScope(location, std::move(task)); 83 m_loaderProxy->postTaskToWorkerGlobalScope(location, std::move(task));
84 } 84 }
85 void abort() override { DCHECK(isMainThread()); } 85 void abort() override { DCHECK(isMainThread()); }
86 86
87 private: 87 private:
88 RefPtr<WorkerLoaderProxy> m_loaderProxy; 88 RefPtr<WorkerLoaderProxy> m_loaderProxy;
89 }; 89 };
90 90
91 struct WorkerThreadableLoader::TaskWithLocation final { 91 struct WorkerThreadableLoader::TaskWithLocation final {
92 TaskWithLocation(const WebTraceLocation& location, 92 TaskWithLocation(const WebTraceLocation& location,
93 std::unique_ptr<ExecutionContextTask> task) 93 std::unique_ptr<WTF::CrossThreadClosure> task)
94 : m_location(location), m_task(std::move(task)) {} 94 : m_location(location), m_task(std::move(task)) {}
95 TaskWithLocation(TaskWithLocation&& task) 95 TaskWithLocation(TaskWithLocation&& task)
96 : TaskWithLocation(task.m_location, std::move(task.m_task)) {} 96 : TaskWithLocation(task.m_location, std::move(task.m_task)) {}
97 ~TaskWithLocation() = default; 97 ~TaskWithLocation() = default;
98 98
99 WebTraceLocation m_location; 99 WebTraceLocation m_location;
100 std::unique_ptr<ExecutionContextTask> m_task; 100 std::unique_ptr<WTF::CrossThreadClosure> m_task;
101 }; 101 };
102 102
103 // Observing functions and wait() need to be called on the worker thread. 103 // Observing functions and wait() need to be called on the worker thread.
104 // Setting functions and signal() need to be called on the main thread. 104 // Setting functions and signal() need to be called on the main thread.
105 // All observing functions must be called after wait() returns, and all 105 // All observing functions must be called after wait() returns, and all
106 // setting functions must be called before signal() is called. 106 // setting functions must be called before signal() is called.
107 class WorkerThreadableLoader::WaitableEventWithTasks final 107 class WorkerThreadableLoader::WaitableEventWithTasks final
108 : public ThreadSafeRefCounted<WaitableEventWithTasks> { 108 : public ThreadSafeRefCounted<WaitableEventWithTasks> {
109 public: 109 public:
110 static PassRefPtr<WaitableEventWithTasks> create() { 110 static PassRefPtr<WaitableEventWithTasks> create() {
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
161 class WorkerThreadableLoader::SyncTaskForwarder final 161 class WorkerThreadableLoader::SyncTaskForwarder final
162 : public WorkerThreadableLoader::TaskForwarder { 162 : public WorkerThreadableLoader::TaskForwarder {
163 public: 163 public:
164 explicit SyncTaskForwarder(PassRefPtr<WaitableEventWithTasks> eventWithTasks) 164 explicit SyncTaskForwarder(PassRefPtr<WaitableEventWithTasks> eventWithTasks)
165 : m_eventWithTasks(eventWithTasks) { 165 : m_eventWithTasks(eventWithTasks) {
166 DCHECK(isMainThread()); 166 DCHECK(isMainThread());
167 } 167 }
168 ~SyncTaskForwarder() override { DCHECK(isMainThread()); } 168 ~SyncTaskForwarder() override { DCHECK(isMainThread()); }
169 169
170 void forwardTask(const WebTraceLocation& location, 170 void forwardTask(const WebTraceLocation& location,
171 std::unique_ptr<ExecutionContextTask> task) override { 171 std::unique_ptr<WTF::CrossThreadClosure> task) override {
172 DCHECK(isMainThread()); 172 DCHECK(isMainThread());
173 m_eventWithTasks->append(TaskWithLocation(location, std::move(task))); 173 m_eventWithTasks->append(TaskWithLocation(location, std::move(task)));
174 } 174 }
175 void forwardTaskWithDoneSignal( 175 void forwardTaskWithDoneSignal(
176 const WebTraceLocation& location, 176 const WebTraceLocation& location,
177 std::unique_ptr<ExecutionContextTask> task) override { 177 std::unique_ptr<WTF::CrossThreadClosure> task) override {
178 DCHECK(isMainThread()); 178 DCHECK(isMainThread());
179 m_eventWithTasks->append(TaskWithLocation(location, std::move(task))); 179 m_eventWithTasks->append(TaskWithLocation(location, std::move(task)));
180 m_eventWithTasks->signal(); 180 m_eventWithTasks->signal();
181 } 181 }
182 void abort() override { 182 void abort() override {
183 DCHECK(isMainThread()); 183 DCHECK(isMainThread());
184 m_eventWithTasks->setIsAborted(); 184 m_eventWithTasks->setIsAborted();
185 m_eventWithTasks->signal(); 185 m_eventWithTasks->signal();
186 } 186 }
187 187
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after
253 cancel(); 253 cancel();
254 return; 254 return;
255 } 255 }
256 256
257 for (const auto& task : eventWithTasks->take()) { 257 for (const auto& task : eventWithTasks->take()) {
258 // Store the program counter where the task is posted from, and alias 258 // Store the program counter where the task is posted from, and alias
259 // it to ensure it is stored in the crash dump. 259 // it to ensure it is stored in the crash dump.
260 const void* programCounter = task.m_location.program_counter(); 260 const void* programCounter = task.m_location.program_counter();
261 WTF::debug::alias(&programCounter); 261 WTF::debug::alias(&programCounter);
262 262
263 // m_clientTask contains only CallClosureTasks. So, it's ok to pass 263 (*task.m_task)();
264 // the nullptr.
265 task.m_task->performTask(nullptr);
266 } 264 }
267 } 265 }
268 266
269 void WorkerThreadableLoader::overrideTimeout( 267 void WorkerThreadableLoader::overrideTimeout(
270 unsigned long timeoutMilliseconds) { 268 unsigned long timeoutMilliseconds) {
271 DCHECK(!isMainThread()); 269 DCHECK(!isMainThread());
272 if (!m_mainThreadLoaderHolder) 270 if (!m_mainThreadLoaderHolder)
273 return; 271 return;
274 m_workerLoaderProxy->postTaskToLoader( 272 m_workerLoaderProxy->postTaskToLoader(
275 BLINK_FROM_HERE, 273 BLINK_FROM_HERE,
(...skipping 171 matching lines...) Expand 10 before | Expand all | Expand 10 after
447 new MainThreadLoaderHolder(forwarder, workerThreadLifecycleContext); 445 new MainThreadLoaderHolder(forwarder, workerThreadLifecycleContext);
448 if (mainThreadLoaderHolder->wasContextDestroyedBeforeObserverCreation()) { 446 if (mainThreadLoaderHolder->wasContextDestroyedBeforeObserverCreation()) {
449 // The thread is already terminating. 447 // The thread is already terminating.
450 forwarder->abort(); 448 forwarder->abort();
451 mainThreadLoaderHolder->m_forwarder = nullptr; 449 mainThreadLoaderHolder->m_forwarder = nullptr;
452 return; 450 return;
453 } 451 }
454 mainThreadLoaderHolder->m_workerLoader = workerLoader; 452 mainThreadLoaderHolder->m_workerLoader = workerLoader;
455 forwarder->forwardTask( 453 forwarder->forwardTask(
456 BLINK_FROM_HERE, 454 BLINK_FROM_HERE,
457 createCrossThreadTask(&WorkerThreadableLoader::didStart, 455 crossThreadBind(&WorkerThreadableLoader::didStart,
458 wrapCrossThreadPersistent(workerLoader), 456 wrapCrossThreadPersistent(workerLoader),
459 wrapCrossThreadPersistent(mainThreadLoaderHolder))); 457 wrapCrossThreadPersistent(mainThreadLoaderHolder)));
460 mainThreadLoaderHolder->start(*toDocument(executionContext), 458 mainThreadLoaderHolder->start(*toDocument(executionContext),
461 std::move(request), options, 459 std::move(request), options,
462 resourceLoaderOptions); 460 resourceLoaderOptions);
463 } 461 }
464 462
465 WorkerThreadableLoader::MainThreadLoaderHolder::~MainThreadLoaderHolder() { 463 WorkerThreadableLoader::MainThreadLoaderHolder::~MainThreadLoaderHolder() {
466 DCHECK(isMainThread()); 464 DCHECK(isMainThread());
467 DCHECK(!m_workerLoader); 465 DCHECK(!m_workerLoader);
468 } 466 }
469 467
(...skipping 17 matching lines...) Expand all
487 void WorkerThreadableLoader::MainThreadLoaderHolder::didSendData( 485 void WorkerThreadableLoader::MainThreadLoaderHolder::didSendData(
488 unsigned long long bytesSent, 486 unsigned long long bytesSent,
489 unsigned long long totalBytesToBeSent) { 487 unsigned long long totalBytesToBeSent) {
490 DCHECK(isMainThread()); 488 DCHECK(isMainThread());
491 CrossThreadPersistent<WorkerThreadableLoader> workerLoader = 489 CrossThreadPersistent<WorkerThreadableLoader> workerLoader =
492 m_workerLoader.get(); 490 m_workerLoader.get();
493 if (!workerLoader || !m_forwarder) 491 if (!workerLoader || !m_forwarder)
494 return; 492 return;
495 m_forwarder->forwardTask( 493 m_forwarder->forwardTask(
496 BLINK_FROM_HERE, 494 BLINK_FROM_HERE,
497 createCrossThreadTask(&WorkerThreadableLoader::didSendData, workerLoader, 495 crossThreadBind(&WorkerThreadableLoader::didSendData, workerLoader,
498 bytesSent, totalBytesToBeSent)); 496 bytesSent, totalBytesToBeSent));
499 } 497 }
500 498
501 void WorkerThreadableLoader::MainThreadLoaderHolder::didReceiveRedirectTo( 499 void WorkerThreadableLoader::MainThreadLoaderHolder::didReceiveRedirectTo(
502 const KURL& url) { 500 const KURL& url) {
503 DCHECK(isMainThread()); 501 DCHECK(isMainThread());
504 CrossThreadPersistent<WorkerThreadableLoader> workerLoader = 502 CrossThreadPersistent<WorkerThreadableLoader> workerLoader =
505 m_workerLoader.get(); 503 m_workerLoader.get();
506 if (!workerLoader || !m_forwarder) 504 if (!workerLoader || !m_forwarder)
507 return; 505 return;
508 m_forwarder->forwardTask( 506 m_forwarder->forwardTask(
509 BLINK_FROM_HERE, 507 BLINK_FROM_HERE,
510 createCrossThreadTask(&WorkerThreadableLoader::didReceiveRedirectTo, 508 crossThreadBind(&WorkerThreadableLoader::didReceiveRedirectTo,
511 workerLoader, url)); 509 workerLoader, url));
512 } 510 }
513 511
514 void WorkerThreadableLoader::MainThreadLoaderHolder::didReceiveResponse( 512 void WorkerThreadableLoader::MainThreadLoaderHolder::didReceiveResponse(
515 unsigned long identifier, 513 unsigned long identifier,
516 const ResourceResponse& response, 514 const ResourceResponse& response,
517 std::unique_ptr<WebDataConsumerHandle> handle) { 515 std::unique_ptr<WebDataConsumerHandle> handle) {
518 DCHECK(isMainThread()); 516 DCHECK(isMainThread());
519 CrossThreadPersistent<WorkerThreadableLoader> workerLoader = 517 CrossThreadPersistent<WorkerThreadableLoader> workerLoader =
520 m_workerLoader.get(); 518 m_workerLoader.get();
521 if (!workerLoader || !m_forwarder) 519 if (!workerLoader || !m_forwarder)
522 return; 520 return;
523 m_forwarder->forwardTask( 521 m_forwarder->forwardTask(
524 BLINK_FROM_HERE, 522 BLINK_FROM_HERE,
525 createCrossThreadTask(&WorkerThreadableLoader::didReceiveResponse, 523 crossThreadBind(&WorkerThreadableLoader::didReceiveResponse, workerLoader,
526 workerLoader, identifier, response, 524 identifier, response, WTF::passed(std::move(handle))));
527 WTF::passed(std::move(handle))));
528 } 525 }
529 526
530 void WorkerThreadableLoader::MainThreadLoaderHolder::didReceiveData( 527 void WorkerThreadableLoader::MainThreadLoaderHolder::didReceiveData(
531 const char* data, 528 const char* data,
532 unsigned dataLength) { 529 unsigned dataLength) {
533 DCHECK(isMainThread()); 530 DCHECK(isMainThread());
534 CrossThreadPersistent<WorkerThreadableLoader> workerLoader = 531 CrossThreadPersistent<WorkerThreadableLoader> workerLoader =
535 m_workerLoader.get(); 532 m_workerLoader.get();
536 if (!workerLoader || !m_forwarder) 533 if (!workerLoader || !m_forwarder)
537 return; 534 return;
538 m_forwarder->forwardTask( 535 m_forwarder->forwardTask(
539 BLINK_FROM_HERE, 536 BLINK_FROM_HERE,
540 createCrossThreadTask( 537 crossThreadBind(
541 &WorkerThreadableLoader::didReceiveData, workerLoader, 538 &WorkerThreadableLoader::didReceiveData, workerLoader,
542 WTF::passed(createVectorFromMemoryRegion(data, dataLength)))); 539 WTF::passed(createVectorFromMemoryRegion(data, dataLength))));
543 } 540 }
544 541
545 void WorkerThreadableLoader::MainThreadLoaderHolder::didDownloadData( 542 void WorkerThreadableLoader::MainThreadLoaderHolder::didDownloadData(
546 int dataLength) { 543 int dataLength) {
547 DCHECK(isMainThread()); 544 DCHECK(isMainThread());
548 CrossThreadPersistent<WorkerThreadableLoader> workerLoader = 545 CrossThreadPersistent<WorkerThreadableLoader> workerLoader =
549 m_workerLoader.get(); 546 m_workerLoader.get();
550 if (!workerLoader || !m_forwarder) 547 if (!workerLoader || !m_forwarder)
551 return; 548 return;
552 m_forwarder->forwardTask( 549 m_forwarder->forwardTask(
553 BLINK_FROM_HERE, 550 BLINK_FROM_HERE, crossThreadBind(&WorkerThreadableLoader::didDownloadData,
554 createCrossThreadTask(&WorkerThreadableLoader::didDownloadData, 551 workerLoader, dataLength));
555 workerLoader, dataLength));
556 } 552 }
557 553
558 void WorkerThreadableLoader::MainThreadLoaderHolder::didReceiveCachedMetadata( 554 void WorkerThreadableLoader::MainThreadLoaderHolder::didReceiveCachedMetadata(
559 const char* data, 555 const char* data,
560 int dataLength) { 556 int dataLength) {
561 DCHECK(isMainThread()); 557 DCHECK(isMainThread());
562 CrossThreadPersistent<WorkerThreadableLoader> workerLoader = 558 CrossThreadPersistent<WorkerThreadableLoader> workerLoader =
563 m_workerLoader.get(); 559 m_workerLoader.get();
564 if (!workerLoader || !m_forwarder) 560 if (!workerLoader || !m_forwarder)
565 return; 561 return;
566 m_forwarder->forwardTask( 562 m_forwarder->forwardTask(
567 BLINK_FROM_HERE, 563 BLINK_FROM_HERE,
568 createCrossThreadTask( 564 crossThreadBind(
569 &WorkerThreadableLoader::didReceiveCachedMetadata, workerLoader, 565 &WorkerThreadableLoader::didReceiveCachedMetadata, workerLoader,
570 WTF::passed(createVectorFromMemoryRegion(data, dataLength)))); 566 WTF::passed(createVectorFromMemoryRegion(data, dataLength))));
571 } 567 }
572 568
573 void WorkerThreadableLoader::MainThreadLoaderHolder::didFinishLoading( 569 void WorkerThreadableLoader::MainThreadLoaderHolder::didFinishLoading(
574 unsigned long identifier, 570 unsigned long identifier,
575 double finishTime) { 571 double finishTime) {
576 DCHECK(isMainThread()); 572 DCHECK(isMainThread());
577 CrossThreadPersistent<WorkerThreadableLoader> workerLoader = 573 CrossThreadPersistent<WorkerThreadableLoader> workerLoader =
578 m_workerLoader.release(); 574 m_workerLoader.release();
579 if (!workerLoader || !m_forwarder) 575 if (!workerLoader || !m_forwarder)
580 return; 576 return;
581 m_forwarder->forwardTaskWithDoneSignal( 577 m_forwarder->forwardTaskWithDoneSignal(
582 BLINK_FROM_HERE, 578 BLINK_FROM_HERE,
583 createCrossThreadTask(&WorkerThreadableLoader::didFinishLoading, 579 crossThreadBind(&WorkerThreadableLoader::didFinishLoading, workerLoader,
584 workerLoader, identifier, finishTime)); 580 identifier, finishTime));
585 m_forwarder = nullptr; 581 m_forwarder = nullptr;
586 } 582 }
587 583
588 void WorkerThreadableLoader::MainThreadLoaderHolder::didFail( 584 void WorkerThreadableLoader::MainThreadLoaderHolder::didFail(
589 const ResourceError& error) { 585 const ResourceError& error) {
590 DCHECK(isMainThread()); 586 DCHECK(isMainThread());
591 CrossThreadPersistent<WorkerThreadableLoader> workerLoader = 587 CrossThreadPersistent<WorkerThreadableLoader> workerLoader =
592 m_workerLoader.release(); 588 m_workerLoader.release();
593 if (!workerLoader || !m_forwarder) 589 if (!workerLoader || !m_forwarder)
594 return; 590 return;
595 m_forwarder->forwardTaskWithDoneSignal( 591 m_forwarder->forwardTaskWithDoneSignal(
596 BLINK_FROM_HERE, createCrossThreadTask(&WorkerThreadableLoader::didFail, 592 BLINK_FROM_HERE,
597 workerLoader, error)); 593 crossThreadBind(&WorkerThreadableLoader::didFail, workerLoader, error));
598 m_forwarder = nullptr; 594 m_forwarder = nullptr;
599 } 595 }
600 596
601 void WorkerThreadableLoader::MainThreadLoaderHolder::didFailAccessControlCheck( 597 void WorkerThreadableLoader::MainThreadLoaderHolder::didFailAccessControlCheck(
602 const ResourceError& error) { 598 const ResourceError& error) {
603 DCHECK(isMainThread()); 599 DCHECK(isMainThread());
604 CrossThreadPersistent<WorkerThreadableLoader> workerLoader = 600 CrossThreadPersistent<WorkerThreadableLoader> workerLoader =
605 m_workerLoader.release(); 601 m_workerLoader.release();
606 if (!workerLoader || !m_forwarder) 602 if (!workerLoader || !m_forwarder)
607 return; 603 return;
608 m_forwarder->forwardTaskWithDoneSignal( 604 m_forwarder->forwardTaskWithDoneSignal(
609 BLINK_FROM_HERE, 605 BLINK_FROM_HERE,
610 createCrossThreadTask(&WorkerThreadableLoader::didFailAccessControlCheck, 606 crossThreadBind(&WorkerThreadableLoader::didFailAccessControlCheck,
611 workerLoader, error)); 607 workerLoader, error));
612 m_forwarder = nullptr; 608 m_forwarder = nullptr;
613 } 609 }
614 610
615 void WorkerThreadableLoader::MainThreadLoaderHolder::didFailRedirectCheck() { 611 void WorkerThreadableLoader::MainThreadLoaderHolder::didFailRedirectCheck() {
616 DCHECK(isMainThread()); 612 DCHECK(isMainThread());
617 CrossThreadPersistent<WorkerThreadableLoader> workerLoader = 613 CrossThreadPersistent<WorkerThreadableLoader> workerLoader =
618 m_workerLoader.release(); 614 m_workerLoader.release();
619 if (!workerLoader || !m_forwarder) 615 if (!workerLoader || !m_forwarder)
620 return; 616 return;
621 m_forwarder->forwardTaskWithDoneSignal( 617 m_forwarder->forwardTaskWithDoneSignal(
622 BLINK_FROM_HERE, 618 BLINK_FROM_HERE,
623 createCrossThreadTask(&WorkerThreadableLoader::didFailRedirectCheck, 619 crossThreadBind(&WorkerThreadableLoader::didFailRedirectCheck,
624 workerLoader)); 620 workerLoader));
625 m_forwarder = nullptr; 621 m_forwarder = nullptr;
626 } 622 }
627 623
628 void WorkerThreadableLoader::MainThreadLoaderHolder::didReceiveResourceTiming( 624 void WorkerThreadableLoader::MainThreadLoaderHolder::didReceiveResourceTiming(
629 const ResourceTimingInfo& info) { 625 const ResourceTimingInfo& info) {
630 DCHECK(isMainThread()); 626 DCHECK(isMainThread());
631 CrossThreadPersistent<WorkerThreadableLoader> workerLoader = 627 CrossThreadPersistent<WorkerThreadableLoader> workerLoader =
632 m_workerLoader.get(); 628 m_workerLoader.get();
633 if (!workerLoader || !m_forwarder) 629 if (!workerLoader || !m_forwarder)
634 return; 630 return;
635 m_forwarder->forwardTask( 631 m_forwarder->forwardTask(
636 BLINK_FROM_HERE, 632 BLINK_FROM_HERE,
637 createCrossThreadTask(&WorkerThreadableLoader::didReceiveResourceTiming, 633 crossThreadBind(&WorkerThreadableLoader::didReceiveResourceTiming,
638 workerLoader, info)); 634 workerLoader, info));
639 } 635 }
640 636
641 void WorkerThreadableLoader::MainThreadLoaderHolder::contextDestroyed( 637 void WorkerThreadableLoader::MainThreadLoaderHolder::contextDestroyed(
642 WorkerThreadLifecycleContext*) { 638 WorkerThreadLifecycleContext*) {
643 DCHECK(isMainThread()); 639 DCHECK(isMainThread());
644 if (m_forwarder) { 640 if (m_forwarder) {
645 m_forwarder->abort(); 641 m_forwarder->abort();
646 m_forwarder = nullptr; 642 m_forwarder = nullptr;
647 } 643 }
648 cancel(); 644 cancel();
(...skipping 22 matching lines...) Expand all
671 resourceLoaderOptions.requestInitiatorContext = WorkerContext; 667 resourceLoaderOptions.requestInitiatorContext = WorkerContext;
672 // TODO(yhirano): Remove this CHECK once https://crbug.com/667254 is fixed. 668 // TODO(yhirano): Remove this CHECK once https://crbug.com/667254 is fixed.
673 CHECK(!m_mainThreadLoader); 669 CHECK(!m_mainThreadLoader);
674 m_mainThreadLoader = DocumentThreadableLoader::create( 670 m_mainThreadLoader = DocumentThreadableLoader::create(
675 document, this, options, resourceLoaderOptions, 671 document, this, options, resourceLoaderOptions,
676 ThreadableLoader::ClientSpec::kMainThreadLoaderHolder); 672 ThreadableLoader::ClientSpec::kMainThreadLoaderHolder);
677 m_mainThreadLoader->start(ResourceRequest(request.get())); 673 m_mainThreadLoader->start(ResourceRequest(request.get()));
678 } 674 }
679 675
680 } // namespace blink 676 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698