| 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 c135da80d340fb2c3a90bdb3c57d138cc2fbfd91..0b3275a25ac1b7305c92fa418207391dc2fcadc0 100644
|
| --- a/content/browser/frame_host/frame_tree.cc
|
| +++ b/content/browser/frame_host/frame_tree.cc
|
| @@ -43,6 +43,15 @@ bool FrameTreeNodeForFrameId(int64 frame_id,
|
| return true;
|
| }
|
|
|
| +// Iterate over the FrameTree to reset any node affected by the loss of the
|
| +// given RenderViewHost's process.
|
| +bool ResetNodesForNewProcess(RenderViewHost* render_view_host,
|
| + FrameTreeNode* node) {
|
| + if (render_view_host == node->current_frame_host()->render_view_host())
|
| + node->ResetForNewProcess();
|
| + return true;
|
| +}
|
| +
|
| } // namespace
|
|
|
| FrameTree::FrameTree(Navigator* navigator,
|
| @@ -153,7 +162,17 @@ void FrameTree::SetFrameUrl(int64 frame_id, const GURL& url) {
|
| }
|
|
|
| void FrameTree::ResetForMainFrameSwap() {
|
| - return root_->ResetForMainFrameSwap();
|
| + root_->ResetForNewProcess();
|
| +}
|
| +
|
| +void FrameTree::RenderProcessGone(RenderViewHost* render_view_host) {
|
| + // Walk the full tree looking for nodes that may be affected. Once a frame
|
| + // crashes, all of its child FrameTreeNodes go away.
|
| + // Note that the helper function may call ResetForNewProcess on a node, which
|
| + // clears its children before we iterate over them. That's ok, because
|
| + // ForEach does not add a node's children to the queue until after visiting
|
| + // the node itself.
|
| + ForEach(base::Bind(&ResetNodesForNewProcess, render_view_host));
|
| }
|
|
|
| RenderFrameHostImpl* FrameTree::GetMainFrame() const {
|
|
|