Chromium Code Reviews| 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 |