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

Side by Side Diff: content/child/web_url_loader_impl.cc

Issue 2537753002: Remove WebURLLoader* argument from WebURLLoaderClient methods (Closed)
Patch Set: a Created 4 years 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 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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 "content/child/web_url_loader_impl.h" 5 #include "content/child/web_url_loader_impl.h"
6 6
7 #include <stdint.h> 7 #include <stdint.h>
8 8
9 #include <algorithm> 9 #include <algorithm>
10 #include <memory> 10 #include <memory>
(...skipping 630 matching lines...) Expand 10 before | Expand all | Expand 10 after
641 } 641 }
642 642
643 void WebURLLoaderImpl::Context::SetTaskRunner( 643 void WebURLLoaderImpl::Context::SetTaskRunner(
644 const scoped_refptr<base::SingleThreadTaskRunner>& task_runner) { 644 const scoped_refptr<base::SingleThreadTaskRunner>& task_runner) {
645 task_runner_ = task_runner; 645 task_runner_ = task_runner;
646 } 646 }
647 647
648 void WebURLLoaderImpl::Context::OnUploadProgress(uint64_t position, 648 void WebURLLoaderImpl::Context::OnUploadProgress(uint64_t position,
649 uint64_t size) { 649 uint64_t size) {
650 if (client_) 650 if (client_)
651 client_->didSendData(loader_, position, size); 651 client_->didSendData(position, size);
652 } 652 }
653 653
654 bool WebURLLoaderImpl::Context::OnReceivedRedirect( 654 bool WebURLLoaderImpl::Context::OnReceivedRedirect(
655 const net::RedirectInfo& redirect_info, 655 const net::RedirectInfo& redirect_info,
656 const ResourceResponseInfo& info) { 656 const ResourceResponseInfo& info) {
657 if (!client_) 657 if (!client_)
658 return false; 658 return false;
659 659
660 TRACE_EVENT_WITH_FLOW0( 660 TRACE_EVENT_WITH_FLOW0(
661 "loading", "WebURLLoaderImpl::Context::OnReceivedRedirect", 661 "loading", "WebURLLoaderImpl::Context::OnReceivedRedirect",
662 this, TRACE_EVENT_FLAG_FLOW_IN | TRACE_EVENT_FLAG_FLOW_OUT); 662 this, TRACE_EVENT_FLAG_FLOW_IN | TRACE_EVENT_FLAG_FLOW_OUT);
663 663
664 WebURLResponse response; 664 WebURLResponse response;
665 PopulateURLResponse(request_.url(), info, &response, 665 PopulateURLResponse(request_.url(), info, &response,
666 request_.reportRawHeaders()); 666 request_.reportRawHeaders());
667 667
668 WebURLRequest new_request = PopulateURLRequestForRedirect( 668 WebURLRequest new_request = PopulateURLRequestForRedirect(
669 request_, redirect_info, 669 request_, redirect_info,
670 info.was_fetched_via_service_worker 670 info.was_fetched_via_service_worker
671 ? blink::WebURLRequest::SkipServiceWorker::None 671 ? blink::WebURLRequest::SkipServiceWorker::None
672 : blink::WebURLRequest::SkipServiceWorker::All); 672 : blink::WebURLRequest::SkipServiceWorker::All);
673 673
674 bool follow = client_->willFollowRedirect(loader_, new_request, response); 674 bool follow = client_->willFollowRedirect(new_request, response);
675 if (!follow) { 675 if (!follow) {
676 request_ = WebURLRequest(); 676 request_ = WebURLRequest();
677 677
678 return false; 678 return false;
679 } 679 }
680 680
681 DCHECK(WebURL(redirect_info.new_url) == new_request.url()); 681 DCHECK(WebURL(redirect_info.new_url) == new_request.url());
682 682
683 request_ = new_request; 683 request_ = new_request;
684 684
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after
764 764
765 auto read_handle = base::MakeUnique<SharedMemoryDataConsumerHandle>( 765 auto read_handle = base::MakeUnique<SharedMemoryDataConsumerHandle>(
766 mode, base::Bind(&Context::CancelBodyStreaming, this), 766 mode, base::Bind(&Context::CancelBodyStreaming, this),
767 &body_stream_writer_); 767 &body_stream_writer_);
768 768
769 // Here |body_stream_writer_| has an indirect reference to |this| and that 769 // Here |body_stream_writer_| has an indirect reference to |this| and that
770 // creates a reference cycle, but it is not a problem because the cycle 770 // creates a reference cycle, but it is not a problem because the cycle
771 // will break if one of the following happens: 771 // will break if one of the following happens:
772 // 1) The body data transfer is done (with or without an error). 772 // 1) The body data transfer is done (with or without an error).
773 // 2) |read_handle| (and its reader) is detached. 773 // 2) |read_handle| (and its reader) is detached.
774 client_->didReceiveResponse(loader_, response, std::move(read_handle)); 774 client_->didReceiveResponse(response, std::move(read_handle));
775 // TODO(yhirano): Support ftp listening and multipart 775 // TODO(yhirano): Support ftp listening and multipart
776 return; 776 return;
777 } else { 777 } else {
778 client_->didReceiveResponse(loader_, response); 778 client_->didReceiveResponse(response);
779 } 779 }
780 780
781 // We may have been cancelled after didReceiveResponse, which would leave us 781 // We may have been cancelled after didReceiveResponse, which would leave us
782 // without a client and therefore without much need to do further handling. 782 // without a client and therefore without much need to do further handling.
783 if (!client_) 783 if (!client_)
784 return; 784 return;
785 785
786 DCHECK(!ftp_listing_delegate_.get()); 786 DCHECK(!ftp_listing_delegate_.get());
787 if (info.mime_type == "text/vnd.chromium.ftp-dir" && !show_raw_listing) { 787 if (info.mime_type == "text/vnd.chromium.ftp-dir" && !show_raw_listing) {
788 ftp_listing_delegate_.reset( 788 ftp_listing_delegate_.reset(
789 new FtpDirectoryListingResponseDelegate(client_, loader_, response)); 789 new FtpDirectoryListingResponseDelegate(client_, loader_, response));
790 } 790 }
791 } 791 }
792 792
793 void WebURLLoaderImpl::Context::OnDownloadedData(int len, 793 void WebURLLoaderImpl::Context::OnDownloadedData(int len,
794 int encoded_data_length) { 794 int encoded_data_length) {
795 if (client_) 795 if (client_)
796 client_->didDownloadData(loader_, len, encoded_data_length); 796 client_->didDownloadData(len, encoded_data_length);
797 } 797 }
798 798
799 void WebURLLoaderImpl::Context::OnReceivedData( 799 void WebURLLoaderImpl::Context::OnReceivedData(
800 std::unique_ptr<ReceivedData> data) { 800 std::unique_ptr<ReceivedData> data) {
801 const char* payload = data->payload(); 801 const char* payload = data->payload();
802 int data_length = data->length(); 802 int data_length = data->length();
803 int encoded_data_length = data->encoded_data_length(); 803 int encoded_data_length = data->encoded_data_length();
804 if (!client_) 804 if (!client_)
805 return; 805 return;
806 806
807 TRACE_EVENT_WITH_FLOW0( 807 TRACE_EVENT_WITH_FLOW0(
808 "loading", "WebURLLoaderImpl::Context::OnReceivedData", 808 "loading", "WebURLLoaderImpl::Context::OnReceivedData",
809 this, TRACE_EVENT_FLAG_FLOW_IN | TRACE_EVENT_FLAG_FLOW_OUT); 809 this, TRACE_EVENT_FLAG_FLOW_IN | TRACE_EVENT_FLAG_FLOW_OUT);
810 810
811 if (ftp_listing_delegate_) { 811 if (ftp_listing_delegate_) {
812 // The FTP listing delegate will make the appropriate calls to 812 // The FTP listing delegate will make the appropriate calls to
813 // client_->didReceiveData and client_->didReceiveResponse. 813 // client_->didReceiveData and client_->didReceiveResponse.
814 ftp_listing_delegate_->OnReceivedData(payload, data_length); 814 ftp_listing_delegate_->OnReceivedData(payload, data_length);
815 } else { 815 } else {
816 // We dispatch the data even when |useStreamOnResponse()| is set, in order 816 // We dispatch the data even when |useStreamOnResponse()| is set, in order
817 // to make Devtools work. 817 // to make Devtools work.
818 client_->didReceiveData(loader_, payload, data_length, encoded_data_length); 818 client_->didReceiveData(payload, data_length, encoded_data_length);
819 819
820 if (request_.useStreamOnResponse()) { 820 if (request_.useStreamOnResponse()) {
821 // We don't support ftp_listening_delegate_ for now. 821 // We don't support ftp_listening_delegate_ for now.
822 // TODO(yhirano): Support ftp listening. 822 // TODO(yhirano): Support ftp listening.
823 body_stream_writer_->AddData(std::move(data)); 823 body_stream_writer_->AddData(std::move(data));
824 } 824 }
825 } 825 }
826 } 826 }
827 827
828 void WebURLLoaderImpl::Context::OnReceivedCachedMetadata( 828 void WebURLLoaderImpl::Context::OnReceivedCachedMetadata(
829 const char* data, int len) { 829 const char* data, int len) {
830 if (!client_) 830 if (!client_)
831 return; 831 return;
832 TRACE_EVENT_WITH_FLOW0( 832 TRACE_EVENT_WITH_FLOW0(
833 "loading", "WebURLLoaderImpl::Context::OnReceivedCachedMetadata", 833 "loading", "WebURLLoaderImpl::Context::OnReceivedCachedMetadata",
834 this, TRACE_EVENT_FLAG_FLOW_IN | TRACE_EVENT_FLAG_FLOW_OUT); 834 this, TRACE_EVENT_FLAG_FLOW_IN | TRACE_EVENT_FLAG_FLOW_OUT);
835 client_->didReceiveCachedMetadata(loader_, data, len); 835 client_->didReceiveCachedMetadata(data, len);
836 } 836 }
837 837
838 void WebURLLoaderImpl::Context::OnCompletedRequest( 838 void WebURLLoaderImpl::Context::OnCompletedRequest(
839 int error_code, 839 int error_code,
840 bool was_ignored_by_handler, 840 bool was_ignored_by_handler,
841 bool stale_copy_in_cache, 841 bool stale_copy_in_cache,
842 const base::TimeTicks& completion_time, 842 const base::TimeTicks& completion_time,
843 int64_t total_transfer_size, 843 int64_t total_transfer_size,
844 int64_t encoded_body_size) { 844 int64_t encoded_body_size) {
845 if (ftp_listing_delegate_) { 845 if (ftp_listing_delegate_) {
846 ftp_listing_delegate_->OnCompletedRequest(); 846 ftp_listing_delegate_->OnCompletedRequest();
847 ftp_listing_delegate_.reset(NULL); 847 ftp_listing_delegate_.reset(NULL);
848 } 848 }
849 849
850 if (body_stream_writer_ && error_code != net::OK) 850 if (body_stream_writer_ && error_code != net::OK)
851 body_stream_writer_->Fail(); 851 body_stream_writer_->Fail();
852 body_stream_writer_.reset(); 852 body_stream_writer_.reset();
853 853
854 if (client_) { 854 if (client_) {
855 TRACE_EVENT_WITH_FLOW0( 855 TRACE_EVENT_WITH_FLOW0(
856 "loading", "WebURLLoaderImpl::Context::OnCompletedRequest", 856 "loading", "WebURLLoaderImpl::Context::OnCompletedRequest",
857 this, TRACE_EVENT_FLAG_FLOW_IN); 857 this, TRACE_EVENT_FLAG_FLOW_IN);
858 858
859 if (error_code != net::OK) { 859 if (error_code != net::OK) {
860 client_->didFail(loader_, 860 client_->didFail(CreateWebURLError(request_.url(), stale_copy_in_cache,
861 CreateWebURLError(request_.url(), stale_copy_in_cache,
862 error_code, was_ignored_by_handler), 861 error_code, was_ignored_by_handler),
863 total_transfer_size, encoded_body_size); 862 total_transfer_size, encoded_body_size);
864 } else { 863 } else {
865 client_->didFinishLoading(loader_, 864 client_->didFinishLoading((completion_time - TimeTicks()).InSecondsF(),
866 (completion_time - TimeTicks()).InSecondsF(),
867 total_transfer_size, encoded_body_size); 865 total_transfer_size, encoded_body_size);
868 } 866 }
869 } 867 }
870 } 868 }
871 869
872 WebURLLoaderImpl::Context::~Context() { 870 WebURLLoaderImpl::Context::~Context() {
873 // We must be already cancelled at this point. 871 // We must be already cancelled at this point.
874 DCHECK_LT(request_id_, 0); 872 DCHECK_LT(request_id_, 0);
875 } 873 }
876 874
877 void WebURLLoaderImpl::Context::CancelBodyStreaming() { 875 void WebURLLoaderImpl::Context::CancelBodyStreaming() {
878 scoped_refptr<Context> protect(this); 876 scoped_refptr<Context> protect(this);
879 877
880 // Notify renderer clients that the request is canceled. 878 // Notify renderer clients that the request is canceled.
881 if (ftp_listing_delegate_) { 879 if (ftp_listing_delegate_) {
882 ftp_listing_delegate_->OnCompletedRequest(); 880 ftp_listing_delegate_->OnCompletedRequest();
883 ftp_listing_delegate_.reset(NULL); 881 ftp_listing_delegate_.reset(NULL);
884 } 882 }
885 883
886 if (body_stream_writer_) { 884 if (body_stream_writer_) {
887 body_stream_writer_->Fail(); 885 body_stream_writer_->Fail();
888 body_stream_writer_.reset(); 886 body_stream_writer_.reset();
889 } 887 }
890 if (client_) { 888 if (client_) {
891 // TODO(yhirano): Set |stale_copy_in_cache| appropriately if possible. 889 // TODO(yhirano): Set |stale_copy_in_cache| appropriately if possible.
892 client_->didFail(loader_, 890 client_->didFail(CreateWebURLError(request_.url(), false, net::ERR_ABORTED),
893 CreateWebURLError(request_.url(), false, net::ERR_ABORTED),
894 WebURLLoaderClient::kUnknownEncodedDataLength, 0); 891 WebURLLoaderClient::kUnknownEncodedDataLength, 0);
895 } 892 }
896 893
897 // Notify the browser process that the request is canceled. 894 // Notify the browser process that the request is canceled.
898 Cancel(); 895 Cancel();
899 } 896 }
900 897
901 bool WebURLLoaderImpl::Context::CanHandleDataURLRequestLocally() const { 898 bool WebURLLoaderImpl::Context::CanHandleDataURLRequestLocally() const {
902 GURL url = request_.url(); 899 GURL url = request_.url();
903 if (!url.SchemeIs(url::kDataScheme)) 900 if (!url.SchemeIs(url::kDataScheme))
(...skipping 350 matching lines...) Expand 10 before | Expand all | Expand 10 after
1254 int intra_priority_value) { 1251 int intra_priority_value) {
1255 context_->DidChangePriority(new_priority, intra_priority_value); 1252 context_->DidChangePriority(new_priority, intra_priority_value);
1256 } 1253 }
1257 1254
1258 void WebURLLoaderImpl::setLoadingTaskRunner( 1255 void WebURLLoaderImpl::setLoadingTaskRunner(
1259 base::SingleThreadTaskRunner* loading_task_runner) { 1256 base::SingleThreadTaskRunner* loading_task_runner) {
1260 context_->SetTaskRunner(loading_task_runner); 1257 context_->SetTaskRunner(loading_task_runner);
1261 } 1258 }
1262 1259
1263 } // namespace content 1260 } // namespace content
OLDNEW
« no previous file with comments | « content/child/ftp_directory_listing_response_delegate.cc ('k') | content/child/web_url_loader_impl_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698