| 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 692 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 703 // PlzNavigate: during navigations, the ResourceResponse has already been | 703 // PlzNavigate: during navigations, the ResourceResponse has already been |
| 704 // received on the browser side, and has been passed down to the renderer. | 704 // received on the browser side, and has been passed down to the renderer. |
| 705 if (stream_override_.get()) { | 705 if (stream_override_.get()) { |
| 706 CHECK(IsBrowserSideNavigationEnabled()); | 706 CHECK(IsBrowserSideNavigationEnabled()); |
| 707 // Compute the delta between the response sizes so that the accurate | 707 // Compute the delta between the response sizes so that the accurate |
| 708 // transfer size can be reported at the end of the request. | 708 // transfer size can be reported at the end of the request. |
| 709 stream_override_->total_transfer_size_delta = | 709 stream_override_->total_transfer_size_delta = |
| 710 stream_override_->response.encoded_data_length - | 710 stream_override_->response.encoded_data_length - |
| 711 initial_info.encoded_data_length; | 711 initial_info.encoded_data_length; |
| 712 info = stream_override_->response; | 712 info = stream_override_->response; |
| 713 |
| 714 // Replay the redirects that happened during navigation. |
| 715 DCHECK_EQ(stream_override_->redirect_responses.size(), |
| 716 stream_override_->redirect_infos.size()); |
| 717 for (size_t i = 0; i < stream_override_->redirect_responses.size(); ++i) { |
| 718 bool result = OnReceivedRedirect(stream_override_->redirect_infos[i], |
| 719 stream_override_->redirect_responses[i]); |
| 720 if (!result) { |
| 721 NOTREACHED(); |
| 722 return; |
| 723 } |
| 724 } |
| 713 } | 725 } |
| 714 | 726 |
| 715 WebURLResponse response; | 727 WebURLResponse response; |
| 716 GURL url(request_.url()); | 728 GURL url(request_.url()); |
| 717 PopulateURLResponse(url, info, &response, request_.reportRawHeaders()); | 729 PopulateURLResponse(url, info, &response, request_.reportRawHeaders()); |
| 718 | 730 |
| 719 if (stream_override_.get()) { | |
| 720 CHECK(IsBrowserSideNavigationEnabled()); | |
| 721 DCHECK(stream_override_->redirect_responses.size() == | |
| 722 stream_override_->redirects.size()); | |
| 723 for (size_t i = 0; i < stream_override_->redirects.size(); ++i) { | |
| 724 WebURLResponse previous_response; | |
| 725 // TODO(arthursonzogni) Once Devtool is supported by PlzNavigate, the | |
| 726 // |report_raw_header| argument must be checked. | |
| 727 WebURLLoaderImpl::PopulateURLResponse( | |
| 728 stream_override_->redirects[i], | |
| 729 stream_override_->redirect_responses[i], | |
| 730 &previous_response, | |
| 731 request_.reportRawHeaders()); | |
| 732 response.appendRedirectResponse(previous_response); | |
| 733 } | |
| 734 } | |
| 735 | |
| 736 bool show_raw_listing = false; | 731 bool show_raw_listing = false; |
| 737 if (info.mime_type == "text/vnd.chromium.ftp-dir") { | 732 if (info.mime_type == "text/vnd.chromium.ftp-dir") { |
| 738 if (url.query_piece() == "raw") { | 733 if (url.query_piece() == "raw") { |
| 739 // Set the MIME type to plain text to prevent any active content. | 734 // Set the MIME type to plain text to prevent any active content. |
| 740 response.setMIMEType("text/plain"); | 735 response.setMIMEType("text/plain"); |
| 741 show_raw_listing = true; | 736 show_raw_listing = true; |
| 742 } else { | 737 } else { |
| 743 // We're going to produce a parsed listing in HTML. | 738 // We're going to produce a parsed listing in HTML. |
| 744 response.setMIMEType("text/html"); | 739 response.setMIMEType("text/html"); |
| 745 } | 740 } |
| (...skipping 438 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1184 | 1179 |
| 1185 new_request.setHTTPReferrer(WebString::fromUTF8(redirect_info.new_referrer), | 1180 new_request.setHTTPReferrer(WebString::fromUTF8(redirect_info.new_referrer), |
| 1186 NetReferrerPolicyToBlinkReferrerPolicy( | 1181 NetReferrerPolicyToBlinkReferrerPolicy( |
| 1187 redirect_info.new_referrer_policy)); | 1182 redirect_info.new_referrer_policy)); |
| 1188 new_request.setPriority(request.getPriority()); | 1183 new_request.setPriority(request.getPriority()); |
| 1189 | 1184 |
| 1190 std::string old_method = request.httpMethod().utf8(); | 1185 std::string old_method = request.httpMethod().utf8(); |
| 1191 new_request.setHTTPMethod(WebString::fromUTF8(redirect_info.new_method)); | 1186 new_request.setHTTPMethod(WebString::fromUTF8(redirect_info.new_method)); |
| 1192 if (redirect_info.new_method == old_method) | 1187 if (redirect_info.new_method == old_method) |
| 1193 new_request.setHTTPBody(request.httpBody()); | 1188 new_request.setHTTPBody(request.httpBody()); |
| 1189 |
| 1190 new_request.setCheckForBrowserSideNavigation( |
| 1191 request.checkForBrowserSideNavigation()); |
| 1192 |
| 1194 return new_request; | 1193 return new_request; |
| 1195 } | 1194 } |
| 1196 | 1195 |
| 1197 void WebURLLoaderImpl::loadSynchronously(const WebURLRequest& request, | 1196 void WebURLLoaderImpl::loadSynchronously(const WebURLRequest& request, |
| 1198 WebURLResponse& response, | 1197 WebURLResponse& response, |
| 1199 WebURLError& error, | 1198 WebURLError& error, |
| 1200 WebData& data, | 1199 WebData& data, |
| 1201 int64_t& encoded_data_length, | 1200 int64_t& encoded_data_length, |
| 1202 int64_t& encoded_body_length) { | 1201 int64_t& encoded_body_length) { |
| 1203 TRACE_EVENT0("loading", "WebURLLoaderImpl::loadSynchronously"); | 1202 TRACE_EVENT0("loading", "WebURLLoaderImpl::loadSynchronously"); |
| (...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1248 int intra_priority_value) { | 1247 int intra_priority_value) { |
| 1249 context_->DidChangePriority(new_priority, intra_priority_value); | 1248 context_->DidChangePriority(new_priority, intra_priority_value); |
| 1250 } | 1249 } |
| 1251 | 1250 |
| 1252 void WebURLLoaderImpl::setLoadingTaskRunner( | 1251 void WebURLLoaderImpl::setLoadingTaskRunner( |
| 1253 base::SingleThreadTaskRunner* loading_task_runner) { | 1252 base::SingleThreadTaskRunner* loading_task_runner) { |
| 1254 context_->SetTaskRunner(loading_task_runner); | 1253 context_->SetTaskRunner(loading_task_runner); |
| 1255 } | 1254 } |
| 1256 | 1255 |
| 1257 } // namespace content | 1256 } // namespace content |
| OLD | NEW |