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

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

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

Powered by Google App Engine
This is Rietveld 408576698