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

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

Issue 892123002: PlzNavigate: change behavior when navigating with a non-live RFH (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Updated comment Created 5 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/render_frame_host_manager.h" 5 #include "content/browser/frame_host/render_frame_host_manager.h"
6 6
7 #include <utility> 7 #include <utility>
8 8
9 #include "base/command_line.h" 9 #include "base/command_line.h"
10 #include "base/logging.h" 10 #include "base/logging.h"
(...skipping 676 matching lines...) Expand 10 before | Expand all | Expand 10 after
687 if (current_site_instance == dest_site_instance.get() || 687 if (current_site_instance == dest_site_instance.get() ||
688 (!frame_tree_node_->IsMainFrame() && 688 (!frame_tree_node_->IsMainFrame() &&
689 !base::CommandLine::ForCurrentProcess()->HasSwitch( 689 !base::CommandLine::ForCurrentProcess()->HasSwitch(
690 switches::kSitePerProcess))) { 690 switches::kSitePerProcess))) {
691 // Reuse the current RFH if its SiteInstance matches the the navigation's 691 // Reuse the current RFH if its SiteInstance matches the the navigation's
692 // or if this is a subframe navigation. We only swap RFHs for subframes when 692 // or if this is a subframe navigation. We only swap RFHs for subframes when
693 // --site-per-process is enabled. 693 // --site-per-process is enabled.
694 CleanUpNavigation(); 694 CleanUpNavigation();
695 navigation_rfh = render_frame_host_.get(); 695 navigation_rfh = render_frame_host_.get();
696 } else { 696 } else {
697 // If the current render_frame_host_ isn't live, we should create it so
698 // that we don't show a sad tab while the navigation is ongoing.
699 // (Bug 1145340)
700 if (!render_frame_host_->IsRenderFrameLive()) {
701 // Note: we don't call InitRenderView here because we are navigating away
702 // soon anyway, and we don't have the NavigationEntry for this host.
703 delegate_->CreateRenderViewForRenderManager(
704 render_frame_host_->render_view_host(), MSG_ROUTING_NONE,
705 MSG_ROUTING_NONE, frame_tree_node_->IsMainFrame());
706 }
707
708 // If the SiteInstance for the final URL doesn't match the one from the 697 // If the SiteInstance for the final URL doesn't match the one from the
709 // speculatively created RenderFrameHost, create a new RenderFrameHost using 698 // speculatively created RenderFrameHost, create a new RenderFrameHost using
710 // this new SiteInstance. 699 // this new SiteInstance.
711 if (!speculative_render_frame_host_ || 700 if (!speculative_render_frame_host_ ||
712 speculative_render_frame_host_->GetSiteInstance() != 701 speculative_render_frame_host_->GetSiteInstance() !=
713 dest_site_instance.get()) { 702 dest_site_instance.get()) {
714 CleanUpNavigation(); 703 CleanUpNavigation();
715 bool success = CreateSpeculativeRenderFrameHost( 704 bool success = CreateSpeculativeRenderFrameHost(
716 request.common_params().url, current_site_instance, 705 request.common_params().url, current_site_instance,
717 dest_site_instance.get(), request.bindings()); 706 dest_site_instance.get(), request.bindings());
718 DCHECK(success); 707 DCHECK(success);
719 } 708 }
720 DCHECK(speculative_render_frame_host_); 709 DCHECK(speculative_render_frame_host_);
721 navigation_rfh = speculative_render_frame_host_.get(); 710 navigation_rfh = speculative_render_frame_host_.get();
711
712 // Check if our current RFH is live.
713 if (!render_frame_host_->IsRenderFrameLive()) {
714 // The current RFH is not live. There's no reason to sit around with a
715 // sad tab or a newly created RFH while we wait for the navigation to
716 // complete. Just switch to the speculative RFH now and go back to non
717 // cross-navigating (Note that we don't care about on{before}unload
718 // handlers if the current RFH isn't live.)
719 CommitPending();
720 }
722 } 721 }
723 DCHECK(navigation_rfh && 722 DCHECK(navigation_rfh &&
724 (navigation_rfh == render_frame_host_.get() || 723 (navigation_rfh == render_frame_host_.get() ||
725 navigation_rfh == speculative_render_frame_host_.get())); 724 navigation_rfh == speculative_render_frame_host_.get()));
726 725
727 // If the RenderFrame that needs to navigate is not live (its process was just 726 // If the RenderFrame that needs to navigate is not live (its process was just
728 // created or has crashed), initialize it. 727 // created or has crashed), initialize it.
729 if (!navigation_rfh->IsRenderFrameLive()) { 728 if (!navigation_rfh->IsRenderFrameLive()) {
730 // Recreate the opener chain. 729 // Recreate the opener chain.
731 int opener_route_id = delegate_->CreateOpenerRenderViewsForRenderManager( 730 int opener_route_id = delegate_->CreateOpenerRenderViewsForRenderManager(
(...skipping 1150 matching lines...) Expand 10 before | Expand all | Expand 10 after
1882 void RenderFrameHostManager::DeleteRenderFrameProxyHost( 1881 void RenderFrameHostManager::DeleteRenderFrameProxyHost(
1883 SiteInstance* instance) { 1882 SiteInstance* instance) {
1884 RenderFrameProxyHostMap::iterator iter = proxy_hosts_.find(instance->GetId()); 1883 RenderFrameProxyHostMap::iterator iter = proxy_hosts_.find(instance->GetId());
1885 if (iter != proxy_hosts_.end()) { 1884 if (iter != proxy_hosts_.end()) {
1886 delete iter->second; 1885 delete iter->second;
1887 proxy_hosts_.erase(iter); 1886 proxy_hosts_.erase(iter);
1888 } 1887 }
1889 } 1888 }
1890 1889
1891 } // namespace content 1890 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698