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

Side by Side Diff: trunk/src/content/browser/frame_host/frame_tree.cc

Issue 163183005: Revert 251090 "Revert 250823 "With --site-per-process, avoid a c..." (Closed) Base URL: svn://svn.chromium.org/chrome/
Patch Set: 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "content/browser/frame_host/frame_tree.h" 5 #include "content/browser/frame_host/frame_tree.h"
6 6
7 #include <queue> 7 #include <queue>
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/callback.h" 10 #include "base/callback.h"
(...skipping 25 matching lines...) Expand all
36 FrameTreeNode** out_node, 36 FrameTreeNode** out_node,
37 FrameTreeNode* node) { 37 FrameTreeNode* node) {
38 if (node->frame_id() == frame_id) { 38 if (node->frame_id() == frame_id) {
39 *out_node = node; 39 *out_node = node;
40 // Terminate iteration once the node has been found. 40 // Terminate iteration once the node has been found.
41 return false; 41 return false;
42 } 42 }
43 return true; 43 return true;
44 } 44 }
45 45
46 // Iterate over the FrameTree to reset any node affected by the loss of the
47 // given RenderViewHost's process.
48 bool ResetNodesForNewProcess(RenderViewHost* render_view_host,
49 FrameTreeNode* node) {
50 if (render_view_host == node->current_frame_host()->render_view_host())
51 node->ResetForNewProcess();
52 return true;
53 }
54
46 } // namespace 55 } // namespace
47 56
48 FrameTree::FrameTree(Navigator* navigator, 57 FrameTree::FrameTree(Navigator* navigator,
49 RenderFrameHostDelegate* render_frame_delegate, 58 RenderFrameHostDelegate* render_frame_delegate,
50 RenderViewHostDelegate* render_view_delegate, 59 RenderViewHostDelegate* render_view_delegate,
51 RenderWidgetHostDelegate* render_widget_delegate, 60 RenderWidgetHostDelegate* render_widget_delegate,
52 RenderFrameHostManager::Delegate* manager_delegate) 61 RenderFrameHostManager::Delegate* manager_delegate)
53 : render_frame_delegate_(render_frame_delegate), 62 : render_frame_delegate_(render_frame_delegate),
54 render_view_delegate_(render_view_delegate), 63 render_view_delegate_(render_view_delegate),
55 render_widget_delegate_(render_widget_delegate), 64 render_widget_delegate_(render_widget_delegate),
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after
146 // TODO(ajwong): Should the renderer be killed here? Would there be a race on 155 // TODO(ajwong): Should the renderer be killed here? Would there be a race on
147 // shutdown that might make this case possible? 156 // shutdown that might make this case possible?
148 if (!node) 157 if (!node)
149 return; 158 return;
150 159
151 if (node) 160 if (node)
152 node->set_current_url(url); 161 node->set_current_url(url);
153 } 162 }
154 163
155 void FrameTree::ResetForMainFrameSwap() { 164 void FrameTree::ResetForMainFrameSwap() {
156 return root_->ResetForMainFrameSwap(); 165 root_->ResetForNewProcess();
166 }
167
168 void FrameTree::RenderProcessGone(RenderViewHost* render_view_host) {
169 // Walk the full tree looking for nodes that may be affected. Once a frame
170 // crashes, all of its child FrameTreeNodes go away.
171 // Note that the helper function may call ResetForNewProcess on a node, which
172 // clears its children before we iterate over them. That's ok, because
173 // ForEach does not add a node's children to the queue until after visiting
174 // the node itself.
175 ForEach(base::Bind(&ResetNodesForNewProcess, render_view_host));
157 } 176 }
158 177
159 RenderFrameHostImpl* FrameTree::GetMainFrame() const { 178 RenderFrameHostImpl* FrameTree::GetMainFrame() const {
160 return root_->current_frame_host(); 179 return root_->current_frame_host();
161 } 180 }
162 181
163 void FrameTree::SetFrameRemoveListener( 182 void FrameTree::SetFrameRemoveListener(
164 const base::Callback<void(RenderViewHostImpl*, int64)>& on_frame_removed) { 183 const base::Callback<void(RenderViewHostImpl*, int64)>& on_frame_removed) {
165 on_frame_removed_ = on_frame_removed; 184 on_frame_removed_ = on_frame_removed;
166 } 185 }
(...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after
268 } 287 }
269 } 288 }
270 289
271 FrameTreeNode* FrameTree::FindByFrameID(int64 frame_id) { 290 FrameTreeNode* FrameTree::FindByFrameID(int64 frame_id) {
272 FrameTreeNode* node = NULL; 291 FrameTreeNode* node = NULL;
273 ForEach(base::Bind(&FrameTreeNodeForFrameId, frame_id, &node)); 292 ForEach(base::Bind(&FrameTreeNodeForFrameId, frame_id, &node));
274 return node; 293 return node;
275 } 294 }
276 295
277 } // namespace content 296 } // namespace content
OLDNEW
« no previous file with comments | « trunk/src/content/browser/frame_host/frame_tree.h ('k') | trunk/src/content/browser/frame_host/frame_tree_node.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698