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

Unified Diff: content/browser/frame_host/render_frame_host_manager.h

Issue 367653002: Add a FrameHostMsg_BeginNavigation IPC (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Added a stub for CommitNavigation to clarify lifetime of rfh Created 6 years, 5 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 side-by-side diff with in-line comments
Download patch
Index: content/browser/frame_host/render_frame_host_manager.h
diff --git a/content/browser/frame_host/render_frame_host_manager.h b/content/browser/frame_host/render_frame_host_manager.h
index fddfd9c8de20f9fb2a815d40584b8d0cbfc21ee9..a2f4db4e058f34db9d4a85febdd3ffa44671f21d 100644
--- a/content/browser/frame_host/render_frame_host_manager.h
+++ b/content/browser/frame_host/render_frame_host_manager.h
@@ -18,6 +18,7 @@
#include "content/public/common/referrer.h"
struct FrameHostMsg_BeginNavigation_Params;
+struct FrameMsg_Navigate_Params;
namespace content {
class BrowserContext;
@@ -40,6 +41,7 @@ class RenderWidgetHostDelegate;
class RenderWidgetHostView;
class TestWebContents;
class WebUIImpl;
+struct NavigationCommitInfo;
// Manages RenderFrameHosts for a FrameTreeNode. This class acts as a state
// machine to make cross-process navigations in a frame possible.
@@ -187,6 +189,13 @@ class CONTENT_EXPORT RenderFrameHostManager : public NotificationObserver {
// could not be created.
RenderFrameHostImpl* Navigate(const NavigationEntryImpl& entry);
+ // As part of the PlzNavigate refactoring project, sends a RequestNavigation
+ // IPC to the renderer to ask it to navigate. If no live renderer is present,
+ // then the navigation request will be sent directly to the
+ // ResourceDispatcherHost.
+ bool RequestNavigation(const NavigationEntryImpl& entry,
+ const FrameMsg_Navigate_Params& navigate_params);
+
// Instructs the various live views to stop. Called when the user directed the
// page to stop loading.
void Stop();
@@ -246,12 +255,15 @@ class CONTENT_EXPORT RenderFrameHostManager : public NotificationObserver {
// Helper method to create and initialize a RenderFrameHost. If |swapped_out|
// is true, it will be initially placed on the swapped out hosts list.
+ // Else if |is_speculative| is true, then it will used as a speculatively
+ // spawned renderer in the PlzNavigate navigation refactoring project.
// Otherwise, it will be used for a pending cross-site navigation.
// Returns the routing id of the *view* associated with the frame.
int CreateRenderFrame(SiteInstance* instance,
int opener_route_id,
bool swapped_out,
- bool hidden);
+ bool hidden,
+ bool is_speculative);
// Sets the passed passed interstitial as the currently showing interstitial.
// |interstitial_page| should be non NULL (use the remove_interstitial_page
@@ -305,6 +317,10 @@ class CONTENT_EXPORT RenderFrameHostManager : public NotificationObserver {
// Used to start a navigation, part of browser-side navigation project.
void OnBeginNavigation(const FrameHostMsg_BeginNavigation_Params& params);
+ // Used to signal the commit of a navigation request, part of PlzNavigate
+ // navigation refactoring project.
+ void CommitNavigation(const NavigationCommitInfo& info);
+
private:
friend class RenderFrameHostManagerTest;
friend class TestWebContents;
@@ -394,6 +410,16 @@ class CONTENT_EXPORT RenderFrameHostManager : public NotificationObserver {
SiteInstance* current_instance,
bool force_browsing_instance_swap);
+ // Creates a new RenderFrameHostImpl for the |new_instance| while respecting
+ // the opener route if needed. If |is_speculative| is true, then the newly
+ // created RFH will be stored in speculative_render_frame_host_, otherwise it
+ // will be stored in pending_render_frame_host_. Also returns a pointer to the
+ // newly created RFH.
+ RenderFrameHostImpl* CreateRenderFrameHostForCrossSite(
+ SiteInstance* old_instance,
+ SiteInstance* new_instance,
+ bool is_speculative);
+
// Creates a RenderFrameHost and corresponding RenderViewHost if necessary.
scoped_ptr<RenderFrameHostImpl> CreateRenderFrameHost(SiteInstance* instance,
int view_routing_id,
@@ -413,6 +439,14 @@ class CONTENT_EXPORT RenderFrameHostManager : public NotificationObserver {
int proxy_routing_id,
bool for_main_frame);
+ // Initializes |dest_render_frame_host| and |render_frame_host_| if necessary
+ // before navigating.
+ bool InitRenderFrameHostsBeforeNavigation(
+ RenderFrameHostImpl* dest_render_frame_host);
+
+ // Returns the SiteInstance to use for the navigation.
+ SiteInstance* GetSiteInstanceForNavigation(const NavigationEntryImpl& entry);
+
// Sets the pending RenderFrameHost/WebUI to be the active one. Note that this
// doesn't require the pending render_frame_host_ pointer to be non-NULL,
// since there could be Web UI switching as well. Call this for every commit.
@@ -482,6 +516,11 @@ class CONTENT_EXPORT RenderFrameHostManager : public NotificationObserver {
// headers.
scoped_ptr<GlobalRequestID> response_started_id_;
+ // A RenderFrameHost speculatively created when receiving a navigation
+ // request. It should be used or deleted when the current navigation request
+ // commits.
+ scoped_ptr<RenderFrameHostImpl> speculative_render_frame_host_;
+
// If either of these is non-NULL, the pending navigation is to a chrome:
// page. The scoped_ptr is used if pending_web_ui_ != web_ui_, the WeakPtr is
// used for when they reference the same object. If either is non-NULL, the
« no previous file with comments | « content/browser/frame_host/render_frame_host_impl.cc ('k') | content/browser/frame_host/render_frame_host_manager.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698