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/browser/frame_host/navigation_request.h" | 5 #include "content/browser/frame_host/navigation_request.h" |
6 | 6 |
7 #include <utility> | 7 #include <utility> |
8 | 8 |
9 #include "content/browser/child_process_security_policy_impl.h" | 9 #include "content/browser/child_process_security_policy_impl.h" |
10 #include "content/browser/devtools/render_frame_devtools_agent_host.h" | 10 #include "content/browser/devtools/render_frame_devtools_agent_host.h" |
(...skipping 204 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
215 const NavigationEntryImpl* entry) | 215 const NavigationEntryImpl* entry) |
216 : frame_tree_node_(frame_tree_node), | 216 : frame_tree_node_(frame_tree_node), |
217 common_params_(common_params), | 217 common_params_(common_params), |
218 begin_params_(begin_params), | 218 begin_params_(begin_params), |
219 request_params_(request_params), | 219 request_params_(request_params), |
220 browser_initiated_(browser_initiated), | 220 browser_initiated_(browser_initiated), |
221 state_(NOT_STARTED), | 221 state_(NOT_STARTED), |
222 restore_type_(RestoreType::NONE), | 222 restore_type_(RestoreType::NONE), |
223 is_view_source_(false), | 223 is_view_source_(false), |
224 bindings_(NavigationEntryImpl::kInvalidBindings), | 224 bindings_(NavigationEntryImpl::kInvalidBindings), |
225 associated_site_instance_type_(AssociatedSiteInstanceType::NONE) { | 225 associated_site_instance_type_(AssociatedSiteInstanceType::NONE), |
| 226 insecure_request_policy(blink::kLeaveInsecureRequestsAlone) { |
226 DCHECK(!browser_initiated || (entry != nullptr && frame_entry != nullptr)); | 227 DCHECK(!browser_initiated || (entry != nullptr && frame_entry != nullptr)); |
227 if (browser_initiated) { | 228 if (browser_initiated) { |
228 FrameNavigationEntry* frame_entry = entry->GetFrameEntry(frame_tree_node); | 229 FrameNavigationEntry* frame_entry = entry->GetFrameEntry(frame_tree_node); |
229 if (frame_entry) { | 230 if (frame_entry) { |
230 source_site_instance_ = frame_entry->source_site_instance(); | 231 source_site_instance_ = frame_entry->source_site_instance(); |
231 dest_site_instance_ = frame_entry->site_instance(); | 232 dest_site_instance_ = frame_entry->site_instance(); |
232 } | 233 } |
233 | 234 |
234 restore_type_ = entry->restore_type(); | 235 restore_type_ = entry->restore_type(); |
235 is_view_source_ = entry->IsViewSourceMode(); | 236 is_view_source_ = entry->IsViewSourceMode(); |
236 bindings_ = entry->bindings(); | 237 bindings_ = entry->bindings(); |
237 } else { | 238 } else { |
238 // This is needed to have about:blank and data URLs commit in the same | 239 // This is needed to have about:blank and data URLs commit in the same |
239 // SiteInstance as the initiating renderer. | 240 // SiteInstance as the initiating renderer. |
240 source_site_instance_ = | 241 source_site_instance_ = |
241 frame_tree_node->current_frame_host()->GetSiteInstance(); | 242 frame_tree_node->current_frame_host()->GetSiteInstance(); |
242 } | 243 } |
243 | 244 |
| 245 // Maybe upgrade the request to https. |
| 246 upgradeInsecureRequest(); |
| 247 |
244 // Update the load flags with cache information. | 248 // Update the load flags with cache information. |
245 UpdateLoadFlagsWithCacheFlags(&begin_params_.load_flags, | 249 UpdateLoadFlagsWithCacheFlags(&begin_params_.load_flags, |
246 common_params_.navigation_type, | 250 common_params_.navigation_type, |
247 common_params_.method == "POST"); | 251 common_params_.method == "POST"); |
248 | 252 |
249 // Add necessary headers that may not be present in the BeginNavigationParams. | 253 // Add necessary headers that may not be present in the BeginNavigationParams. |
250 net::HttpRequestHeaders headers; | 254 net::HttpRequestHeaders headers; |
251 headers.AddHeadersFromString(begin_params_.headers); | 255 headers.AddHeadersFromString(begin_params_.headers); |
252 AddAdditionalRequestHeaders( | 256 AddAdditionalRequestHeaders( |
253 &headers, common_params_.url, common_params_.navigation_type, | 257 &headers, common_params_.url, common_params_.navigation_type, |
254 frame_tree_node_->navigator()->GetController()->GetBrowserContext()); | 258 frame_tree_node_->navigator()->GetController()->GetBrowserContext()); |
| 259 headers.AddHeaderFromString("Upgrade-Insecure-Requests: 1"); |
255 begin_params_.headers = headers.ToString(); | 260 begin_params_.headers = headers.ToString(); |
256 } | 261 } |
257 | 262 |
258 NavigationRequest::~NavigationRequest() { | 263 NavigationRequest::~NavigationRequest() { |
259 } | 264 } |
260 | 265 |
261 void NavigationRequest::BeginNavigation() { | 266 void NavigationRequest::BeginNavigation() { |
262 DCHECK(!loader_); | 267 DCHECK(!loader_); |
263 DCHECK(state_ == NOT_STARTED || state_ == WAITING_FOR_RENDERER_RESPONSE); | 268 DCHECK(state_ == NOT_STARTED || state_ == WAITING_FOR_RENDERER_RESPONSE); |
264 state_ = STARTED; | 269 state_ = STARTED; |
(...skipping 258 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
523 bool report_raw_headers = | 528 bool report_raw_headers = |
524 RenderFrameDevToolsAgentHost::IsNetworkHandlerEnabled(frame_tree_node_); | 529 RenderFrameDevToolsAgentHost::IsNetworkHandlerEnabled(frame_tree_node_); |
525 | 530 |
526 loader_ = NavigationURLLoader::Create( | 531 loader_ = NavigationURLLoader::Create( |
527 frame_tree_node_->navigator()->GetController()->GetBrowserContext(), | 532 frame_tree_node_->navigator()->GetController()->GetBrowserContext(), |
528 base::MakeUnique<NavigationRequestInfo>( | 533 base::MakeUnique<NavigationRequestInfo>( |
529 common_params_, begin_params_, first_party_for_cookies, | 534 common_params_, begin_params_, first_party_for_cookies, |
530 frame_tree_node_->current_origin(), frame_tree_node_->IsMainFrame(), | 535 frame_tree_node_->current_origin(), frame_tree_node_->IsMainFrame(), |
531 parent_is_main_frame, IsSecureFrame(frame_tree_node_->parent()), | 536 parent_is_main_frame, IsSecureFrame(frame_tree_node_->parent()), |
532 frame_tree_node_->frame_tree_node_id(), is_for_guests_only, | 537 frame_tree_node_->frame_tree_node_id(), is_for_guests_only, |
533 report_raw_headers), | 538 report_raw_headers, |
| 539 insecure_request_policy), |
534 std::move(navigation_ui_data), | 540 std::move(navigation_ui_data), |
535 navigation_handle_->service_worker_handle(), this); | 541 navigation_handle_->service_worker_handle(), this); |
536 } | 542 } |
537 | 543 |
538 void NavigationRequest::OnRedirectChecksComplete( | 544 void NavigationRequest::OnRedirectChecksComplete( |
539 NavigationThrottle::ThrottleCheckResult result) { | 545 NavigationThrottle::ThrottleCheckResult result) { |
540 CHECK(result != NavigationThrottle::DEFER); | 546 CHECK(result != NavigationThrottle::DEFER); |
541 | 547 |
542 // Abort the request if needed. This will destroy the NavigationRequest. | 548 // Abort the request if needed. This will destroy the NavigationRequest. |
543 if (result == NavigationThrottle::CANCEL_AND_IGNORE || | 549 if (result == NavigationThrottle::CANCEL_AND_IGNORE || |
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
587 | 593 |
588 DCHECK_EQ(request_params_.has_user_gesture, begin_params_.has_user_gesture); | 594 DCHECK_EQ(request_params_.has_user_gesture, begin_params_.has_user_gesture); |
589 | 595 |
590 render_frame_host->CommitNavigation(response_.get(), std::move(body_), | 596 render_frame_host->CommitNavigation(response_.get(), std::move(body_), |
591 common_params_, request_params_, | 597 common_params_, request_params_, |
592 is_view_source_); | 598 is_view_source_); |
593 | 599 |
594 frame_tree_node_->ResetNavigationRequest(true); | 600 frame_tree_node_->ResetNavigationRequest(true); |
595 } | 601 } |
596 | 602 |
| 603 void NavigationRequest::upgradeInsecureRequest() { |
| 604 // Retrieve insecure policy from parent frame. |
| 605 // Top frame navigation requests are not upgraded. |
| 606 // TODO(arthursonzogni) the insecureNavigationSet should be use for top frame |
| 607 // navigation. |
| 608 if (frame_tree_node_->parent()) { |
| 609 insecure_request_policy = |
| 610 frame_tree_node_->parent()->GetInsecureRequestPolicy(); |
| 611 } else { |
| 612 insecure_request_policy = blink::kLeaveInsecureRequestsAlone; |
| 613 } |
| 614 |
| 615 if (insecure_request_policy & blink::kUpgradeInsecureRequests && |
| 616 common_params_.url.SchemeIs("http")) { |
| 617 // TODO(arthursonzogni) The render-side version of this function uses a |
| 618 // counter to make usage statistics. This should be done here too. |
| 619 GURL::Replacements replacement; |
| 620 replacement.SetSchemeStr("https"); |
| 621 if (common_params_.url.port() == "80") |
| 622 replacement.SetPortStr("443"); |
| 623 common_params_.url = common_params_.url.ReplaceComponents(replacement); |
| 624 } |
| 625 } |
| 626 |
597 } // namespace content | 627 } // namespace content |
OLD | NEW |