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

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

Issue 26316005: Move out DidStartProvisionalLoad from WebContentsImpl into Navigator. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fixes based on Charlie's latest review. Created 7 years 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
« no previous file with comments | « content/browser/frame_host/frame_tree.h ('k') | content/browser/frame_host/frame_tree_node.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
51 : render_frame_delegate_(render_frame_delegate), 51 : render_frame_delegate_(render_frame_delegate),
52 render_view_delegate_(render_view_delegate), 52 render_view_delegate_(render_view_delegate),
53 render_widget_delegate_(render_widget_delegate), 53 render_widget_delegate_(render_widget_delegate),
54 manager_delegate_(manager_delegate), 54 manager_delegate_(manager_delegate),
55 root_(new FrameTreeNode(navigator, 55 root_(new FrameTreeNode(navigator,
56 render_frame_delegate, 56 render_frame_delegate,
57 render_view_delegate, 57 render_view_delegate,
58 render_widget_delegate, 58 render_widget_delegate,
59 manager_delegate, 59 manager_delegate,
60 FrameTreeNode::kInvalidFrameId, 60 FrameTreeNode::kInvalidFrameId,
61 std::string(), 61 std::string())) {
62 scoped_ptr<RenderFrameHostImpl>())) {
63 } 62 }
64 63
65 FrameTree::~FrameTree() { 64 FrameTree::~FrameTree() {
66 } 65 }
67 66
68 FrameTreeNode* FrameTree::FindByID(int64 frame_tree_node_id) { 67 FrameTreeNode* FrameTree::FindByID(int64 frame_tree_node_id) {
69 FrameTreeNode* node = NULL; 68 FrameTreeNode* node = NULL;
70 ForEach(base::Bind(&FrameTreeNodeForId, frame_tree_node_id, &node)); 69 ForEach(base::Bind(&FrameTreeNodeForId, frame_tree_node_id, &node));
71 return node; 70 return node;
72 } 71 }
(...skipping 25 matching lines...) Expand all
98 void FrameTree::AddFrame(int render_frame_host_id, 97 void FrameTree::AddFrame(int render_frame_host_id,
99 int64 parent_frame_id, 98 int64 parent_frame_id,
100 int64 frame_id, 99 int64 frame_id,
101 const std::string& frame_name) { 100 const std::string& frame_name) {
102 FrameTreeNode* parent = FindByFrameID(parent_frame_id); 101 FrameTreeNode* parent = FindByFrameID(parent_frame_id);
103 // TODO(ajwong): Should the renderer be killed here? Would there be a race on 102 // TODO(ajwong): Should the renderer be killed here? Would there be a race on
104 // shutdown that might make this case possible? 103 // shutdown that might make this case possible?
105 if (!parent) 104 if (!parent)
106 return; 105 return;
107 106
108 parent->AddChild(CreateNode(frame_id, frame_name, render_frame_host_id, 107 parent->AddChild(
109 parent->navigator(), 108 CreateNode(frame_id, frame_name, render_frame_host_id, parent));
110 parent->render_frame_host()->GetProcess()));
111 } 109 }
112 110
113 void FrameTree::RemoveFrame(int64 parent_frame_id, int64 frame_id) { 111 void FrameTree::RemoveFrame(RenderFrameHostImpl* render_frame_host,
112 int64 parent_frame_id,
113 int64 frame_id) {
114 // If switches::kSitePerProcess is not specified, then the FrameTree only 114 // If switches::kSitePerProcess is not specified, then the FrameTree only
115 // contains a node for the root element. However, even in this case 115 // contains a node for the root element. However, even in this case
116 // frame detachments need to be broadcast outwards. 116 // frame detachments need to be broadcast outwards.
117 // 117 //
118 // TODO(ajwong): Move this below the |parent| check after the FrameTree is 118 // TODO(ajwong): Move this below the |parent| check after the FrameTree is
119 // guaranteed to be correctly populated even without the 119 // guaranteed to be correctly populated even without the
120 // switches::kSitePerProcess flag. 120 // switches::kSitePerProcess flag.
121 FrameTreeNode* parent = FindByFrameID(parent_frame_id); 121 FrameTreeNode* parent = FindByFrameID(parent_frame_id);
122 FrameTreeNode* child = FindByFrameID(frame_id); 122 FrameTreeNode* child = FindByFrameID(frame_id);
123 if (!on_frame_removed_.is_null()) { 123 if (!on_frame_removed_.is_null()) {
124 on_frame_removed_.Run( 124 on_frame_removed_.Run(
125 root_->render_frame_host()->render_view_host(), frame_id); 125 render_frame_host->render_view_host(), frame_id);
126 } 126 }
127 127
128 // TODO(ajwong): Should the renderer be killed here? Would there be a race on 128 // TODO(ajwong): Should the renderer be killed here? Would there be a race on
129 // shutdown that might make this case possible? 129 // shutdown that might make this case possible?
130 if (!parent || !child) 130 if (!parent || !child)
131 return; 131 return;
132 132
133 parent->RemoveChild(child); 133 parent->RemoveChild(child);
134 } 134 }
135 135
(...skipping 24 matching lines...) Expand all
160 FrameTreeNode* FrameTree::FindByFrameID(int64 frame_id) { 160 FrameTreeNode* FrameTree::FindByFrameID(int64 frame_id) {
161 FrameTreeNode* node = NULL; 161 FrameTreeNode* node = NULL;
162 ForEach(base::Bind(&FrameTreeNodeForFrameId, frame_id, &node)); 162 ForEach(base::Bind(&FrameTreeNodeForFrameId, frame_id, &node));
163 return node; 163 return node;
164 } 164 }
165 165
166 scoped_ptr<FrameTreeNode> FrameTree::CreateNode( 166 scoped_ptr<FrameTreeNode> FrameTree::CreateNode(
167 int64 frame_id, 167 int64 frame_id,
168 const std::string& frame_name, 168 const std::string& frame_name,
169 int render_frame_host_id, 169 int render_frame_host_id,
170 Navigator* navigator, 170 FrameTreeNode* parent_node) {
171 RenderProcessHost* render_process_host) { 171 scoped_ptr<FrameTreeNode> frame_tree_node(new FrameTreeNode(
172 parent_node->navigator(), render_frame_delegate_, render_view_delegate_,
173 render_widget_delegate_, manager_delegate_, frame_id, frame_name));
174
172 scoped_ptr<RenderFrameHostImpl> render_frame_host( 175 scoped_ptr<RenderFrameHostImpl> render_frame_host(
173 RenderFrameHostFactory::Create( 176 RenderFrameHostFactory::Create(
174 root_->render_frame_host()->render_view_host(), 177 parent_node->render_frame_host()->render_view_host(),
175 root_->render_frame_host()->delegate(), 178 parent_node->render_frame_host()->delegate(),
176 this, 179 this,
180 frame_tree_node.get(),
177 render_frame_host_id, 181 render_frame_host_id,
178 false)); 182 false));
179 183
180 return make_scoped_ptr(new FrameTreeNode(navigator, 184 frame_tree_node->set_render_frame_host(render_frame_host.release(), true);
181 render_frame_delegate_, render_view_delegate_, render_widget_delegate_, 185 return frame_tree_node.Pass();
182 manager_delegate_, frame_id, frame_name, render_frame_host.Pass()));
183 } 186 }
184 187
185 } // namespace content 188 } // namespace content
OLDNEW
« no previous file with comments | « content/browser/frame_host/frame_tree.h ('k') | content/browser/frame_host/frame_tree_node.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698