diff options
Diffstat (limited to 'content/browser/frame_host/render_frame_host_manager.h')
-rw-r--r-- | content/browser/frame_host/render_frame_host_manager.h | 126 |
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). |