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

Unified Diff: content/browser/frame_host/frame_tree.cc

Issue 172063002: Unify frame IDs with RenderFrameHost routing IDs. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix type Created 6 years, 10 months 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
« no previous file with comments | « content/browser/frame_host/frame_tree.h ('k') | content/browser/frame_host/frame_tree_browsertest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 0b3275a25ac1b7305c92fa418207391dc2fcadc0..23fc768af0c56c090abe1aa273f4f84ff6a1d2c0 100644
--- a/content/browser/frame_host/frame_tree.cc
+++ b/content/browser/frame_host/frame_tree.cc
@@ -31,11 +31,13 @@ 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) {
+bool FrameTreeNodeForRoutingId(int routing_id,
+ int process_id,
+ FrameTreeNode** out_node,
+ FrameTreeNode* node) {
+ // TODO(creis): Look through the swapped out RFHs as well.
+ if (node->current_frame_host()->GetProcess()->GetID() == process_id &&
+ node->current_frame_host()->GetRoutingID() == routing_id) {
*out_node = node;
// Terminate iteration once the node has been found.
return false;
@@ -69,7 +71,6 @@ FrameTree::FrameTree(Navigator* navigator,
render_view_delegate,
render_widget_delegate,
manager_delegate,
- FrameTreeNode::kInvalidFrameId,
std::string())) {
}
@@ -82,6 +83,13 @@ FrameTreeNode* FrameTree::FindByID(int64 frame_tree_node_id) {
return node;
}
+FrameTreeNode* FrameTree::FindByRoutingID(int routing_id, int process_id) {
+ FrameTreeNode* node = NULL;
+ ForEach(
+ base::Bind(&FrameTreeNodeForRoutingId, routing_id, process_id, &node));
+ return node;
+}
+
void FrameTree::ForEach(
const base::Callback<bool(FrameTreeNode*)>& on_node) const {
std::queue<FrameTreeNode*> queue;
@@ -98,69 +106,36 @@ 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,
+RenderFrameHostImpl* FrameTree::AddFrame(FrameTreeNode* parent,
+ int new_routing_id,
const std::string& frame_name) {
- FrameTreeNode* parent = FindByFrameID(parent_frame_id);
- // TODO(ajwong): Should the renderer be killed here? Would there be a race on
- // shutdown that might make this case possible?
- if (!parent)
- return NULL;
-
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));
FrameTreeNode* node_ptr = node.get();
// AddChild is what creates the RenderFrameHost.
- parent->AddChild(node.Pass(), frame_routing_id);
+ parent->AddChild(node.Pass(), new_routing_id);
return node_ptr->current_frame_host();
}
-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.
- //
- // 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);
+void FrameTree::RemoveFrame(FrameTreeNode* child) {
+ FrameTreeNode* parent = child->parent();
+ if (!parent) {
+ NOTREACHED() << "Unexpected RemoveFrame call for main frame.";
+ return;
+ }
+
+ // Notify observers of the frame removal.
+ RenderFrameHostImpl* render_frame_host = child->current_frame_host();
if (!on_frame_removed_.is_null()) {
on_frame_removed_.Run(
- render_frame_host->render_view_host(), frame_id);
+ render_frame_host->render_view_host(),
+ render_frame_host->GetRoutingID());
}
- // TODO(ajwong): Should the renderer be killed here? Would there be a race on
- // shutdown that might make this case possible?
- if (!parent || !child)
- return;
-
parent->RemoveChild(child);
}
-void FrameTree::SetFrameUrl(int64 frame_id, const GURL& url) {
- FrameTreeNode* node = FindByFrameID(frame_id);
- // TODO(ajwong): Should the renderer be killed here? Would there be a race on
- // shutdown that might make this case possible?
- if (!node)
- return;
-
- if (node)
- node->set_current_url(url);
-}
-
void FrameTree::ResetForMainFrameSwap() {
root_->ResetForNewProcess();
}
@@ -180,14 +155,10 @@ RenderFrameHostImpl* FrameTree::GetMainFrame() const {
}
void FrameTree::SetFrameRemoveListener(
- const base::Callback<void(RenderViewHostImpl*, int64)>& on_frame_removed) {
+ const base::Callback<void(RenderViewHostImpl*, int)>& on_frame_removed) {
on_frame_removed_ = on_frame_removed;
}
-void FrameTree::ClearFrameRemoveListenerForTesting() {
- on_frame_removed_.Reset();
-}
-
RenderViewHostImpl* FrameTree::CreateRenderViewHostForMainFrame(
SiteInstance* site_instance,
int routing_id,
@@ -287,10 +258,4 @@ void FrameTree::UnregisterRenderFrameHost(
}
}
-FrameTreeNode* FrameTree::FindByFrameID(int64 frame_id) {
- FrameTreeNode* node = NULL;
- ForEach(base::Bind(&FrameTreeNodeForFrameId, frame_id, &node));
- return node;
-}
-
} // namespace content
« no previous file with comments | « content/browser/frame_host/frame_tree.h ('k') | content/browser/frame_host/frame_tree_browsertest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698