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

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

Issue 958083002: PlzNavigate: Show error pages when the navigation failed before commit (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@support-data-urls
Patch Set: Fixed compilation error Created 5 years, 8 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 // 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 <algorithm> 7 #include <algorithm>
8 #include <deque> 8 #include <deque>
9 #include <string> 9 #include <string>
10 10
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
64 using blink::WebURLLoaderClient; 64 using blink::WebURLLoaderClient;
65 using blink::WebURLRequest; 65 using blink::WebURLRequest;
66 using blink::WebURLResponse; 66 using blink::WebURLResponse;
67 67
68 namespace content { 68 namespace content {
69 69
70 // Utilities ------------------------------------------------------------------ 70 // Utilities ------------------------------------------------------------------
71 71
72 namespace { 72 namespace {
73 73
74 const char kThrottledErrorDescription[] =
75 "Request throttled. Visit http://dev.chromium.org/throttling for more "
76 "information.";
77 const size_t kBodyStreamPipeCapacity = 4 * 1024; 74 const size_t kBodyStreamPipeCapacity = 4 * 1024;
78 75
79 typedef ResourceDevToolsInfo::HeadersVector HeadersVector; 76 typedef ResourceDevToolsInfo::HeadersVector HeadersVector;
80 77
81 // Converts timing data from |load_timing| to the format used by WebKit. 78 // Converts timing data from |load_timing| to the format used by WebKit.
82 void PopulateURLLoadTiming(const net::LoadTimingInfo& load_timing, 79 void PopulateURLLoadTiming(const net::LoadTimingInfo& load_timing,
83 WebURLLoadTiming* url_timing) { 80 WebURLLoadTiming* url_timing) {
84 DCHECK(!load_timing.request_start.is_null()); 81 DCHECK(!load_timing.request_start.is_null());
85 82
86 const TimeTicks kNullTicks; 83 const TimeTicks kNullTicks;
(...skipping 596 matching lines...) Expand 10 before | Expand all | Expand 10 after
683 int data_length, 680 int data_length,
684 int encoded_data_length) { 681 int encoded_data_length) {
685 if (!client_) 682 if (!client_)
686 return; 683 return;
687 684
688 if (request_.useStreamOnResponse()) { 685 if (request_.useStreamOnResponse()) {
689 // We don't support ftp_listening_delegate_ and multipart_delegate_ for now. 686 // We don't support ftp_listening_delegate_ and multipart_delegate_ for now.
690 // TODO(yhirano): Support ftp listening and multipart. 687 // TODO(yhirano): Support ftp listening and multipart.
691 MojoResult rv = WriteDataOnBodyStream(data, data_length); 688 MojoResult rv = WriteDataOnBodyStream(data, data_length);
692 if (rv != MOJO_RESULT_OK && client_) { 689 if (rv != MOJO_RESULT_OK && client_) {
693 client_->didFail(loader_, 690 client_->didFail(
694 loader_->CreateError(request_.url(), 691 loader_, CreateWebURLError(request_.url(), false, net::ERR_FAILED));
695 false,
696 net::ERR_FAILED));
697 } 692 }
698 } else if (ftp_listing_delegate_) { 693 } else if (ftp_listing_delegate_) {
699 // The FTP listing delegate will make the appropriate calls to 694 // The FTP listing delegate will make the appropriate calls to
700 // client_->didReceiveData and client_->didReceiveResponse. Since the 695 // client_->didReceiveData and client_->didReceiveResponse. Since the
701 // delegate may want to do work after sending data to the delegate, keep 696 // delegate may want to do work after sending data to the delegate, keep
702 // |this| and the delegate alive until it's finished handling the data. 697 // |this| and the delegate alive until it's finished handling the data.
703 scoped_refptr<Context> protect(this); 698 scoped_refptr<Context> protect(this);
704 ftp_listing_delegate_->OnReceivedData(data, data_length); 699 ftp_listing_delegate_->OnReceivedData(data, data_length);
705 } else if (multipart_delegate_) { 700 } else if (multipart_delegate_) {
706 // The multipart delegate will make the appropriate calls to 701 // The multipart delegate will make the appropriate calls to
(...skipping 29 matching lines...) Expand all
736 if (ftp_listing_delegate_) { 731 if (ftp_listing_delegate_) {
737 ftp_listing_delegate_->OnCompletedRequest(); 732 ftp_listing_delegate_->OnCompletedRequest();
738 ftp_listing_delegate_.reset(NULL); 733 ftp_listing_delegate_.reset(NULL);
739 } else if (multipart_delegate_) { 734 } else if (multipart_delegate_) {
740 multipart_delegate_->OnCompletedRequest(); 735 multipart_delegate_->OnCompletedRequest();
741 multipart_delegate_.reset(NULL); 736 multipart_delegate_.reset(NULL);
742 } 737 }
743 738
744 if (client_) { 739 if (client_) {
745 if (error_code != net::OK) { 740 if (error_code != net::OK) {
746 client_->didFail(loader_, CreateError(request_.url(), 741 client_->didFail(
747 stale_copy_in_cache, 742 loader_,
748 error_code)); 743 CreateWebURLError(request_.url(), stale_copy_in_cache, error_code));
749 } else { 744 } else {
750 if (request_.useStreamOnResponse()) { 745 if (request_.useStreamOnResponse()) {
751 got_all_stream_body_data_ = true; 746 got_all_stream_body_data_ = true;
752 if (body_stream_buffer_.empty()) { 747 if (body_stream_buffer_.empty()) {
753 // Close the handle to notify the end of data. 748 // Close the handle to notify the end of data.
754 body_stream_writer_.reset(); 749 body_stream_writer_.reset();
755 client_->didFinishLoading( 750 client_->didFinishLoading(
756 loader_, (completion_time - TimeTicks()).InSecondsF(), 751 loader_, (completion_time - TimeTicks()).InSecondsF(),
757 total_transfer_size); 752 total_transfer_size);
758 } 753 }
(...skipping 135 matching lines...) Expand 10 before | Expand all | Expand 10 after
894 MOJO_DEADLINE_INDEFINITE, 889 MOJO_DEADLINE_INDEFINITE,
895 base::Bind(&WebURLLoaderImpl::Context::OnHandleGotWritable, 890 base::Bind(&WebURLLoaderImpl::Context::OnHandleGotWritable,
896 base::Unretained(this))); 891 base::Unretained(this)));
897 } 892 }
898 return rv; 893 return rv;
899 } 894 }
900 895
901 void WebURLLoaderImpl::Context::OnHandleGotWritable(MojoResult result) { 896 void WebURLLoaderImpl::Context::OnHandleGotWritable(MojoResult result) {
902 if (result != MOJO_RESULT_OK) { 897 if (result != MOJO_RESULT_OK) {
903 if (client_) { 898 if (client_) {
904 client_->didFail(loader_, 899 client_->didFail(
905 loader_->CreateError(request_.url(), 900 loader_, CreateWebURLError(request_.url(), false, net::ERR_FAILED));
906 false,
907 net::ERR_FAILED));
908 // |this| can be deleted here. 901 // |this| can be deleted here.
909 } 902 }
910 return; 903 return;
911 } 904 }
912 905
913 if (body_stream_buffer_.empty()) 906 if (body_stream_buffer_.empty())
914 return; 907 return;
915 908
916 MojoResult rv = WriteDataOnBodyStream(nullptr, 0); 909 MojoResult rv = WriteDataOnBodyStream(nullptr, 0);
917 if (rv == MOJO_RESULT_OK) { 910 if (rv == MOJO_RESULT_OK) {
918 if (got_all_stream_body_data_ && body_stream_buffer_.empty()) { 911 if (got_all_stream_body_data_ && body_stream_buffer_.empty()) {
919 // Close the handle to notify the end of data. 912 // Close the handle to notify the end of data.
920 body_stream_writer_.reset(); 913 body_stream_writer_.reset();
921 if (client_) { 914 if (client_) {
922 // TODO(yhirano): Pass appropriate arguments. 915 // TODO(yhirano): Pass appropriate arguments.
923 client_->didFinishLoading(loader_, 0, 0); 916 client_->didFinishLoading(loader_, 0, 0);
924 // |this| can be deleted here. 917 // |this| can be deleted here.
925 } 918 }
926 } 919 }
927 } else { 920 } else {
928 if (client_) { 921 if (client_) {
929 client_->didFail(loader_, loader_->CreateError(request_.url(), 922 client_->didFail(
930 false, 923 loader_, CreateWebURLError(request_.url(), false, net::ERR_FAILED));
931 net::ERR_FAILED));
932 // |this| can be deleted here. 924 // |this| can be deleted here.
933 } 925 }
934 } 926 }
935 } 927 }
936 928
937 // WebURLLoaderImpl ----------------------------------------------------------- 929 // WebURLLoaderImpl -----------------------------------------------------------
938 930
939 WebURLLoaderImpl::WebURLLoaderImpl( 931 WebURLLoaderImpl::WebURLLoaderImpl(
940 ResourceDispatcher* resource_dispatcher, 932 ResourceDispatcher* resource_dispatcher,
941 scoped_refptr<base::SingleThreadTaskRunner> task_runner) 933 scoped_refptr<base::SingleThreadTaskRunner> task_runner)
942 : context_(new Context(this, resource_dispatcher, task_runner)) { 934 : context_(new Context(this, resource_dispatcher, task_runner)) {
943 } 935 }
944 936
945 WebURLLoaderImpl::~WebURLLoaderImpl() { 937 WebURLLoaderImpl::~WebURLLoaderImpl() {
946 cancel(); 938 cancel();
947 } 939 }
948 940
949 WebURLError WebURLLoaderImpl::CreateError(const WebURL& unreachable_url,
950 bool stale_copy_in_cache,
951 int reason) {
952 WebURLError error;
953 error.domain = WebString::fromUTF8(net::kErrorDomain);
954 error.reason = reason;
955 error.unreachableURL = unreachable_url;
956 error.staleCopyInCache = stale_copy_in_cache;
957 if (reason == net::ERR_ABORTED) {
958 error.isCancellation = true;
959 } else if (reason == net::ERR_TEMPORARILY_THROTTLED) {
960 error.localizedDescription = WebString::fromUTF8(
961 kThrottledErrorDescription);
962 } else {
963 error.localizedDescription = WebString::fromUTF8(
964 net::ErrorToString(reason));
965 }
966 return error;
967 }
968
969 void WebURLLoaderImpl::PopulateURLResponse(const GURL& url, 941 void WebURLLoaderImpl::PopulateURLResponse(const GURL& url,
970 const ResourceResponseInfo& info, 942 const ResourceResponseInfo& info,
971 WebURLResponse* response) { 943 WebURLResponse* response) {
972 response->setURL(url); 944 response->setURL(url);
973 response->setResponseTime(info.response_time.ToInternalValue()); 945 response->setResponseTime(info.response_time.ToInternalValue());
974 response->setMIMEType(WebString::fromUTF8(info.mime_type)); 946 response->setMIMEType(WebString::fromUTF8(info.mime_type));
975 response->setTextEncodingName(WebString::fromUTF8(info.charset)); 947 response->setTextEncodingName(WebString::fromUTF8(info.charset));
976 response->setExpectedContentLength(info.content_length); 948 response->setExpectedContentLength(info.content_length);
977 response->setSecurityInfo(info.security_info); 949 response->setSecurityInfo(info.security_info);
978 response->setAppCacheID(info.appcache_id); 950 response->setAppCacheID(info.appcache_id);
(...skipping 159 matching lines...) Expand 10 before | Expand all | Expand 10 after
1138 int intra_priority_value) { 1110 int intra_priority_value) {
1139 context_->DidChangePriority(new_priority, intra_priority_value); 1111 context_->DidChangePriority(new_priority, intra_priority_value);
1140 } 1112 }
1141 1113
1142 bool WebURLLoaderImpl::attachThreadedDataReceiver( 1114 bool WebURLLoaderImpl::attachThreadedDataReceiver(
1143 blink::WebThreadedDataReceiver* threaded_data_receiver) { 1115 blink::WebThreadedDataReceiver* threaded_data_receiver) {
1144 return context_->AttachThreadedDataReceiver(threaded_data_receiver); 1116 return context_->AttachThreadedDataReceiver(threaded_data_receiver);
1145 } 1117 }
1146 1118
1147 } // namespace content 1119 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698