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

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

Issue 163703004: Revert 250823 "With --site-per-process, avoid a crash when a sub..." (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
55 } // namespace 46 } // namespace
56 47
57 FrameTree::FrameTree(Navigator* navigator, 48 FrameTree::FrameTree(Navigator* navigator,
58 RenderFrameHostDelegate* render_frame_delegate, 49 RenderFrameHostDelegate* render_frame_delegate,
59 RenderViewHostDelegate* render_view_delegate, 50 RenderViewHostDelegate* render_view_delegate,
60 RenderWidgetHostDelegate* render_widget_delegate, 51 RenderWidgetHostDelegate* render_widget_delegate,
61 RenderFrameHostManager::Delegate* manager_delegate) 52 RenderFrameHostManager::Delegate* manager_delegate)
62 : render_frame_delegate_(render_frame_delegate), 53 : render_frame_delegate_(render_frame_delegate),
63 render_view_delegate_(render_view_delegate), 54 render_view_delegate_(render_view_delegate),
64 render_widget_delegate_(render_widget_delegate), 55 render_widget_delegate_(render_widget_delegate),
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after
155 // TODO(ajwong): Should the renderer be killed here? Would there be a race on 146 // TODO(ajwong): Should the renderer be killed here? Would there be a race on
156 // shutdown that might make this case possible? 147 // shutdown that might make this case possible?
157 if (!node) 148 if (!node)
158 return; 149 return;
159 150
160 if (node) 151 if (node)
161 node->set_current_url(url); 152 node->set_current_url(url);
162 } 153 }
163 154
164 void FrameTree::ResetForMainFrameSwap() { 155 void FrameTree::ResetForMainFrameSwap() {
165 root_->ResetForNewProcess(); 156 return root_->ResetForMainFrameSwap();
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));
176 } 157 }
177 158
178 RenderFrameHostImpl* FrameTree::GetMainFrame() const { 159 RenderFrameHostImpl* FrameTree::GetMainFrame() const {
179 return root_->current_frame_host(); 160 return root_->current_frame_host();
180 } 161 }
181 162
182 void FrameTree::SetFrameRemoveListener( 163 void FrameTree::SetFrameRemoveListener(
183 const base::Callback<void(RenderViewHostImpl*, int64)>& on_frame_removed) { 164 const base::Callback<void(RenderViewHostImpl*, int64)>& on_frame_removed) {
184 on_frame_removed_ = on_frame_removed; 165 on_frame_removed_ = on_frame_removed;
185 } 166 }
(...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after
287 } 268 }
288 } 269 }
289 270
290 FrameTreeNode* FrameTree::FindByFrameID(int64 frame_id) { 271 FrameTreeNode* FrameTree::FindByFrameID(int64 frame_id) {
291 FrameTreeNode* node = NULL; 272 FrameTreeNode* node = NULL;
292 ForEach(base::Bind(&FrameTreeNodeForFrameId, frame_id, &node)); 273 ForEach(base::Bind(&FrameTreeNodeForFrameId, frame_id, &node));
293 return node; 274 return node;
294 } 275 }
295 276
296 } // namespace content 277 } // 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