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

Unified Diff: trunk/src/content/browser/frame_host/frame_tree_node.h

Issue 105523006: Revert 241151 "Make RenderFrameHostManager swap RenderFrameHosts..." (Closed) Base URL: svn://svn.chromium.org/chrome/
Patch Set: Created 7 years 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: trunk/src/content/browser/frame_host/frame_tree_node.h
===================================================================
--- trunk/src/content/browser/frame_host/frame_tree_node.h (revision 241158)
+++ trunk/src/content/browser/frame_host/frame_tree_node.h (working copy)
@@ -18,7 +18,6 @@
namespace content {
-class FrameTree;
class Navigator;
class RenderFrameHostImpl;
@@ -30,8 +29,7 @@
public:
static const int64 kInvalidFrameId;
- FrameTreeNode(FrameTree* frame_tree,
- Navigator* navigator,
+ FrameTreeNode(Navigator* navigator,
RenderFrameHostDelegate* render_frame_delegate,
RenderViewHostDelegate* render_view_delegate,
RenderWidgetHostDelegate* render_widget_delegate,
@@ -41,19 +39,28 @@
~FrameTreeNode();
- bool IsMainFrame() const;
-
- void AddChild(scoped_ptr<FrameTreeNode> child, int frame_routing_id);
+ void AddChild(scoped_ptr<FrameTreeNode> child);
void RemoveChild(FrameTreeNode* child);
- // Clears process specific-state after a main frame process swap.
- // TODO(creis): Look into how we can remove the need for this method.
- void ResetForMainFrameSwap();
-
- FrameTree* frame_tree() const {
- return frame_tree_;
+ // TODO(nasko): This method should be removed once RenderFrameHosts are
+ // created by RenderFrameHostManager.
+ void set_render_frame_host(
+ RenderFrameHostImpl* render_frame_host,
+ bool owns_render_frame_host) {
+ render_frame_host_ = render_frame_host;
+ owns_render_frame_host_ = owns_render_frame_host;
}
+ // Transitional API allowing the RenderFrameHost of a FrameTreeNode
+ // representing the main frame to be provided by someone else. After
+ // this is called, the FrameTreeNode no longer owns its RenderFrameHost.
+ //
+ // This should only be used for the main frame (aka root) in a frame tree.
+ //
+ // TODO(ajwong): Remove this method once the main frame RenderFrameHostImpl is
+ // no longer owned by the RenderViewHostImpl.
+ void ResetForMainFrame(RenderFrameHostImpl* new_render_frame_host);
+
Navigator* navigator() {
return navigator_.get();
}
@@ -96,25 +103,23 @@
current_url_ = url;
}
- RenderFrameHostImpl* current_frame_host() const {
- return render_manager_.current_frame_host();
+ RenderFrameHostImpl* render_frame_host() const {
+ return render_frame_host_;
}
private:
// The next available browser-global FrameTreeNode ID.
static int64 next_frame_tree_node_id_;
- // The FrameTree that owns us.
- FrameTree* frame_tree_; // not owned.
-
// The Navigator object responsible for managing navigations at this node
// of the frame tree.
scoped_refptr<Navigator> navigator_;
- // Manages creation and swapping of RenderFrameHosts for this frame. This
- // must be declared before |children_| so that it gets deleted after them.
- // That's currently necessary so that RenderFrameHostImpl's destructor can
- // call GetProcess.
+ // Manages creation and swapping of RenderViewHosts for this frame. This must
+ // be declared before |children_| so that it gets deleted after them. That's
+ // currently necessary so that RenderFrameHostImpl's destructor can call
+ // GetProcess.
+ // TODO(creis): This will eliminate the need for |render_frame_host_| below.
RenderFrameHostManager render_manager_;
// A browser-global identifier for the frame in the page, which stays stable
@@ -134,6 +139,22 @@
// The immediate children of this specific frame.
ScopedVector<FrameTreeNode> children_;
+ // When ResetForMainFrame() is called, this is set to false and the
+ // |render_frame_host_| below is not deleted on destruction.
+ //
+ // For the mainframe, the FrameTree does not own the |render_frame_host_|.
+ // This is a transitional wart because RenderFrameHostManager does not yet
+ // have the bookkeeping logic to handle creating a pending RenderFrameHost
+ // along with a pending RenderViewHost. Thus, for the main frame, the
+ // RenderViewHost currently retains ownership and the FrameTreeNode should
+ // not delete it on destruction.
+ bool owns_render_frame_host_;
+
+ // The active RenderFrameHost for this frame. The FrameTreeNode does not
+ // always own this pointer. See comments above |owns_render_frame_host_|.
+ // TODO(ajwong): Replace with RenderFrameHostManager.
+ RenderFrameHostImpl* render_frame_host_;
+
// Track the current frame's last committed URL, so we can estimate the
// process impact of out-of-process iframes.
// TODO(creis): Remove this when we can store subframe URLs in the
« no previous file with comments | « trunk/src/content/browser/frame_host/frame_tree.cc ('k') | trunk/src/content/browser/frame_host/frame_tree_node.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698