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 0dff87bd98430c6dd3924bfe97ba28e8b9b5f5c3..0999cc83d9f7c0e041b15383d84d194053221914 100644 |
--- a/content/browser/frame_host/frame_tree.cc |
+++ b/content/browser/frame_host/frame_tree.cc |
@@ -31,18 +31,6 @@ bool FrameTreeNodeForId(int64 frame_tree_node_id, |
return true; |
} |
-// TODO(creis): Remove this version along with FrameTreeNode::frame_id(). |
-bool FrameTreeNodeForFrameId(int64 frame_id, |
- FrameTreeNode** out_node, |
- FrameTreeNode* node) { |
- if (node->frame_id() == frame_id) { |
- *out_node = node; |
- // Terminate iteration once the node has been found. |
- return false; |
- } |
- return true; |
-} |
- |
} // namespace |
FrameTree::FrameTree(Navigator* navigator, |
@@ -60,7 +48,6 @@ FrameTree::FrameTree(Navigator* navigator, |
render_view_delegate, |
render_widget_delegate, |
manager_delegate, |
- FrameTreeNode::kInvalidFrameId, |
std::string())) { |
} |
@@ -89,19 +76,15 @@ void FrameTree::ForEach( |
} |
} |
-bool FrameTree::IsFirstNavigationAfterSwap() const { |
- return root_->frame_id() == FrameTreeNode::kInvalidFrameId; |
-} |
- |
-void FrameTree::OnFirstNavigationAfterSwap(int main_frame_id) { |
- root_->set_frame_id(main_frame_id); |
-} |
- |
-RenderFrameHostImpl* FrameTree::AddFrame(int frame_routing_id, |
- int64 parent_frame_id, |
- int64 frame_id, |
- const std::string& frame_name) { |
- FrameTreeNode* parent = FindByFrameID(parent_frame_id); |
+RenderFrameHostImpl* FrameTree::AddFrame( |
+ RenderViewHostImpl* parent_render_view_host, |
+ int frame_routing_id, |
+ int64 parent_frame_id, |
+ int64 frame_id, |
+ const std::string& frame_name) { |
+ int64 parent_frame_tree_node_id = |
+ parent_render_view_host->GetFrameTreeNodeID(parent_frame_id); |
+ FrameTreeNode* parent = FindByID(parent_frame_tree_node_id); |
// TODO(ajwong): Should the renderer be killed here? Would there be a race on |
// shutdown that might make this case possible? |
if (!parent) |
@@ -109,14 +92,17 @@ RenderFrameHostImpl* FrameTree::AddFrame(int frame_routing_id, |
scoped_ptr<FrameTreeNode> node(new FrameTreeNode( |
this, parent->navigator(), render_frame_delegate_, render_view_delegate_, |
- render_widget_delegate_, manager_delegate_, frame_id, frame_name)); |
+ render_widget_delegate_, manager_delegate_, frame_name)); |
RenderFrameHostImpl* render_frame = node->current_frame_host(); |
+ parent_render_view_host->RegisterFrameID(frame_id, |
+ node->frame_tree_node_id()); |
parent->AddChild(node.Pass(), frame_routing_id); |
return render_frame; |
} |
void FrameTree::RemoveFrame(RenderFrameHostImpl* render_frame_host, |
- int64 parent_frame_id, |
+ int64 parent_frame_tree_node_id, |
+ int64 frame_tree_node_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 |
@@ -125,8 +111,8 @@ void FrameTree::RemoveFrame(RenderFrameHostImpl* render_frame_host, |
// TODO(ajwong): Move this below the |parent| check after the FrameTree is |
// guaranteed to be correctly populated even without the |
// switches::kSitePerProcess flag. |
- FrameTreeNode* parent = FindByFrameID(parent_frame_id); |
- FrameTreeNode* child = FindByFrameID(frame_id); |
+ FrameTreeNode* parent = FindByID(parent_frame_tree_node_id); |
+ FrameTreeNode* child = FindByID(frame_tree_node_id); |
if (!on_frame_removed_.is_null()) { |
on_frame_removed_.Run( |
render_frame_host->render_view_host(), frame_id); |
@@ -140,8 +126,8 @@ void FrameTree::RemoveFrame(RenderFrameHostImpl* render_frame_host, |
parent->RemoveChild(child); |
} |
-void FrameTree::SetFrameUrl(int64 frame_id, const GURL& url) { |
- FrameTreeNode* node = FindByFrameID(frame_id); |
+void FrameTree::SetFrameUrl(int64 frame_tree_node_id, const GURL& url) { |
+ FrameTreeNode* node = FindByID(frame_tree_node_id); |
// TODO(ajwong): Should the renderer be killed here? Would there be a race on |
// shutdown that might make this case possible? |
if (!node) |
@@ -196,7 +182,9 @@ RenderViewHostImpl* FrameTree::GetRenderViewHostForSubFrame( |
SiteInstance* site_instance) { |
RenderViewHostMap::iterator iter = |
render_view_host_map_.find(site_instance->GetId()); |
- CHECK(iter != render_view_host_map_.end()); |
+ // TODO(creis): Mirror the frame tree so this check can't fail. |
+ if (iter == render_view_host_map_.end()) |
+ return NULL; |
RenderViewHostRefCount rvh_refcount = iter->second; |
return rvh_refcount.first; |
} |
@@ -232,10 +220,4 @@ void FrameTree::UnregisterRenderFrameHost( |
} |
} |
-FrameTreeNode* FrameTree::FindByFrameID(int64 frame_id) { |
- FrameTreeNode* node = NULL; |
- ForEach(base::Bind(&FrameTreeNodeForFrameId, frame_id, &node)); |
- return node; |
-} |
- |
} // namespace content |