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

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

Issue 2020313002: Verify the order of RawResourceClient callbacks in DocumentThreadableLoader (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 6 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) 2011, 2012 Google Inc. All rights reserved. 2 * Copyright (C) 2011, 2012 Google Inc. All rights reserved.
3 * Copyright (C) 2013, Intel Corporation 3 * Copyright (C) 2013, Intel Corporation
4 * 4 *
5 * Redistribution and use in source and binary forms, with or without 5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are 6 * modification, are permitted provided that the following conditions are
7 * met: 7 * met:
8 * 8 *
9 * * Redistributions of source code must retain the above copyright 9 * * Redistributions of source code must retain the above copyright
10 * notice, this list of conditions and the following disclaimer. 10 * notice, this list of conditions and the following disclaimer.
(...skipping 407 matching lines...) Expand 10 before | Expand all | Expand 10 after
418 // called by RawResource::willSendRequest(). If called by 418 // called by RawResource::willSendRequest(). If called by
419 // RawResource::didAddClient(), clearing |request| won't be propagated 419 // RawResource::didAddClient(), clearing |request| won't be propagated
420 // to content::WebURLLoaderImpl. So, this loader must also get detached from 420 // to content::WebURLLoaderImpl. So, this loader must also get detached from
421 // the resource by calling clearResource(). 421 // the resource by calling clearResource().
422 void DocumentThreadableLoader::redirectReceived(Resource* resource, ResourceRequ est& request, const ResourceResponse& redirectResponse) 422 void DocumentThreadableLoader::redirectReceived(Resource* resource, ResourceRequ est& request, const ResourceResponse& redirectResponse)
423 { 423 {
424 ASSERT(m_client); 424 ASSERT(m_client);
425 ASSERT_UNUSED(resource, resource == this->resource()); 425 ASSERT_UNUSED(resource, resource == this->resource());
426 ASSERT(m_async); 426 ASSERT(m_async);
427 427
428 m_checker.redirectReceived();
429
428 if (!m_actualRequest.isNull()) { 430 if (!m_actualRequest.isNull()) {
429 reportResponseReceived(resource->identifier(), redirectResponse); 431 reportResponseReceived(resource->identifier(), redirectResponse);
430 432
431 handlePreflightFailure(redirectResponse.url().getString(), "Response for preflight is invalid (redirect)"); 433 handlePreflightFailure(redirectResponse.url().getString(), "Response for preflight is invalid (redirect)");
432 // |this| may be dead here. 434 // |this| may be dead here.
433 435
434 request = ResourceRequest(); 436 request = ResourceRequest();
435 437
436 return; 438 return;
437 } 439 }
(...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after
551 clear(); 553 clear();
552 client->didFailRedirectCheck(); 554 client->didFailRedirectCheck();
553 // |this| may be dead here. 555 // |this| may be dead here.
554 } 556 }
555 557
556 request = ResourceRequest(); 558 request = ResourceRequest();
557 } 559 }
558 560
559 void DocumentThreadableLoader::redirectBlocked() 561 void DocumentThreadableLoader::redirectBlocked()
560 { 562 {
563 m_checker.redirectBlocked();
564
561 // Tells the client that a redirect was received but not followed (for an un known reason). 565 // Tells the client that a redirect was received but not followed (for an un known reason).
562 ThreadableLoaderClient* client = m_client; 566 ThreadableLoaderClient* client = m_client;
563 clear(); 567 clear();
564 client->didFailRedirectCheck(); 568 client->didFailRedirectCheck();
565 // |this| may be dead here 569 // |this| may be dead here
566 } 570 }
567 571
568 void DocumentThreadableLoader::dataSent(Resource* resource, unsigned long long b ytesSent, unsigned long long totalBytesToBeSent) 572 void DocumentThreadableLoader::dataSent(Resource* resource, unsigned long long b ytesSent, unsigned long long totalBytesToBeSent)
569 { 573 {
570 ASSERT(m_client); 574 ASSERT(m_client);
571 ASSERT_UNUSED(resource, resource == this->resource()); 575 ASSERT_UNUSED(resource, resource == this->resource());
572 ASSERT(m_async); 576 ASSERT(m_async);
573 577
578 m_checker.dataSent();
574 m_client->didSendData(bytesSent, totalBytesToBeSent); 579 m_client->didSendData(bytesSent, totalBytesToBeSent);
575 // |this| may be dead here. 580 // |this| may be dead here.
576 } 581 }
577 582
578 void DocumentThreadableLoader::dataDownloaded(Resource* resource, int dataLength ) 583 void DocumentThreadableLoader::dataDownloaded(Resource* resource, int dataLength )
579 { 584 {
580 ASSERT(m_client); 585 ASSERT(m_client);
581 ASSERT_UNUSED(resource, resource == this->resource()); 586 ASSERT_UNUSED(resource, resource == this->resource());
582 ASSERT(m_actualRequest.isNull()); 587 ASSERT(m_actualRequest.isNull());
583 ASSERT(m_async); 588 ASSERT(m_async);
584 589
590 m_checker.dataDownloaded();
585 m_client->didDownloadData(dataLength); 591 m_client->didDownloadData(dataLength);
586 // |this| may be dead here. 592 // |this| may be dead here.
587 } 593 }
588 594
589 void DocumentThreadableLoader::didReceiveResourceTiming(Resource* resource, cons t ResourceTimingInfo& info) 595 void DocumentThreadableLoader::didReceiveResourceTiming(Resource* resource, cons t ResourceTimingInfo& info)
590 { 596 {
591 ASSERT(m_client); 597 ASSERT(m_client);
592 ASSERT_UNUSED(resource, resource == this->resource()); 598 ASSERT_UNUSED(resource, resource == this->resource());
593 ASSERT(m_async); 599 ASSERT(m_async);
594 600
595 m_client->didReceiveResourceTiming(info); 601 m_client->didReceiveResourceTiming(info);
596 // |this| may be dead here. 602 // |this| may be dead here.
597 } 603 }
598 604
599 void DocumentThreadableLoader::responseReceived(Resource* resource, const Resour ceResponse& response, PassOwnPtr<WebDataConsumerHandle> handle) 605 void DocumentThreadableLoader::responseReceived(Resource* resource, const Resour ceResponse& response, PassOwnPtr<WebDataConsumerHandle> handle)
600 { 606 {
601 ASSERT_UNUSED(resource, resource == this->resource()); 607 ASSERT_UNUSED(resource, resource == this->resource());
602 ASSERT(m_async); 608 ASSERT(m_async);
603 609
610 m_checker.responseReceived();
611
604 if (handle) 612 if (handle)
605 m_isUsingDataConsumerHandle = true; 613 m_isUsingDataConsumerHandle = true;
606 614
607 handleResponse(resource->identifier(), response, std::move(handle)); 615 handleResponse(resource->identifier(), response, std::move(handle));
608 // |this| may be dead here. 616 // |this| may be dead here.
609 } 617 }
610 618
611 void DocumentThreadableLoader::handlePreflightResponse(const ResourceResponse& r esponse) 619 void DocumentThreadableLoader::handlePreflightResponse(const ResourceResponse& r esponse)
612 { 620 {
613 String accessControlErrorDescription; 621 String accessControlErrorDescription;
(...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after
707 // |this| may be dead here. 715 // |this| may be dead here.
708 return; 716 return;
709 } 717 }
710 } 718 }
711 719
712 m_client->didReceiveResponse(identifier, response, std::move(handle)); 720 m_client->didReceiveResponse(identifier, response, std::move(handle));
713 } 721 }
714 722
715 void DocumentThreadableLoader::setSerializedCachedMetadata(Resource*, const char * data, size_t size) 723 void DocumentThreadableLoader::setSerializedCachedMetadata(Resource*, const char * data, size_t size)
716 { 724 {
725 m_checker.setSerializedCachedMetadata();
726
717 if (!m_actualRequest.isNull()) 727 if (!m_actualRequest.isNull())
718 return; 728 return;
719 m_client->didReceiveCachedMetadata(data, size); 729 m_client->didReceiveCachedMetadata(data, size);
720 // |this| may be dead here. 730 // |this| may be dead here.
721 } 731 }
722 732
723 void DocumentThreadableLoader::dataReceived(Resource* resource, const char* data , size_t dataLength) 733 void DocumentThreadableLoader::dataReceived(Resource* resource, const char* data , size_t dataLength)
724 { 734 {
725 ASSERT_UNUSED(resource, resource == this->resource()); 735 ASSERT_UNUSED(resource, resource == this->resource());
726 ASSERT(m_async); 736 ASSERT(m_async);
727 737
738 m_checker.dataReceived();
739
728 if (m_isUsingDataConsumerHandle) 740 if (m_isUsingDataConsumerHandle)
729 return; 741 return;
730 742
731 // TODO(junov): Fix the ThreadableLoader ecosystem to use size_t. 743 // TODO(junov): Fix the ThreadableLoader ecosystem to use size_t.
732 // Until then, we use safeCast to trap potential overflows. 744 // Until then, we use safeCast to trap potential overflows.
733 handleReceivedData(data, safeCast<unsigned>(dataLength)); 745 handleReceivedData(data, safeCast<unsigned>(dataLength));
734 // |this| may be dead here. 746 // |this| may be dead here.
735 } 747 }
736 748
737 void DocumentThreadableLoader::handleReceivedData(const char* data, size_t dataL ength) 749 void DocumentThreadableLoader::handleReceivedData(const char* data, size_t dataL ength)
738 { 750 {
739 ASSERT(m_client); 751 ASSERT(m_client);
740 752
741 // Preflight data should be invisible to clients. 753 // Preflight data should be invisible to clients.
742 if (!m_actualRequest.isNull()) 754 if (!m_actualRequest.isNull())
743 return; 755 return;
744 756
745 ASSERT(m_fallbackRequestForServiceWorker.isNull()); 757 ASSERT(m_fallbackRequestForServiceWorker.isNull());
746 758
747 m_client->didReceiveData(data, dataLength); 759 m_client->didReceiveData(data, dataLength);
748 // |this| may be dead here in async mode. 760 // |this| may be dead here in async mode.
749 } 761 }
750 762
751 void DocumentThreadableLoader::notifyFinished(Resource* resource) 763 void DocumentThreadableLoader::notifyFinished(Resource* resource)
752 { 764 {
753 ASSERT(m_client); 765 ASSERT(m_client);
754 ASSERT(resource == this->resource()); 766 ASSERT(resource == this->resource());
755 ASSERT(m_async); 767 ASSERT(m_async);
756 768
769 m_checker.notifyFinished(resource);
770
757 if (resource->errorOccurred()) { 771 if (resource->errorOccurred()) {
758 handleError(resource->resourceError()); 772 handleError(resource->resourceError());
759 // |this| may be dead here. 773 // |this| may be dead here.
760 } else { 774 } else {
761 handleSuccessfulFinish(resource->identifier(), resource->loadFinishTime( )); 775 handleSuccessfulFinish(resource->identifier(), resource->loadFinishTime( ));
762 // |this| may be dead here. 776 // |this| may be dead here.
763 } 777 }
764 } 778 }
765 779
766 void DocumentThreadableLoader::handleSuccessfulFinish(unsigned long identifier, double finishTime) 780 void DocumentThreadableLoader::handleSuccessfulFinish(unsigned long identifier, double finishTime)
(...skipping 224 matching lines...) Expand 10 before | Expand all | Expand 10 after
991 return m_securityOrigin ? m_securityOrigin.get() : document().getSecurityOri gin(); 1005 return m_securityOrigin ? m_securityOrigin.get() : document().getSecurityOri gin();
992 } 1006 }
993 1007
994 Document& DocumentThreadableLoader::document() const 1008 Document& DocumentThreadableLoader::document() const
995 { 1009 {
996 ASSERT(m_document); 1010 ASSERT(m_document);
997 return *m_document; 1011 return *m_document;
998 } 1012 }
999 1013
1000 } // namespace blink 1014 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698