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

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

Issue 404613005: Start using RenderFrameProxyHost objects. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Compile fix Created 6 years, 4 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/render_frame_host_impl.h" 5 #include "content/browser/frame_host/render_frame_host_impl.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/containers/hash_tables.h" 8 #include "base/containers/hash_tables.h"
9 #include "base/lazy_instance.h" 9 #include "base/lazy_instance.h"
10 #include "base/metrics/user_metrics_action.h" 10 #include "base/metrics/user_metrics_action.h"
(...skipping 125 matching lines...) Expand 10 before | Expand all | Expand 10 after
136 } 136 }
137 137
138 } // namespace 138 } // namespace
139 139
140 RenderFrameHost* RenderFrameHost::FromID(int render_process_id, 140 RenderFrameHost* RenderFrameHost::FromID(int render_process_id,
141 int render_frame_id) { 141 int render_frame_id) {
142 return RenderFrameHostImpl::FromID(render_process_id, render_frame_id); 142 return RenderFrameHostImpl::FromID(render_process_id, render_frame_id);
143 } 143 }
144 144
145 // static 145 // static
146 RenderFrameHostImpl* RenderFrameHostImpl::FromID( 146 RenderFrameHostImpl* RenderFrameHostImpl::FromID(int process_id,
147 int process_id, int routing_id) { 147 int routing_id) {
148 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 148 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
149 RoutingIDFrameMap* frames = g_routing_id_frame_map.Pointer(); 149 RoutingIDFrameMap* frames = g_routing_id_frame_map.Pointer();
150 RoutingIDFrameMap::iterator it = frames->find( 150 RoutingIDFrameMap::iterator it = frames->find(
151 RenderFrameHostID(process_id, routing_id)); 151 RenderFrameHostID(process_id, routing_id));
152 return it == frames->end() ? NULL : it->second; 152 return it == frames->end() ? NULL : it->second;
153 } 153 }
154 154
155 RenderFrameHostImpl::RenderFrameHostImpl( 155 RenderFrameHostImpl::RenderFrameHostImpl(RenderViewHostImpl* render_view_host,
156 RenderViewHostImpl* render_view_host, 156 RenderFrameHostDelegate* delegate,
157 RenderFrameHostDelegate* delegate, 157 FrameTree* frame_tree,
158 FrameTree* frame_tree, 158 FrameTreeNode* frame_tree_node,
159 FrameTreeNode* frame_tree_node, 159 int routing_id,
160 int routing_id, 160 bool is_swapped_out)
161 bool is_swapped_out)
162 : render_view_host_(render_view_host), 161 : render_view_host_(render_view_host),
163 delegate_(delegate), 162 delegate_(delegate),
164 cross_process_frame_connector_(NULL), 163 cross_process_frame_connector_(NULL),
165 render_frame_proxy_host_(NULL), 164 render_frame_proxy_host_(NULL),
166 frame_tree_(frame_tree), 165 frame_tree_(frame_tree),
167 frame_tree_node_(frame_tree_node), 166 frame_tree_node_(frame_tree_node),
168 routing_id_(routing_id), 167 routing_id_(routing_id),
169 is_swapped_out_(is_swapped_out), 168 is_swapped_out_(is_swapped_out),
169 renderer_initialized_(false),
170 weak_ptr_factory_(this) { 170 weak_ptr_factory_(this) {
171 frame_tree_->RegisterRenderFrameHost(this); 171 frame_tree_->RegisterRenderFrameHost(this);
172 GetProcess()->AddRoute(routing_id_, this); 172 GetProcess()->AddRoute(routing_id_, this);
173 g_routing_id_frame_map.Get().insert(std::make_pair( 173 g_routing_id_frame_map.Get().insert(std::make_pair(
174 RenderFrameHostID(GetProcess()->GetID(), routing_id_), 174 RenderFrameHostID(GetProcess()->GetID(), routing_id_),
175 this)); 175 this));
176 176
177 if (GetProcess()->GetServiceRegistry()) { 177 if (GetProcess()->GetServiceRegistry()) {
178 RenderFrameSetupPtr setup; 178 RenderFrameSetupPtr setup;
179 GetProcess()->GetServiceRegistry()->ConnectToRemoteService(&setup); 179 GetProcess()->GetServiceRegistry()->ConnectToRemoteService(&setup);
(...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after
267 static_cast<RenderProcessHostImpl*>(GetProcess())->EnsureMojoActivated(); 267 static_cast<RenderProcessHostImpl*>(GetProcess())->EnsureMojoActivated();
268 return &service_registry_; 268 return &service_registry_;
269 } 269 }
270 270
271 bool RenderFrameHostImpl::Send(IPC::Message* message) { 271 bool RenderFrameHostImpl::Send(IPC::Message* message) {
272 if (IPC_MESSAGE_ID_CLASS(message->type()) == InputMsgStart) { 272 if (IPC_MESSAGE_ID_CLASS(message->type()) == InputMsgStart) {
273 return render_view_host_->input_router()->SendInput( 273 return render_view_host_->input_router()->SendInput(
274 make_scoped_ptr(message)); 274 make_scoped_ptr(message));
275 } 275 }
276 276
277 if (render_view_host_->IsSwappedOut()) { 277 // Route IPCs through the RenderFrameProxyHost when in swapped out state.
278 // Note: For subframes in --site-per-process mode, we don't use swapped out
279 // RenderFrameHosts.
280 if (frame_tree_node_->IsMainFrame() && render_view_host_->IsSwappedOut()) {
278 DCHECK(render_frame_proxy_host_); 281 DCHECK(render_frame_proxy_host_);
279 return render_frame_proxy_host_->Send(message); 282 return render_frame_proxy_host_->Send(message);
280 } 283 }
281 284
282 return GetProcess()->Send(message); 285 return GetProcess()->Send(message);
283 } 286 }
284 287
285 bool RenderFrameHostImpl::OnMessageReceived(const IPC::Message &msg) { 288 bool RenderFrameHostImpl::OnMessageReceived(const IPC::Message &msg) {
286 // Filter out most IPC messages if this renderer is swapped out. 289 // Filter out most IPC messages if this renderer is swapped out.
287 // We still want to handle certain ACKs to keep our state consistent. 290 // We still want to handle certain ACKs to keep our state consistent.
(...skipping 151 matching lines...) Expand 10 before | Expand all | Expand 10 after
439 442
440 gfx::NativeViewAccessible 443 gfx::NativeViewAccessible
441 RenderFrameHostImpl::AccessibilityGetNativeViewAccessible() { 444 RenderFrameHostImpl::AccessibilityGetNativeViewAccessible() {
442 RenderWidgetHostViewBase* view = static_cast<RenderWidgetHostViewBase*>( 445 RenderWidgetHostViewBase* view = static_cast<RenderWidgetHostViewBase*>(
443 render_view_host_->GetView()); 446 render_view_host_->GetView());
444 if (view) 447 if (view)
445 return view->AccessibilityGetNativeViewAccessible(); 448 return view->AccessibilityGetNativeViewAccessible();
446 return NULL; 449 return NULL;
447 } 450 }
448 451
452 bool RenderFrameHostImpl::CreateRenderFrame(int parent_routing_id) {
453 TRACE_EVENT0("frame_host", "RenderFrameHostImpl::CreateRenderFrame");
454 DCHECK(!IsRenderFrameLive()) << "Creating frame twice";
455
456 // The process may (if we're sharing a process with another host that already
457 // initialized it) or may not (we have our own process or the old process
458 // crashed) have been initialized. Calling Init multiple times will be
459 // ignored, so this is safe.
460 if (!GetProcess()->Init())
461 return false;
462
463 DCHECK(GetProcess()->HasConnection());
464
465 renderer_initialized_ = true;
466 Send(new FrameMsg_NewFrame(routing_id_, parent_routing_id));
467
468 return true;
469 }
470
471 bool RenderFrameHostImpl::IsRenderFrameLive() {
472 return GetProcess()->HasConnection() && renderer_initialized_;
473 }
474
449 void RenderFrameHostImpl::Init() { 475 void RenderFrameHostImpl::Init() {
450 GetProcess()->ResumeRequestsForView(routing_id_); 476 GetProcess()->ResumeRequestsForView(routing_id_);
451 } 477 }
452 478
453 void RenderFrameHostImpl::OnAddMessageToConsole( 479 void RenderFrameHostImpl::OnAddMessageToConsole(
454 int32 level, 480 int32 level,
455 const base::string16& message, 481 const base::string16& message,
456 int32 line_no, 482 int32 line_no,
457 const base::string16& source_id) { 483 const base::string16& source_id) {
458 if (delegate_->AddMessageToConsole(level, message, line_no, source_id)) 484 if (delegate_->AddMessageToConsole(level, message, line_no, source_id))
(...skipping 704 matching lines...) Expand 10 before | Expand all | Expand 10 after
1163 FROM_HERE, 1189 FROM_HERE,
1164 base::Bind( 1190 base::Bind(
1165 &TransitionRequestManager::SetHasPendingTransitionRequest, 1191 &TransitionRequestManager::SetHasPendingTransitionRequest,
1166 base::Unretained(TransitionRequestManager::GetInstance()), 1192 base::Unretained(TransitionRequestManager::GetInstance()),
1167 GetProcess()->GetID(), 1193 GetProcess()->GetID(),
1168 routing_id_, 1194 routing_id_,
1169 has_pending_request)); 1195 has_pending_request));
1170 } 1196 }
1171 1197
1172 } // namespace content 1198 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698