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

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

Issue 1715993002: OOPIF: Fix remote frame navigations from extension pages. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 10 months 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 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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/navigator_impl.h" 5 #include "content/browser/frame_host/navigator_impl.h"
6 6
7 #include <utility> 7 #include <utility>
8 8
9 #include "base/metrics/histogram.h" 9 #include "base/metrics/histogram.h"
10 #include "base/time/time.h" 10 #include "base/time/time.h"
(...skipping 575 matching lines...) Expand 10 before | Expand all | Expand 10 after
586 const Referrer& referrer, 586 const Referrer& referrer,
587 WindowOpenDisposition disposition, 587 WindowOpenDisposition disposition,
588 bool should_replace_current_entry, 588 bool should_replace_current_entry,
589 bool user_gesture) { 589 bool user_gesture) {
590 // This call only makes sense for subframes if OOPIFs are possible. 590 // This call only makes sense for subframes if OOPIFs are possible.
591 DCHECK(!render_frame_host->GetParent() || 591 DCHECK(!render_frame_host->GetParent() ||
592 SiteIsolationPolicy::AreCrossProcessFramesPossible()); 592 SiteIsolationPolicy::AreCrossProcessFramesPossible());
593 593
594 // If this came from a swapped out RenderFrameHost, we only allow the request 594 // If this came from a swapped out RenderFrameHost, we only allow the request
595 // if we are still in the same BrowsingInstance. 595 // if we are still in the same BrowsingInstance.
596 // TODO(creis): Move this to RenderFrameProxyHost::OpenURL.
alexmos 2016/02/20 02:42:47 I'm assuming this check will have to stay in addit
Charlie Reis 2016/02/21 05:47:23 Sure, we can remove it when Nasko removes the rest
597 SiteInstance* current_site_instance = render_frame_host->frame_tree_node() 596 SiteInstance* current_site_instance = render_frame_host->frame_tree_node()
598 ->current_frame_host() 597 ->current_frame_host()
599 ->GetSiteInstance(); 598 ->GetSiteInstance();
600 if (render_frame_host->is_swapped_out() && 599 if (render_frame_host->is_swapped_out() &&
601 !render_frame_host->GetSiteInstance()->IsRelatedSiteInstance( 600 !render_frame_host->GetSiteInstance()->IsRelatedSiteInstance(
602 current_site_instance)) { 601 current_site_instance)) {
603 return; 602 return;
604 } 603 }
605 604
606 // TODO(creis): Pass the redirect_chain into this method to support client 605 // TODO(creis): Pass the redirect_chain into this method to support client
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
652 params.is_renderer_initiated = false; 651 params.is_renderer_initiated = false;
653 } 652 }
654 653
655 if (delegate_) 654 if (delegate_)
656 delegate_->RequestOpenURL(render_frame_host, params); 655 delegate_->RequestOpenURL(render_frame_host, params);
657 } 656 }
658 657
659 void NavigatorImpl::RequestTransferURL( 658 void NavigatorImpl::RequestTransferURL(
660 RenderFrameHostImpl* render_frame_host, 659 RenderFrameHostImpl* render_frame_host,
661 const GURL& url, 660 const GURL& url,
661 SiteInstance* source_site_instance,
662 const std::vector<GURL>& redirect_chain, 662 const std::vector<GURL>& redirect_chain,
663 const Referrer& referrer, 663 const Referrer& referrer,
664 ui::PageTransition page_transition, 664 ui::PageTransition page_transition,
665 const GlobalRequestID& transferred_global_request_id, 665 const GlobalRequestID& transferred_global_request_id,
666 bool should_replace_current_entry) { 666 bool should_replace_current_entry) {
667 // This call only makes sense for subframes if OOPIFs are possible. 667 // This call only makes sense for subframes if OOPIFs are possible.
668 DCHECK(!render_frame_host->GetParent() || 668 DCHECK(!render_frame_host->GetParent() ||
669 SiteIsolationPolicy::AreCrossProcessFramesPossible()); 669 SiteIsolationPolicy::AreCrossProcessFramesPossible());
670 670
671 // Allow the delegate to cancel the transfer. 671 // Allow the delegate to cancel the transfer.
(...skipping 24 matching lines...) Expand all
696 // want web sites to see a referrer of "chrome://blah" (and some 696 // want web sites to see a referrer of "chrome://blah" (and some
697 // chrome: URLs might have search terms or other stuff we don't want to 697 // chrome: URLs might have search terms or other stuff we don't want to
698 // send to the site), so we send no referrer. 698 // send to the site), so we send no referrer.
699 referrer_to_use = Referrer(); 699 referrer_to_use = Referrer();
700 700
701 // Navigations in Web UI pages count as browser-initiated navigations. 701 // Navigations in Web UI pages count as browser-initiated navigations.
702 is_renderer_initiated = false; 702 is_renderer_initiated = false;
703 } 703 }
704 704
705 NavigationController::LoadURLParams load_url_params(dest_url); 705 NavigationController::LoadURLParams load_url_params(dest_url);
706 // The source_site_instance only matters for navigations via RenderFrameProxy, 706 // The source_site_instance may matter for navigations via RenderFrameProxy.
707 // which go through RequestOpenURL. 707 load_url_params.source_site_instance = source_site_instance;
708 load_url_params.source_site_instance = nullptr;
709 load_url_params.transition_type = page_transition; 708 load_url_params.transition_type = page_transition;
710 load_url_params.frame_tree_node_id = node->frame_tree_node_id(); 709 load_url_params.frame_tree_node_id = node->frame_tree_node_id();
711 load_url_params.referrer = referrer_to_use; 710 load_url_params.referrer = referrer_to_use;
712 load_url_params.redirect_chain = redirect_chain; 711 load_url_params.redirect_chain = redirect_chain;
713 load_url_params.is_renderer_initiated = is_renderer_initiated; 712 load_url_params.is_renderer_initiated = is_renderer_initiated;
714 load_url_params.transferred_global_request_id = transferred_global_request_id; 713 load_url_params.transferred_global_request_id = transferred_global_request_id;
715 load_url_params.should_replace_current_entry = should_replace_current_entry; 714 load_url_params.should_replace_current_entry = should_replace_current_entry;
716 715
717 controller_->LoadURLWithParams(load_url_params); 716 controller_->LoadURLWithParams(load_url_params);
718 } 717 }
(...skipping 319 matching lines...) Expand 10 before | Expand all | Expand 10 after
1038 entry->set_should_replace_entry(pending_entry->should_replace_entry()); 1037 entry->set_should_replace_entry(pending_entry->should_replace_entry());
1039 entry->SetRedirectChain(pending_entry->GetRedirectChain()); 1038 entry->SetRedirectChain(pending_entry->GetRedirectChain());
1040 } 1039 }
1041 controller_->SetPendingEntry(std::move(entry)); 1040 controller_->SetPendingEntry(std::move(entry));
1042 if (delegate_) 1041 if (delegate_)
1043 delegate_->NotifyChangedNavigationState(content::INVALIDATE_TYPE_URL); 1042 delegate_->NotifyChangedNavigationState(content::INVALIDATE_TYPE_URL);
1044 } 1043 }
1045 } 1044 }
1046 1045
1047 } // namespace content 1046 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698