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 697 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
708 // PlzNavigate: during navigations, the ResourceResponse has already been | 708 // PlzNavigate: during navigations, the ResourceResponse has already been |
709 // received on the browser side, and has been passed down to the renderer. | 709 // received on the browser side, and has been passed down to the renderer. |
710 if (stream_override_.get()) { | 710 if (stream_override_.get()) { |
711 CHECK(IsBrowserSideNavigationEnabled()); | 711 CHECK(IsBrowserSideNavigationEnabled()); |
712 // Compute the delta between the response sizes so that the accurate | 712 // Compute the delta between the response sizes so that the accurate |
713 // transfer size can be reported at the end of the request. | 713 // transfer size can be reported at the end of the request. |
714 stream_override_->total_transfer_size_delta = | 714 stream_override_->total_transfer_size_delta = |
715 stream_override_->response.encoded_data_length - | 715 stream_override_->response.encoded_data_length - |
716 initial_info.encoded_data_length; | 716 initial_info.encoded_data_length; |
717 info = stream_override_->response; | 717 info = stream_override_->response; |
718 | |
719 // Replay the redirects that happened during navigation. | |
720 DCHECK_EQ(stream_override_->redirect_responses.size(), | |
721 stream_override_->redirect_infos.size()); | |
722 for (size_t i = 0; i < stream_override_->redirect_responses.size(); ++i) { | |
723 bool result = OnReceivedRedirect(stream_override_->redirect_infos[i], | |
724 stream_override_->redirect_responses[i]); | |
725 if (!result) { | |
726 NOTREACHED(); | |
727 return; | |
728 } | |
729 } | |
718 } | 730 } |
719 | 731 |
720 WebURLResponse response; | 732 WebURLResponse response; |
721 GURL url(request_.url()); | 733 GURL url(request_.url()); |
722 PopulateURLResponse(url, info, &response, request_.reportRawHeaders()); | 734 PopulateURLResponse(url, info, &response, request_.reportRawHeaders()); |
723 | 735 |
724 if (stream_override_.get()) { | |
725 CHECK(IsBrowserSideNavigationEnabled()); | |
726 DCHECK(stream_override_->redirect_responses.size() == | |
727 stream_override_->redirects.size()); | |
728 for (size_t i = 0; i < stream_override_->redirects.size(); ++i) { | |
729 WebURLResponse previous_response; | |
730 // TODO(arthursonzogni) Once Devtool is supported by PlzNavigate, the | |
731 // |report_raw_header| argument must be checked. | |
732 WebURLLoaderImpl::PopulateURLResponse( | |
733 stream_override_->redirects[i], | |
734 stream_override_->redirect_responses[i], | |
735 &previous_response, | |
736 request_.reportRawHeaders()); | |
737 response.appendRedirectResponse(previous_response); | |
738 } | |
739 } | |
nasko
2017/02/10 23:53:09
Just to make sure I understand, the reason we don'
clamy
2017/02/13 14:29:37
Precisely.
| |
740 | |
741 bool show_raw_listing = false; | 736 bool show_raw_listing = false; |
742 if (info.mime_type == "text/vnd.chromium.ftp-dir") { | 737 if (info.mime_type == "text/vnd.chromium.ftp-dir") { |
743 if (url.query_piece() == "raw") { | 738 if (url.query_piece() == "raw") { |
744 // Set the MIME type to plain text to prevent any active content. | 739 // Set the MIME type to plain text to prevent any active content. |
745 response.setMIMEType("text/plain"); | 740 response.setMIMEType("text/plain"); |
746 show_raw_listing = true; | 741 show_raw_listing = true; |
747 } else { | 742 } else { |
748 // We're going to produce a parsed listing in HTML. | 743 // We're going to produce a parsed listing in HTML. |
749 response.setMIMEType("text/html"); | 744 response.setMIMEType("text/html"); |
750 } | 745 } |
(...skipping 446 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1197 | 1192 |
1198 new_request.setHTTPReferrer(WebString::fromUTF8(redirect_info.new_referrer), | 1193 new_request.setHTTPReferrer(WebString::fromUTF8(redirect_info.new_referrer), |
1199 NetReferrerPolicyToBlinkReferrerPolicy( | 1194 NetReferrerPolicyToBlinkReferrerPolicy( |
1200 redirect_info.new_referrer_policy)); | 1195 redirect_info.new_referrer_policy)); |
1201 new_request.setPriority(request.getPriority()); | 1196 new_request.setPriority(request.getPriority()); |
1202 | 1197 |
1203 std::string old_method = request.httpMethod().utf8(); | 1198 std::string old_method = request.httpMethod().utf8(); |
1204 new_request.setHTTPMethod(WebString::fromUTF8(redirect_info.new_method)); | 1199 new_request.setHTTPMethod(WebString::fromUTF8(redirect_info.new_method)); |
1205 if (redirect_info.new_method == old_method) | 1200 if (redirect_info.new_method == old_method) |
1206 new_request.setHTTPBody(request.httpBody()); | 1201 new_request.setHTTPBody(request.httpBody()); |
1202 | |
1203 new_request.setCheckForBrowserSideNavigation( | |
1204 request.checkForBrowserSideNavigation()); | |
1205 | |
1207 return new_request; | 1206 return new_request; |
1208 } | 1207 } |
1209 | 1208 |
1210 void WebURLLoaderImpl::loadSynchronously(const WebURLRequest& request, | 1209 void WebURLLoaderImpl::loadSynchronously(const WebURLRequest& request, |
1211 WebURLResponse& response, | 1210 WebURLResponse& response, |
1212 WebURLError& error, | 1211 WebURLError& error, |
1213 WebData& data, | 1212 WebData& data, |
1214 int64_t& encoded_data_length, | 1213 int64_t& encoded_data_length, |
1215 int64_t& encoded_body_length) { | 1214 int64_t& encoded_body_length) { |
1216 TRACE_EVENT0("loading", "WebURLLoaderImpl::loadSynchronously"); | 1215 TRACE_EVENT0("loading", "WebURLLoaderImpl::loadSynchronously"); |
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1261 int intra_priority_value) { | 1260 int intra_priority_value) { |
1262 context_->DidChangePriority(new_priority, intra_priority_value); | 1261 context_->DidChangePriority(new_priority, intra_priority_value); |
1263 } | 1262 } |
1264 | 1263 |
1265 void WebURLLoaderImpl::setLoadingTaskRunner( | 1264 void WebURLLoaderImpl::setLoadingTaskRunner( |
1266 base::SingleThreadTaskRunner* loading_task_runner) { | 1265 base::SingleThreadTaskRunner* loading_task_runner) { |
1267 context_->SetTaskRunner(loading_task_runner); | 1266 context_->SetTaskRunner(loading_task_runner); |
1268 } | 1267 } |
1269 | 1268 |
1270 } // namespace content | 1269 } // namespace content |
OLD | NEW |