| OLD | NEW |
| 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 166 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 177 url, &mime_type, &charset, data, headers.get()); | 177 url, &mime_type, &charset, data, headers.get()); |
| 178 if (result != net::OK) | 178 if (result != net::OK) |
| 179 return result; | 179 return result; |
| 180 | 180 |
| 181 info->headers = headers; | 181 info->headers = headers; |
| 182 info->mime_type.swap(mime_type); | 182 info->mime_type.swap(mime_type); |
| 183 info->charset.swap(charset); | 183 info->charset.swap(charset); |
| 184 info->security_info.clear(); | 184 info->security_info.clear(); |
| 185 info->content_length = data->length(); | 185 info->content_length = data->length(); |
| 186 info->encoded_data_length = 0; | 186 info->encoded_data_length = 0; |
| 187 info->encoded_body_length = 0; |
| 187 | 188 |
| 188 return net::OK; | 189 return net::OK; |
| 189 } | 190 } |
| 190 | 191 |
| 191 // Convert a net::SignedCertificateTimestampAndStatus object to a | 192 // Convert a net::SignedCertificateTimestampAndStatus object to a |
| 192 // blink::WebURLResponse::SignedCertificateTimestamp object. | 193 // blink::WebURLResponse::SignedCertificateTimestamp object. |
| 193 blink::WebURLResponse::SignedCertificateTimestamp NetSCTToBlinkSCT( | 194 blink::WebURLResponse::SignedCertificateTimestamp NetSCTToBlinkSCT( |
| 194 const net::SignedCertificateTimestampAndStatus& sct_and_status) { | 195 const net::SignedCertificateTimestampAndStatus& sct_and_status) { |
| 195 return blink::WebURLResponse::SignedCertificateTimestamp( | 196 return blink::WebURLResponse::SignedCertificateTimestamp( |
| 196 WebString::fromUTF8(net::ct::StatusToString(sct_and_status.status)), | 197 WebString::fromUTF8(net::ct::StatusToString(sct_and_status.status)), |
| (...skipping 411 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 608 request_.reportRawHeaders()); | 609 request_.reportRawHeaders()); |
| 609 | 610 |
| 610 WebURLRequest new_request; | 611 WebURLRequest new_request; |
| 611 PopulateURLRequestForRedirect( | 612 PopulateURLRequestForRedirect( |
| 612 request_, redirect_info, referrer_policy_, | 613 request_, redirect_info, referrer_policy_, |
| 613 info.was_fetched_via_service_worker | 614 info.was_fetched_via_service_worker |
| 614 ? blink::WebURLRequest::SkipServiceWorker::None | 615 ? blink::WebURLRequest::SkipServiceWorker::None |
| 615 : blink::WebURLRequest::SkipServiceWorker::All, | 616 : blink::WebURLRequest::SkipServiceWorker::All, |
| 616 &new_request); | 617 &new_request); |
| 617 | 618 |
| 618 client_->willFollowRedirect(loader_, new_request, response); | 619 client_->willFollowRedirect(loader_, new_request, response, |
| 620 info.encoded_data_length); |
| 619 request_ = new_request; | 621 request_ = new_request; |
| 620 | 622 |
| 621 // Only follow the redirect if WebKit left the URL unmodified. | 623 // Only follow the redirect if WebKit left the URL unmodified. |
| 622 if (redirect_info.new_url == GURL(new_request.url())) { | 624 if (redirect_info.new_url == GURL(new_request.url())) { |
| 623 // First-party cookie logic moved from DocumentLoader in Blink to | 625 // First-party cookie logic moved from DocumentLoader in Blink to |
| 624 // net::URLRequest in the browser. Assert that Blink didn't try to change it | 626 // net::URLRequest in the browser. Assert that Blink didn't try to change it |
| 625 // to something else. | 627 // to something else. |
| 626 DCHECK_EQ(redirect_info.new_first_party_for_cookies.spec(), | 628 DCHECK_EQ(redirect_info.new_first_party_for_cookies.spec(), |
| 627 request_.firstPartyForCookies().string().utf8()); | 629 request_.firstPartyForCookies().string().utf8()); |
| 628 return true; | 630 return true; |
| (...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 722 void WebURLLoaderImpl::Context::OnDownloadedData(int len, | 724 void WebURLLoaderImpl::Context::OnDownloadedData(int len, |
| 723 int encoded_data_length) { | 725 int encoded_data_length) { |
| 724 if (client_) | 726 if (client_) |
| 725 client_->didDownloadData(loader_, len, encoded_data_length); | 727 client_->didDownloadData(loader_, len, encoded_data_length); |
| 726 } | 728 } |
| 727 | 729 |
| 728 void WebURLLoaderImpl::Context::OnReceivedData( | 730 void WebURLLoaderImpl::Context::OnReceivedData( |
| 729 std::unique_ptr<ReceivedData> data) { | 731 std::unique_ptr<ReceivedData> data) { |
| 730 const char* payload = data->payload(); | 732 const char* payload = data->payload(); |
| 731 int data_length = data->length(); | 733 int data_length = data->length(); |
| 732 int encoded_data_length = data->encoded_length(); | 734 int encoded_data_length = data->encoded_data_length(); |
| 733 if (!client_) | 735 if (!client_) |
| 734 return; | 736 return; |
| 735 | 737 |
| 736 TRACE_EVENT_WITH_FLOW0( | 738 TRACE_EVENT_WITH_FLOW0( |
| 737 "loading", "WebURLLoaderImpl::Context::OnReceivedData", | 739 "loading", "WebURLLoaderImpl::Context::OnReceivedData", |
| 738 this, TRACE_EVENT_FLAG_FLOW_IN | TRACE_EVENT_FLAG_FLOW_OUT); | 740 this, TRACE_EVENT_FLAG_FLOW_IN | TRACE_EVENT_FLAG_FLOW_OUT); |
| 739 | 741 |
| 740 if (ftp_listing_delegate_) { | 742 if (ftp_listing_delegate_) { |
| 741 // The FTP listing delegate will make the appropriate calls to | 743 // The FTP listing delegate will make the appropriate calls to |
| 742 // client_->didReceiveData and client_->didReceiveResponse. | 744 // client_->didReceiveData and client_->didReceiveResponse. |
| 743 ftp_listing_delegate_->OnReceivedData(payload, data_length); | 745 ftp_listing_delegate_->OnReceivedData(payload, data_length); |
| 744 } else { | 746 } else { |
| 745 // We dispatch the data even when |useStreamOnResponse()| is set, in order | 747 // We dispatch the data even when |useStreamOnResponse()| is set, in order |
| 746 // to make Devtools work. | 748 // to make Devtools work. |
| 747 client_->didReceiveData(loader_, payload, data_length, encoded_data_length); | 749 client_->didReceiveData(loader_, payload, data_length, encoded_data_length, |
| 750 data->encoded_body_length()); |
| 748 | 751 |
| 749 if (request_.useStreamOnResponse()) { | 752 if (request_.useStreamOnResponse()) { |
| 750 // We don't support ftp_listening_delegate_ for now. | 753 // We don't support ftp_listening_delegate_ for now. |
| 751 // TODO(yhirano): Support ftp listening. | 754 // TODO(yhirano): Support ftp listening. |
| 752 body_stream_writer_->AddData(std::move(data)); | 755 body_stream_writer_->AddData(std::move(data)); |
| 753 } | 756 } |
| 754 } | 757 } |
| 755 } | 758 } |
| 756 | 759 |
| 757 void WebURLLoaderImpl::Context::OnReceivedCachedMetadata( | 760 void WebURLLoaderImpl::Context::OnReceivedCachedMetadata( |
| (...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 876 return; | 879 return; |
| 877 } | 880 } |
| 878 | 881 |
| 879 ResourceResponseInfo info; | 882 ResourceResponseInfo info; |
| 880 std::string data; | 883 std::string data; |
| 881 | 884 |
| 882 int error_code = GetInfoFromDataURL(request_.url(), &info, &data); | 885 int error_code = GetInfoFromDataURL(request_.url(), &info, &data); |
| 883 | 886 |
| 884 if (error_code == net::OK) { | 887 if (error_code == net::OK) { |
| 885 OnReceivedResponse(info); | 888 OnReceivedResponse(info); |
| 886 if (!data.empty()) | 889 auto size = data.size(); |
| 890 if (size != 0) |
| 887 OnReceivedData( | 891 OnReceivedData( |
| 888 base::WrapUnique(new FixedReceivedData(data.data(), data.size(), 0))); | 892 base::WrapUnique(new FixedReceivedData(data.data(), size, 0, size))); |
| 889 } | 893 } |
| 890 | 894 |
| 891 OnCompletedRequest(error_code, false, false, info.security_info, | 895 OnCompletedRequest(error_code, false, false, info.security_info, |
| 892 base::TimeTicks::Now(), 0); | 896 base::TimeTicks::Now(), 0); |
| 893 } | 897 } |
| 894 | 898 |
| 895 // WebURLLoaderImpl::RequestPeerImpl ------------------------------------------ | 899 // WebURLLoaderImpl::RequestPeerImpl ------------------------------------------ |
| 896 | 900 |
| 897 WebURLLoaderImpl::RequestPeerImpl::RequestPeerImpl(Context* context) | 901 WebURLLoaderImpl::RequestPeerImpl::RequestPeerImpl(Context* context) |
| 898 : context_(context) {} | 902 : context_(context) {} |
| (...skipping 244 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1143 if (error_code != net::OK) { | 1147 if (error_code != net::OK) { |
| 1144 response.setURL(final_url); | 1148 response.setURL(final_url); |
| 1145 error.domain = WebString::fromUTF8(net::kErrorDomain); | 1149 error.domain = WebString::fromUTF8(net::kErrorDomain); |
| 1146 error.reason = error_code; | 1150 error.reason = error_code; |
| 1147 error.unreachableURL = final_url; | 1151 error.unreachableURL = final_url; |
| 1148 return; | 1152 return; |
| 1149 } | 1153 } |
| 1150 | 1154 |
| 1151 PopulateURLResponse(final_url, sync_load_response, &response, | 1155 PopulateURLResponse(final_url, sync_load_response, &response, |
| 1152 request.reportRawHeaders()); | 1156 request.reportRawHeaders()); |
| 1157 response.addToEncodedBodyLength(sync_load_response.encoded_body_length); |
| 1158 response.addToDecodedBodyLength(sync_load_response.data.size()); |
| 1153 | 1159 |
| 1154 data.assign(sync_load_response.data.data(), | 1160 data.assign(sync_load_response.data.data(), sync_load_response.data.size()); |
| 1155 sync_load_response.data.size()); | |
| 1156 } | 1161 } |
| 1157 | 1162 |
| 1158 void WebURLLoaderImpl::loadAsynchronously(const WebURLRequest& request, | 1163 void WebURLLoaderImpl::loadAsynchronously(const WebURLRequest& request, |
| 1159 WebURLLoaderClient* client) { | 1164 WebURLLoaderClient* client) { |
| 1160 TRACE_EVENT_WITH_FLOW0("loading", "WebURLLoaderImpl::loadAsynchronously", | 1165 TRACE_EVENT_WITH_FLOW0("loading", "WebURLLoaderImpl::loadAsynchronously", |
| 1161 this, TRACE_EVENT_FLAG_FLOW_OUT); | 1166 this, TRACE_EVENT_FLAG_FLOW_OUT); |
| 1162 DCHECK(!context_->client()); | 1167 DCHECK(!context_->client()); |
| 1163 | 1168 |
| 1164 context_->set_client(client); | 1169 context_->set_client(client); |
| 1165 context_->Start(request, NULL); | 1170 context_->Start(request, NULL); |
| (...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1227 response->clearHTTPHeaderField(webStringName); | 1232 response->clearHTTPHeaderField(webStringName); |
| 1228 while (response_headers->EnumerateHeader(&iterator, name, &value)) { | 1233 while (response_headers->EnumerateHeader(&iterator, name, &value)) { |
| 1229 response->addHTTPHeaderField(webStringName, | 1234 response->addHTTPHeaderField(webStringName, |
| 1230 WebString::fromLatin1(value)); | 1235 WebString::fromLatin1(value)); |
| 1231 } | 1236 } |
| 1232 } | 1237 } |
| 1233 return true; | 1238 return true; |
| 1234 } | 1239 } |
| 1235 | 1240 |
| 1236 } // namespace content | 1241 } // namespace content |
| OLD | NEW |