Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(288)

Side by Side Diff: content/browser/frame_host/navigation_request.cc

Issue 2445993006: [WIP] Upgrade-insecure-request: upgrade insecurely-redirected requests.
Patch Set: bugfix Created 4 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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
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
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
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
OLDNEW
« no previous file with comments | « content/browser/frame_host/navigation_request.h ('k') | content/browser/frame_host/navigation_request_info.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698