| Index: content/browser/frame_host/navigation_request.cc
|
| diff --git a/content/browser/frame_host/navigation_request.cc b/content/browser/frame_host/navigation_request.cc
|
| index ddbc83136f8991d8655256ef4630aaa3bf83e05c..09ae99b5dcae272a1f5f79e74aed57f8bc7480ae 100644
|
| --- a/content/browser/frame_host/navigation_request.cc
|
| +++ b/content/browser/frame_host/navigation_request.cc
|
| @@ -222,7 +222,8 @@ NavigationRequest::NavigationRequest(
|
| restore_type_(RestoreType::NONE),
|
| is_view_source_(false),
|
| bindings_(NavigationEntryImpl::kInvalidBindings),
|
| - associated_site_instance_type_(AssociatedSiteInstanceType::NONE) {
|
| + associated_site_instance_type_(AssociatedSiteInstanceType::NONE),
|
| + insecure_request_policy(blink::kLeaveInsecureRequestsAlone) {
|
| DCHECK(!browser_initiated || (entry != nullptr && frame_entry != nullptr));
|
| if (browser_initiated) {
|
| FrameNavigationEntry* frame_entry = entry->GetFrameEntry(frame_tree_node);
|
| @@ -241,6 +242,9 @@ NavigationRequest::NavigationRequest(
|
| frame_tree_node->current_frame_host()->GetSiteInstance();
|
| }
|
|
|
| + // Maybe upgrade the request to https.
|
| + upgradeInsecureRequest();
|
| +
|
| // Update the load flags with cache information.
|
| UpdateLoadFlagsWithCacheFlags(&begin_params_.load_flags,
|
| common_params_.navigation_type,
|
| @@ -252,6 +256,7 @@ NavigationRequest::NavigationRequest(
|
| AddAdditionalRequestHeaders(
|
| &headers, common_params_.url, common_params_.navigation_type,
|
| frame_tree_node_->navigator()->GetController()->GetBrowserContext());
|
| + headers.AddHeaderFromString("Upgrade-Insecure-Requests: 1");
|
| begin_params_.headers = headers.ToString();
|
| }
|
|
|
| @@ -530,7 +535,8 @@ void NavigationRequest::OnStartChecksComplete(
|
| frame_tree_node_->current_origin(), frame_tree_node_->IsMainFrame(),
|
| parent_is_main_frame, IsSecureFrame(frame_tree_node_->parent()),
|
| frame_tree_node_->frame_tree_node_id(), is_for_guests_only,
|
| - report_raw_headers),
|
| + report_raw_headers,
|
| + insecure_request_policy),
|
| std::move(navigation_ui_data),
|
| navigation_handle_->service_worker_handle(), this);
|
| }
|
| @@ -594,4 +600,28 @@ void NavigationRequest::CommitNavigation() {
|
| frame_tree_node_->ResetNavigationRequest(true);
|
| }
|
|
|
| +void NavigationRequest::upgradeInsecureRequest() {
|
| + // Retrieve insecure policy from parent frame.
|
| + // Top frame navigation requests are not upgraded.
|
| + // TODO(arthursonzogni) the insecureNavigationSet should be use for top frame
|
| + // navigation.
|
| + if (frame_tree_node_->parent()) {
|
| + insecure_request_policy =
|
| + frame_tree_node_->parent()->GetInsecureRequestPolicy();
|
| + } else {
|
| + insecure_request_policy = blink::kLeaveInsecureRequestsAlone;
|
| + }
|
| +
|
| + if (insecure_request_policy & blink::kUpgradeInsecureRequests &&
|
| + common_params_.url.SchemeIs("http")) {
|
| + // TODO(arthursonzogni) The render-side version of this function uses a
|
| + // counter to make usage statistics. This should be done here too.
|
| + GURL::Replacements replacement;
|
| + replacement.SetSchemeStr("https");
|
| + if (common_params_.url.port() == "80")
|
| + replacement.SetPortStr("443");
|
| + common_params_.url = common_params_.url.ReplaceComponents(replacement);
|
| + }
|
| +}
|
| +
|
| } // namespace content
|
|
|