Index: content/browser/renderer_host/render_view_host_impl.h |
diff --git a/content/browser/renderer_host/render_view_host_impl.h b/content/browser/renderer_host/render_view_host_impl.h |
index ec5fc1522a8bb7339111032dd3c464202d278997..61689b10aa881c8412452562456050b57148fbbc 100644 |
--- a/content/browser/renderer_host/render_view_host_impl.h |
+++ b/content/browser/renderer_host/render_view_host_impl.h |
@@ -61,7 +61,6 @@ namespace content { |
class BrowserMediaPlayerManager; |
class ChildProcessSecurityPolicyImpl; |
class PageState; |
-class RenderFrameHostImpl; |
class RenderWidgetHostDelegate; |
class SessionStorageNamespace; |
class SessionStorageNamespaceImpl; |
@@ -227,6 +226,21 @@ class CONTENT_EXPORT RenderViewHostImpl |
delegate_ = d; |
} |
+ // Keep track of which RenderFrameHosts are using this RenderViewHost. When |
+ // the number drops to zero, we call Shutdown. This cannot use frame_ids, |
+ // since the RenderFrameHost may outlive the process (or may go away before |
+ // the process and frame_id are created). |
+ void RegisterRenderFrameHost(RenderFrameHostImpl* render_frame_host); |
+ void UnregisterRenderFrameHost(RenderFrameHostImpl* render_frame_host); |
+ |
+ // Map renderer-specific frame IDs to browser-global FrameTreeNode IDs. |
+ // TODO(creis): Call Unregister. |
+ void RegisterFrameID(int64 frame_id, int64 frame_tree_node_id); |
+ void UnregisterFrameID(int64 frame_id); |
+ bool HasFrameID(int64 frame_id) const; |
+ int64 GetFrameTreeNodeID(int64 frame_id); |
+ int64 GetFrameIDForTesting(int64 frame_tree_node_id) const; |
+ |
// Set up the RenderView child process. Virtual because it is overridden by |
// TestRenderViewHost. If the |frame_name| parameter is non-empty, it is used |
// as the name of the new top-level frame. |
@@ -428,12 +442,6 @@ class CONTENT_EXPORT RenderViewHostImpl |
is_subframe_ = is_subframe; |
} |
- // TODO(creis): Remove this when we replace frame IDs with RenderFrameHost |
- // routing IDs. |
- int64 main_frame_id() const { |
- return main_frame_id_; |
- } |
- |
// Set the opener to null in the renderer process. |
void DisownOpener(); |
@@ -481,13 +489,6 @@ class CONTENT_EXPORT RenderViewHostImpl |
bool empty_allowed, |
GURL* url); |
- // Update the FrameTree to use this RenderViewHost's main frame |
- // RenderFrameHost. Called when the RenderViewHost is committed. |
- // |
- // TODO(ajwong): Remove once RenderViewHost no longer owns the main frame |
- // RenderFrameHost. |
- void AttachToFrameTree(); |
- |
// The following IPC handlers are public so RenderFrameHost can call them, |
// while we transition the code to not use RenderViewHost. |
// |
@@ -611,33 +612,19 @@ class CONTENT_EXPORT RenderViewHostImpl |
void OnShowPopup(const ViewHostMsg_ShowPopup_Params& params); |
#endif |
- // TODO(nasko): Remove this accessor once RenderFrameHost moves into the frame |
- // tree. |
- RenderFrameHostImpl* main_render_frame_host() const { |
- return main_render_frame_host_.get(); |
- } |
- |
private: |
friend class TestRenderViewHost; |
FRIEND_TEST_ALL_PREFIXES(RenderViewHostTest, BasicRenderFrameHost); |
FRIEND_TEST_ALL_PREFIXES(RenderViewHostTest, RoutingIdSane); |
+ typedef base::hash_map<int64, int64> FrameIDMap; |
+ |
// Sets whether this RenderViewHost is swapped out in favor of another, |
// and clears any waiting state that is no longer relevant. |
void SetSwappedOut(bool is_swapped_out); |
bool CanAccessFilesOfPageState(const PageState& state) const; |
- // All RenderViewHosts must have a RenderFrameHost for its main frame. |
- // Currently the RenderFrameHost is created in lock step on construction |
- // and a pointer to the main frame is given to the FrameTreeNode |
- // when the RenderViewHost commits (see AttachToFrameTree()). |
- // |
- // TODO(ajwong): Make this reference non-owning. The root FrameTreeNode of |
- // the FrameTree should be responsible for owning the main frame's |
- // RenderFrameHost. |
- scoped_ptr<RenderFrameHostImpl> main_render_frame_host_; |
- |
// Our delegate, which wants to know about changes in the RenderView. |
RenderViewHostDelegate* delegate_; |
@@ -646,6 +633,13 @@ class CONTENT_EXPORT RenderViewHostImpl |
// over time. |
scoped_refptr<SiteInstanceImpl> instance_; |
+ // A list of RenderFrameHosts depending on this RenderViewHost. When the list |
+ // size goes to zero, this RenderViewHost is shut down. |
+ std::set<RenderFrameHostImpl*> rfh_list_; |
+ |
+ // Map of renderer-specific frame IDs to browser-global FrameTreeNode IDs. |
+ FrameIDMap frame_id_map_; |
+ |
// true if we are currently waiting for a response for drag context |
// information. |
bool waiting_for_drag_context_response_; |
@@ -680,10 +674,9 @@ class CONTENT_EXPORT RenderViewHostImpl |
// different process from its parent page. |
bool is_subframe_; |
- // The frame id of the main (top level) frame. This value is set on the |
- // initial navigation of a RenderView and reset when the RenderView's |
- // process is terminated (in RenderProcessGone). |
- int64 main_frame_id_; |
+ // Routing ID for the main frame's RenderFrameHost. |
+ // TODO(creis): Does this need to be updated on a crash? |
+ int main_frame_routing_id_; |
// If we were asked to RunModal, then this will hold the reply_msg that we |
// must return to the renderer to unblock it. |