summaryrefslogtreecommitdiffstats
path: root/content/browser/frame_host/render_frame_host_manager.h
diff options
context:
space:
mode:
Diffstat (limited to 'content/browser/frame_host/render_frame_host_manager.h')
-rw-r--r--content/browser/frame_host/render_frame_host_manager.h126
1 files changed, 82 insertions, 44 deletions
diff --git a/content/browser/frame_host/render_frame_host_manager.h b/content/browser/frame_host/render_frame_host_manager.h
index 94a4998..0360bd0 100644
--- a/content/browser/frame_host/render_frame_host_manager.h
+++ b/content/browser/frame_host/render_frame_host_manager.h
@@ -20,10 +20,12 @@
namespace content {
class BrowserContext;
class InterstitialPageImpl;
+class FrameTreeNode;
class NavigationControllerImpl;
class NavigationEntry;
class NavigationEntryImpl;
class RenderFrameHostDelegate;
+class RenderFrameHostImpl;
class RenderFrameHostManagerTest;
class RenderViewHost;
class RenderViewHostImpl;
@@ -114,6 +116,7 @@ class CONTENT_EXPORT RenderFrameHostManager
//
// You must call Init() before using this class.
RenderFrameHostManager(
+ FrameTreeNode* frame_tree_node,
RenderFrameHostDelegate* render_frame_delegate,
RenderViewHostDelegate* render_view_delegate,
RenderWidgetHostDelegate* render_widget_delegate,
@@ -123,21 +126,31 @@ class CONTENT_EXPORT RenderFrameHostManager
// For arguments, see WebContentsImpl constructor.
void Init(BrowserContext* browser_context,
SiteInstance* site_instance,
- int routing_id,
- int main_frame_routing_id);
+ int view_routing_id,
+ int frame_routing_id);
- // Returns the currently active RenderViewHost.
+ // Returns the currently active RenderFrameHost.
//
// This will be non-NULL between Init() and Shutdown(). You may want to NULL
// check it in many cases, however. Windows can send us messages during the
// destruction process after it has been shut down.
+ RenderFrameHostImpl* current_frame_host() const {
+ return render_frame_host_;
+ }
+
+ // TODO(creis): Remove this when we no longer use RVH for navigation.
RenderViewHostImpl* current_host() const;
// Returns the view associated with the current RenderViewHost, or NULL if
// there is no current one.
RenderWidgetHostView* GetRenderWidgetHostView() const;
- // Returns the pending render view host, or NULL if there is no pending one.
+ // Returns the pending RenderFrameHost, or NULL if there is no pending one.
+ RenderFrameHostImpl* pending_frame_host() const {
+ return pending_render_frame_host_;
+ }
+
+ // TODO(creis): Remove this when we no longer use RVH for navigation.
RenderViewHostImpl* pending_render_view_host() const;
// Returns the current committed Web UI or NULL if none applies.
@@ -183,13 +196,13 @@ class CONTENT_EXPORT RenderFrameHostManager
// Called when a renderer sets its opener to null.
void DidDisownOpener(RenderViewHost* render_view_host);
- // Helper method to create a RenderViewHost. If |swapped_out| is true, it
- // will be initially placed on the swapped out hosts list. Otherwise, it
- // will be used for a pending cross-site navigation.
- int CreateRenderView(SiteInstance* instance,
- int opener_route_id,
- bool swapped_out,
- bool hidden);
+ // Helper method to create and initialize a RenderFrameHost. If |swapped_out|
+ // is true, it will be initially placed on the swapped out hosts list.
+ // Otherwise, it will be used for a pending cross-site navigation.
+ int CreateRenderFrame(SiteInstance* instance,
+ int opener_route_id,
+ bool swapped_out,
+ bool hidden);
// Called when a provisional load on the given renderer is aborted.
void RendererAbortedProvisionalLoad(RenderViewHost* render_view_host);
@@ -236,12 +249,16 @@ class CONTENT_EXPORT RenderFrameHostManager
// Called when a RenderViewHost is about to be deleted.
void RenderViewDeleted(RenderViewHost* rvh);
- // Returns whether the given RenderViewHost is on the list of swapped out
- // RenderViewHosts.
- bool IsOnSwappedOutList(RenderViewHost* rvh) const;
+ // Returns whether the given RenderFrameHost (or its associated
+ // RenderViewHost) is on the list of swapped out RenderFrameHosts.
+ bool IsRVHOnSwappedOutList(RenderViewHostImpl* rvh) const;
+ bool IsOnSwappedOutList(RenderFrameHostImpl* rfh) const;
- // Returns the swapped out RenderViewHost for the given SiteInstance, if any.
- RenderViewHostImpl* GetSwappedOutRenderViewHost(SiteInstance* instance);
+ // Returns the swapped out RenderViewHost or RenderFrameHost for the given
+ // SiteInstance, if any.
+ RenderViewHostImpl* GetSwappedOutRenderViewHost(SiteInstance* instance) const;
+ RenderFrameHostImpl* GetSwappedOutRenderFrameHost(
+ SiteInstance* instance) const;
// Runs the unload handler in the current page, when we know that a pending
// cross-process navigation is going to commit. We may initiate a transfer
@@ -253,7 +270,7 @@ class CONTENT_EXPORT RenderFrameHostManager
friend class TestWebContents;
// Tracks information about a navigation while a cross-process transition is
- // in progress, in case we need to transfer it to a new RenderViewHost.
+ // in progress, in case we need to transfer it to a new RenderFrameHost.
struct PendingNavigationParams {
PendingNavigationParams();
PendingNavigationParams(const GlobalRequestID& global_request_id,
@@ -295,6 +312,11 @@ class CONTENT_EXPORT RenderFrameHostManager
bool should_replace_current_entry;
};
+ // Used with FrameTree::ForEach to erase inactive RenderFrameHosts from a
+ // FrameTreeNode's RenderFrameHostManager.
+ static bool ClearSwappedOutRFHsInSiteInstance(int32 site_instance_id,
+ FrameTreeNode* node);
+
// Returns whether this tab should transition to a new renderer for
// cross-site URLs. Enabled unless we see the --process-per-tab command line
// switch. Can be overridden in unit tests.
@@ -325,60 +347,76 @@ class CONTENT_EXPORT RenderFrameHostManager
SiteInstance* current_instance,
bool force_browsing_instance_swap);
- // Sets up the necessary state for a new RenderViewHost with the given opener.
+ // Creates a RenderFrameHost and corresponding RenderViewHost if necessary.
+ RenderFrameHostImpl* CreateRenderFrameHost(SiteInstance* instance,
+ int view_routing_id,
+ int frame_routing_id,
+ bool swapped_out,
+ bool hidden);
+
+ // Sets up the necessary state for a new RenderViewHost with the given opener,
+ // if necessary. Returns early if the RenderViewHost has already been
+ // initialized for another RenderFrameHost.
+ // TODO(creis): opener_route_id is currently for the RenderViewHost but should
+ // be for the RenderFrame, since frames can have openers.
bool InitRenderView(RenderViewHost* render_view_host, int opener_route_id);
- // Sets the pending RenderViewHost/WebUI to be the active one. Note that this
- // doesn't require the pending render_view_host_ pointer to be non-NULL, since
- // there could be Web UI switching as well. Call this for every commit.
+ // 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.
void CommitPending();
- // Shutdown all RenderViewHosts in a SiteInstance. This is called
- // to shutdown views when all the views in a SiteInstance are
- // confirmed to be swapped out.
- void ShutdownRenderViewHostsInSiteInstance(int32 site_instance_id);
+ // Shutdown all RenderFrameHosts in a SiteInstance. This is called to shutdown
+ // frames when all the frames in a SiteInstance are confirmed to be swapped
+ // out.
+ void ShutdownRenderFrameHostsInSiteInstance(int32 site_instance_id);
// Helper method to terminate the pending RenderViewHost.
void CancelPending();
- RenderViewHostImpl* UpdateRendererStateForNavigate(
+ RenderFrameHostImpl* UpdateRendererStateForNavigate(
const NavigationEntryImpl& entry);
// Called when a renderer process is starting to close. We should not
- // schedule new navigations in its swapped out RenderViewHosts after this.
+ // schedule new navigations in its swapped out RenderFrameHosts after this.
void RendererProcessClosing(RenderProcessHost* render_process_host);
+ // For use in creating RenderFrameHosts.
+ FrameTreeNode* frame_tree_node_;
+
// Our delegate, not owned by us. Guaranteed non-NULL.
Delegate* delegate_;
- // Whether a navigation requiring different RenderView's is pending. This is
- // either cross-site request is (in the new process model), or when required
- // for the view type (like view source versus not).
+ // Whether a navigation requiring different RenderFrameHosts is pending. This
+ // is either for cross-site requests or when required for the process type
+ // (like WebUI).
bool cross_navigation_pending_;
- // Implemented by the owner of this class, these delegates are installed into
- // all the RenderViewHosts that we create.
+ // Implemented by the owner of this class. These delegates are installed into
+ // all the RenderFrameHosts that we create.
RenderFrameHostDelegate* render_frame_delegate_;
RenderViewHostDelegate* render_view_delegate_;
RenderWidgetHostDelegate* render_widget_delegate_;
- // Our RenderView host and its associated Web UI (if any, will be NULL for
- // non-DOM-UI pages). This object is responsible for all communication with
- // a child RenderView instance.
- RenderViewHostImpl* render_view_host_;
+ // Our RenderFrameHost and its associated Web UI (if any, will be NULL for
+ // non-WebUI pages). This object is responsible for all communication with
+ // a child RenderFrame instance.
+ // For now, RenderFrameHost keeps a RenderViewHost in its SiteInstance alive.
+ // Eventually, RenderViewHost will be replaced with a page context.
+ RenderFrameHostImpl* render_frame_host_;
scoped_ptr<WebUIImpl> web_ui_;
- // A RenderViewHost used to load a cross-site page. This remains hidden
+ // A RenderFrameHost used to load a cross-site page. This remains hidden
// while a cross-site request is pending until it calls DidNavigate. It may
// have an associated Web UI, in which case the Web UI pointer will be non-
// NULL.
//
// The |pending_web_ui_| may be non-NULL even when the
- // |pending_render_view_host_| is NULL. This will happen when we're
- // transitioning between two Web UI pages: the RVH won't be swapped, so the
+ // |pending_render_frame_host_| is NULL. This will happen when we're
+ // transitioning between two Web UI pages: the RFH won't be swapped, so the
// pending pointer will be unused, but there will be a pending Web UI
// associated with the navigation.
- RenderViewHostImpl* pending_render_view_host_;
+ RenderFrameHostImpl* pending_render_frame_host_;
// Tracks information about any current pending cross-process navigation.
scoped_ptr<PendingNavigationParams> pending_nav_params_;
@@ -390,10 +428,10 @@ class CONTENT_EXPORT RenderFrameHostManager
scoped_ptr<WebUIImpl> pending_web_ui_;
base::WeakPtr<WebUIImpl> pending_and_current_web_ui_;
- // A map of site instance ID to swapped out RenderViewHosts. This may include
- // pending_render_view_host_ for navigations to existing entries.
- typedef base::hash_map<int32, RenderViewHostImpl*> RenderViewHostMap;
- RenderViewHostMap swapped_out_hosts_;
+ // A map of site instance ID to swapped out RenderFrameHosts. This may
+ // include pending_render_frame_host_ for navigations to existing entries.
+ typedef base::hash_map<int32, RenderFrameHostImpl*> RenderFrameHostMap;
+ RenderFrameHostMap swapped_out_hosts_;
// The intersitial page currently shown if any, not own by this class
// (the InterstitialPage is self-owned, it deletes itself when hidden).