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 |