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

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

Issue 2256103002: Clear MainThreadLoaderHolder::m_workerLoader appropriately (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 4 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
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 207 matching lines...) Expand 10 before | Expand all | Expand 10 after
218 } 218 }
219 219
220 void WorkerThreadableLoader::loadResourceSynchronously(WorkerGlobalScope& worker GlobalScope, const ResourceRequest& request, ThreadableLoaderClient& client, con st ThreadableLoaderOptions& options, const ResourceLoaderOptions& resourceLoader Options) 220 void WorkerThreadableLoader::loadResourceSynchronously(WorkerGlobalScope& worker GlobalScope, const ResourceRequest& request, ThreadableLoaderClient& client, con st ThreadableLoaderOptions& options, const ResourceLoaderOptions& resourceLoader Options)
221 { 221 {
222 (new WorkerThreadableLoader(workerGlobalScope, &client, options, resourceLoa derOptions, LoadSynchronously))->start(request); 222 (new WorkerThreadableLoader(workerGlobalScope, &client, options, resourceLoa derOptions, LoadSynchronously))->start(request);
223 } 223 }
224 224
225 WorkerThreadableLoader::~WorkerThreadableLoader() 225 WorkerThreadableLoader::~WorkerThreadableLoader()
226 { 226 {
227 DCHECK(!m_mainThreadLoaderHolder); 227 DCHECK(!m_mainThreadLoaderHolder);
228 DCHECK(!m_client); 228 DCHECK(!m_client);
haraken 2016/08/18 04:58:37 Shall we add DCHECK(!m_workerLoader)?
yhirano 2016/08/18 05:09:04 Oops, the CL description was wrong. m_workerLoader
229 } 229 }
230 230
231 void WorkerThreadableLoader::start(const ResourceRequest& originalRequest) 231 void WorkerThreadableLoader::start(const ResourceRequest& originalRequest)
232 { 232 {
233 ResourceRequest request(originalRequest); 233 ResourceRequest request(originalRequest);
234 if (!request.didSetHTTPReferrer()) 234 if (!request.didSetHTTPReferrer())
235 request.setHTTPReferrer(SecurityPolicy::generateReferrer(m_workerGlobalS cope->getReferrerPolicy(), request.url(), m_workerGlobalScope->outgoingReferrer( ))); 235 request.setHTTPReferrer(SecurityPolicy::generateReferrer(m_workerGlobalS cope->getReferrerPolicy(), request.url(), m_workerGlobalScope->outgoingReferrer( )));
236 236
237 DCHECK(!isMainThread()); 237 DCHECK(!isMainThread());
238 RefPtr<WaitableEventWithTasks> eventWithTasks; 238 RefPtr<WaitableEventWithTasks> eventWithTasks;
(...skipping 221 matching lines...) Expand 10 before | Expand all | Expand 10 after
460 { 460 {
461 DCHECK(isMainThread()); 461 DCHECK(isMainThread());
462 if (!m_mainThreadLoader) 462 if (!m_mainThreadLoader)
463 return; 463 return;
464 m_mainThreadLoader->overrideTimeout(timeoutMilliseconds); 464 m_mainThreadLoader->overrideTimeout(timeoutMilliseconds);
465 } 465 }
466 466
467 void WorkerThreadableLoader::MainThreadLoaderHolder::cancel() 467 void WorkerThreadableLoader::MainThreadLoaderHolder::cancel()
468 { 468 {
469 DCHECK(isMainThread()); 469 DCHECK(isMainThread());
470 m_workerLoader = nullptr;
470 if (!m_mainThreadLoader) 471 if (!m_mainThreadLoader)
471 return; 472 return;
472 m_mainThreadLoader->cancel(); 473 m_mainThreadLoader->cancel();
473 m_mainThreadLoader = nullptr; 474 m_mainThreadLoader = nullptr;
474 } 475 }
475 476
476 void WorkerThreadableLoader::MainThreadLoaderHolder::didSendData(unsigned long l ong bytesSent, unsigned long long totalBytesToBeSent) 477 void WorkerThreadableLoader::MainThreadLoaderHolder::didSendData(unsigned long l ong bytesSent, unsigned long long totalBytesToBeSent)
477 { 478 {
478 DCHECK(isMainThread()); 479 DCHECK(isMainThread());
479 CrossThreadPersistent<WorkerThreadableLoader> workerLoader = m_workerLoader. get(); 480 CrossThreadPersistent<WorkerThreadableLoader> workerLoader = m_workerLoader. get();
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
514 DCHECK(isMainThread()); 515 DCHECK(isMainThread());
515 CrossThreadPersistent<WorkerThreadableLoader> workerLoader = m_workerLoader. get(); 516 CrossThreadPersistent<WorkerThreadableLoader> workerLoader = m_workerLoader. get();
516 if (!workerLoader || !m_forwarder) 517 if (!workerLoader || !m_forwarder)
517 return; 518 return;
518 m_forwarder->forwardTask(BLINK_FROM_HERE, createCrossThreadTask(&WorkerThrea dableLoader::didReceiveCachedMetadata, workerLoader, passed(createVectorFromMemo ryRegion(data, dataLength)))); 519 m_forwarder->forwardTask(BLINK_FROM_HERE, createCrossThreadTask(&WorkerThrea dableLoader::didReceiveCachedMetadata, workerLoader, passed(createVectorFromMemo ryRegion(data, dataLength))));
519 } 520 }
520 521
521 void WorkerThreadableLoader::MainThreadLoaderHolder::didFinishLoading(unsigned l ong identifier, double finishTime) 522 void WorkerThreadableLoader::MainThreadLoaderHolder::didFinishLoading(unsigned l ong identifier, double finishTime)
522 { 523 {
523 DCHECK(isMainThread()); 524 DCHECK(isMainThread());
524 CrossThreadPersistent<WorkerThreadableLoader> workerLoader = m_workerLoader. get(); 525 CrossThreadPersistent<WorkerThreadableLoader> workerLoader = m_workerLoader. release();
525 if (!workerLoader || !m_forwarder) 526 if (!workerLoader || !m_forwarder)
526 return; 527 return;
527 m_forwarder->forwardTaskWithDoneSignal(BLINK_FROM_HERE, createCrossThreadTas k(&WorkerThreadableLoader::didFinishLoading, workerLoader, identifier, finishTim e)); 528 m_forwarder->forwardTaskWithDoneSignal(BLINK_FROM_HERE, createCrossThreadTas k(&WorkerThreadableLoader::didFinishLoading, workerLoader, identifier, finishTim e));
528 m_forwarder = nullptr; 529 m_forwarder = nullptr;
529 } 530 }
530 531
531 void WorkerThreadableLoader::MainThreadLoaderHolder::didFail(const ResourceError & error) 532 void WorkerThreadableLoader::MainThreadLoaderHolder::didFail(const ResourceError & error)
532 { 533 {
533 DCHECK(isMainThread()); 534 DCHECK(isMainThread());
534 CrossThreadPersistent<WorkerThreadableLoader> workerLoader = m_workerLoader. get(); 535 CrossThreadPersistent<WorkerThreadableLoader> workerLoader = m_workerLoader. release();
535 if (!workerLoader || !m_forwarder) 536 if (!workerLoader || !m_forwarder)
536 return; 537 return;
537 m_forwarder->forwardTaskWithDoneSignal(BLINK_FROM_HERE, createCrossThreadTas k(&WorkerThreadableLoader::didFail, workerLoader, error)); 538 m_forwarder->forwardTaskWithDoneSignal(BLINK_FROM_HERE, createCrossThreadTas k(&WorkerThreadableLoader::didFail, workerLoader, error));
538 m_forwarder = nullptr; 539 m_forwarder = nullptr;
539 } 540 }
540 541
541 void WorkerThreadableLoader::MainThreadLoaderHolder::didFailAccessControlCheck(c onst ResourceError& error) 542 void WorkerThreadableLoader::MainThreadLoaderHolder::didFailAccessControlCheck(c onst ResourceError& error)
542 { 543 {
543 DCHECK(isMainThread()); 544 DCHECK(isMainThread());
544 CrossThreadPersistent<WorkerThreadableLoader> workerLoader = m_workerLoader. get(); 545 CrossThreadPersistent<WorkerThreadableLoader> workerLoader = m_workerLoader. release();
545 if (!workerLoader || !m_forwarder) 546 if (!workerLoader || !m_forwarder)
546 return; 547 return;
547 m_forwarder->forwardTaskWithDoneSignal(BLINK_FROM_HERE, createCrossThreadTas k(&WorkerThreadableLoader::didFailAccessControlCheck, workerLoader, error)); 548 m_forwarder->forwardTaskWithDoneSignal(BLINK_FROM_HERE, createCrossThreadTas k(&WorkerThreadableLoader::didFailAccessControlCheck, workerLoader, error));
548 m_forwarder = nullptr; 549 m_forwarder = nullptr;
549 } 550 }
550 551
551 void WorkerThreadableLoader::MainThreadLoaderHolder::didFailRedirectCheck() 552 void WorkerThreadableLoader::MainThreadLoaderHolder::didFailRedirectCheck()
552 { 553 {
553 DCHECK(isMainThread()); 554 DCHECK(isMainThread());
554 CrossThreadPersistent<WorkerThreadableLoader> workerLoader = m_workerLoader. get(); 555 CrossThreadPersistent<WorkerThreadableLoader> workerLoader = m_workerLoader. release();
555 if (!workerLoader || !m_forwarder) 556 if (!workerLoader || !m_forwarder)
556 return; 557 return;
557 m_forwarder->forwardTaskWithDoneSignal(BLINK_FROM_HERE, createCrossThreadTas k(&WorkerThreadableLoader::didFailRedirectCheck, workerLoader)); 558 m_forwarder->forwardTaskWithDoneSignal(BLINK_FROM_HERE, createCrossThreadTas k(&WorkerThreadableLoader::didFailRedirectCheck, workerLoader));
558 m_forwarder = nullptr; 559 m_forwarder = nullptr;
559 } 560 }
560 561
561 void WorkerThreadableLoader::MainThreadLoaderHolder::didReceiveResourceTiming(co nst ResourceTimingInfo& info) 562 void WorkerThreadableLoader::MainThreadLoaderHolder::didReceiveResourceTiming(co nst ResourceTimingInfo& info)
562 { 563 {
563 DCHECK(isMainThread()); 564 DCHECK(isMainThread());
564 CrossThreadPersistent<WorkerThreadableLoader> workerLoader = m_workerLoader. get(); 565 CrossThreadPersistent<WorkerThreadableLoader> workerLoader = m_workerLoader. get();
565 if (!workerLoader || !m_forwarder) 566 if (!workerLoader || !m_forwarder)
566 return; 567 return;
567 m_forwarder->forwardTask(BLINK_FROM_HERE, createCrossThreadTask(&WorkerThrea dableLoader::didReceiveResourceTiming, workerLoader, info)); 568 m_forwarder->forwardTask(BLINK_FROM_HERE, createCrossThreadTask(&WorkerThrea dableLoader::didReceiveResourceTiming, workerLoader, info));
568 } 569 }
569 570
570 void WorkerThreadableLoader::MainThreadLoaderHolder::contextDestroyed() 571 void WorkerThreadableLoader::MainThreadLoaderHolder::contextDestroyed()
571 { 572 {
572 DCHECK(isMainThread()); 573 DCHECK(isMainThread());
573 if (m_forwarder) { 574 if (m_forwarder) {
574 m_forwarder->abort(); 575 m_forwarder->abort();
575 m_forwarder = nullptr; 576 m_forwarder = nullptr;
576 } 577 }
577 m_workerLoader = nullptr;
578 cancel(); 578 cancel();
579 } 579 }
580 580
581 DEFINE_TRACE(WorkerThreadableLoader::MainThreadLoaderHolder) 581 DEFINE_TRACE(WorkerThreadableLoader::MainThreadLoaderHolder)
582 { 582 {
583 visitor->trace(m_forwarder); 583 visitor->trace(m_forwarder);
584 visitor->trace(m_mainThreadLoader); 584 visitor->trace(m_mainThreadLoader);
585 WorkerThreadLifecycleObserver::trace(visitor); 585 WorkerThreadLifecycleObserver::trace(visitor);
586 } 586 }
587 587
(...skipping 11 matching lines...) Expand all
599 const ResourceLoaderOptions& originalResourceLoaderOptions) 599 const ResourceLoaderOptions& originalResourceLoaderOptions)
600 { 600 {
601 DCHECK(isMainThread()); 601 DCHECK(isMainThread());
602 ResourceLoaderOptions resourceLoaderOptions = originalResourceLoaderOptions; 602 ResourceLoaderOptions resourceLoaderOptions = originalResourceLoaderOptions;
603 resourceLoaderOptions.requestInitiatorContext = WorkerContext; 603 resourceLoaderOptions.requestInitiatorContext = WorkerContext;
604 m_mainThreadLoader = DocumentThreadableLoader::create(document, this, option s, resourceLoaderOptions); 604 m_mainThreadLoader = DocumentThreadableLoader::create(document, this, option s, resourceLoaderOptions);
605 m_mainThreadLoader->start(ResourceRequest(request.get())); 605 m_mainThreadLoader->start(ResourceRequest(request.get()));
606 } 606 }
607 607
608 } // namespace blink 608 } // namespace blink
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698