Index: content/browser/frame_host/frame_tree.cc |
diff --git a/content/browser/frame_host/frame_tree.cc b/content/browser/frame_host/frame_tree.cc |
index 814ca9e2795337056dae86c230690515ee61e51f..c3f1d8d5c980c0ef66be625195185cbf1124ca34 100644 |
--- a/content/browser/frame_host/frame_tree.cc |
+++ b/content/browser/frame_host/frame_tree.cc |
@@ -58,8 +58,7 @@ FrameTree::FrameTree(Navigator* navigator, |
render_widget_delegate, |
manager_delegate, |
FrameTreeNode::kInvalidFrameId, |
- std::string(), |
- scoped_ptr<RenderFrameHostImpl>())) { |
+ std::string())) { |
} |
FrameTree::~FrameTree() { |
@@ -105,12 +104,13 @@ void FrameTree::AddFrame(int render_frame_host_id, |
if (!parent) |
return; |
- parent->AddChild(CreateNode(frame_id, frame_name, render_frame_host_id, |
- parent->navigator(), |
- parent->render_frame_host()->GetProcess())); |
+ parent->AddChild( |
+ CreateNode(frame_id, frame_name, render_frame_host_id, parent)); |
} |
-void FrameTree::RemoveFrame(int64 parent_frame_id, int64 frame_id) { |
+void FrameTree::RemoveFrame(RenderFrameHostImpl* render_frame_host, |
+ int64 parent_frame_id, |
+ int64 frame_id) { |
// If switches::kSitePerProcess is not specified, then the FrameTree only |
// contains a node for the root element. However, even in this case |
// frame detachments need to be broadcast outwards. |
@@ -122,7 +122,7 @@ void FrameTree::RemoveFrame(int64 parent_frame_id, int64 frame_id) { |
FrameTreeNode* child = FindByFrameID(frame_id); |
if (!on_frame_removed_.is_null()) { |
on_frame_removed_.Run( |
- root_->render_frame_host()->render_view_host(), frame_id); |
+ render_frame_host->render_view_host(), frame_id); |
} |
// TODO(ajwong): Should the renderer be killed here? Would there be a race on |
@@ -167,19 +167,22 @@ scoped_ptr<FrameTreeNode> FrameTree::CreateNode( |
int64 frame_id, |
const std::string& frame_name, |
int render_frame_host_id, |
- Navigator* navigator, |
- RenderProcessHost* render_process_host) { |
+ FrameTreeNode* parent_node) { |
+ scoped_ptr<FrameTreeNode> frame_tree_node(new FrameTreeNode( |
+ parent_node->navigator(), render_frame_delegate_, render_view_delegate_, |
+ render_widget_delegate_, manager_delegate_, frame_id, frame_name)); |
+ |
scoped_ptr<RenderFrameHostImpl> render_frame_host( |
RenderFrameHostFactory::Create( |
- root_->render_frame_host()->render_view_host(), |
- root_->render_frame_host()->delegate(), |
+ parent_node->render_frame_host()->render_view_host(), |
+ parent_node->render_frame_host()->delegate(), |
this, |
+ frame_tree_node.get(), |
render_frame_host_id, |
false)); |
- return make_scoped_ptr(new FrameTreeNode(navigator, |
- render_frame_delegate_, render_view_delegate_, render_widget_delegate_, |
- manager_delegate_, frame_id, frame_name, render_frame_host.Pass())); |
+ frame_tree_node->set_render_frame_host(render_frame_host.release(), true); |
+ return frame_tree_node.Pass(); |
} |
} // namespace content |