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

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

Issue 666563005: Set up Mojo connection when RenderFrameHost is reused for new RenderFrame (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Response to reviews Created 6 years, 1 month 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
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/command_line.h" 8 #include "base/command_line.h"
9 #include "base/containers/hash_tables.h" 9 #include "base/containers/hash_tables.h"
10 #include "base/lazy_instance.h" 10 #include "base/lazy_instance.h"
(...skipping 191 matching lines...) Expand 10 before | Expand all | Expand 10 after
202 RenderFrameHostID(GetProcess()->GetID(), routing_id_), 202 RenderFrameHostID(GetProcess()->GetID(), routing_id_),
203 this)); 203 this));
204 204
205 if (is_swapped_out) { 205 if (is_swapped_out) {
206 rfh_state_ = STATE_SWAPPED_OUT; 206 rfh_state_ = STATE_SWAPPED_OUT;
207 } else { 207 } else {
208 rfh_state_ = STATE_DEFAULT; 208 rfh_state_ = STATE_DEFAULT;
209 GetSiteInstance()->increment_active_frame_count(); 209 GetSiteInstance()->increment_active_frame_count();
210 } 210 }
211 211
212 if (GetProcess()->GetServiceRegistry()) { 212 SetUpMojoIfNeeded();
213 RenderFrameSetupPtr setup;
214 GetProcess()->GetServiceRegistry()->ConnectToRemoteService(&setup);
215 mojo::ServiceProviderPtr service_provider;
216 setup->GetServiceProviderForFrame(routing_id_,
217 mojo::GetProxy(&service_provider));
218 service_registry_.BindRemoteServiceProvider(
219 service_provider.PassMessagePipe());
220
221 #if defined(OS_ANDROID)
222 service_registry_android_.reset(
223 new ServiceRegistryAndroid(&service_registry_));
224 #endif
225 }
226 213
227 swapout_event_monitor_timeout_.reset(new TimeoutMonitor(base::Bind( 214 swapout_event_monitor_timeout_.reset(new TimeoutMonitor(base::Bind(
228 &RenderFrameHostImpl::OnSwappedOut, weak_ptr_factory_.GetWeakPtr()))); 215 &RenderFrameHostImpl::OnSwappedOut, weak_ptr_factory_.GetWeakPtr())));
229 } 216 }
230 217
231 RenderFrameHostImpl::~RenderFrameHostImpl() { 218 RenderFrameHostImpl::~RenderFrameHostImpl() {
232 GetProcess()->RemoveRoute(routing_id_); 219 GetProcess()->RemoveRoute(routing_id_);
233 g_routing_id_frame_map.Get().erase( 220 g_routing_id_frame_map.Get().erase(
234 RenderFrameHostID(GetProcess()->GetID(), routing_id_)); 221 RenderFrameHostID(GetProcess()->GetID(), routing_id_));
235 222
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after
315 Send(new FrameMsg_JavaScriptExecuteRequestForTests(routing_id_, 302 Send(new FrameMsg_JavaScriptExecuteRequestForTests(routing_id_,
316 javascript, 303 javascript,
317 0, false)); 304 0, false));
318 } 305 }
319 306
320 RenderViewHost* RenderFrameHostImpl::GetRenderViewHost() { 307 RenderViewHost* RenderFrameHostImpl::GetRenderViewHost() {
321 return render_view_host_; 308 return render_view_host_;
322 } 309 }
323 310
324 ServiceRegistry* RenderFrameHostImpl::GetServiceRegistry() { 311 ServiceRegistry* RenderFrameHostImpl::GetServiceRegistry() {
325 return &service_registry_; 312 return service_registry_.get();
326 } 313 }
327 314
328 bool RenderFrameHostImpl::Send(IPC::Message* message) { 315 bool RenderFrameHostImpl::Send(IPC::Message* message) {
329 if (IPC_MESSAGE_ID_CLASS(message->type()) == InputMsgStart) { 316 if (IPC_MESSAGE_ID_CLASS(message->type()) == InputMsgStart) {
330 return render_view_host_->input_router()->SendInput( 317 return render_view_host_->input_router()->SendInput(
331 make_scoped_ptr(message)); 318 make_scoped_ptr(message));
332 } 319 }
333 320
334 // Route IPCs through the RenderFrameProxyHost when in swapped out state. 321 // Route IPCs through the RenderFrameProxyHost when in swapped out state.
335 // Note: For subframes in --site-per-process mode, we don't use swapped out 322 // Note: For subframes in --site-per-process mode, we don't use swapped out
(...skipping 1099 matching lines...) Expand 10 before | Expand all | Expand 10 after
1435 routing_id_, response->head, body->GetURL(), 1422 routing_id_, response->head, body->GetURL(),
1436 common_params, commit_params)); 1423 common_params, commit_params));
1437 // TODO(clamy): Check if we should start the throbber for non javascript urls 1424 // TODO(clamy): Check if we should start the throbber for non javascript urls
1438 // here. 1425 // here.
1439 1426
1440 // TODO(clamy): Release the stream handle once the renderer has finished 1427 // TODO(clamy): Release the stream handle once the renderer has finished
1441 // reading it. 1428 // reading it.
1442 stream_handle_ = body.Pass(); 1429 stream_handle_ = body.Pass();
1443 } 1430 }
1444 1431
1432 void RenderFrameHostImpl::SetUpMojoIfNeeded() {
1433 if (service_registry_.get())
1434 return;
1435
1436 service_registry_.reset(new ServiceRegistryImpl());
1437 if (!GetProcess()->GetServiceRegistry())
1438 return;
1439
1440 RenderFrameSetupPtr setup;
1441 GetProcess()->GetServiceRegistry()->ConnectToRemoteService(&setup);
1442 mojo::ServiceProviderPtr service_provider;
1443 setup->GetServiceProviderForFrame(routing_id_,
1444 mojo::GetProxy(&service_provider));
1445 service_registry_->BindRemoteServiceProvider(
1446 service_provider.PassMessagePipe());
1447
1448 #if defined(OS_ANDROID)
1449 service_registry_android_.reset(
1450 new ServiceRegistryAndroid(service_registry_.get()));
1451 #endif
1452 }
1453
1454 void RenderFrameHostImpl::InvalidateMojoConnection() {
1455 service_registry_.reset();
1456 #if defined(OS_ANDROID)
1457 service_registry_android_.reset();
qsr 2014/10/27 11:45:41 This is not that big a deal, but this should be re
1458 #endif
1459 }
1460
1445 void RenderFrameHostImpl::PlatformNotificationPermissionRequestDone( 1461 void RenderFrameHostImpl::PlatformNotificationPermissionRequestDone(
1446 int request_id, blink::WebNotificationPermission permission) { 1462 int request_id, blink::WebNotificationPermission permission) {
1447 Send(new PlatformNotificationMsg_PermissionRequestComplete( 1463 Send(new PlatformNotificationMsg_PermissionRequestComplete(
1448 routing_id_, request_id, permission)); 1464 routing_id_, request_id, permission));
1449 } 1465 }
1450 1466
1451 void RenderFrameHostImpl::UpdateCrossProcessIframeAccessibility( 1467 void RenderFrameHostImpl::UpdateCrossProcessIframeAccessibility(
1452 const std::map<int32, int> node_to_frame_routing_id_map) { 1468 const std::map<int32, int> node_to_frame_routing_id_map) {
1453 std::map<int32, int>::const_iterator iter; 1469 std::map<int32, int>::const_iterator iter;
1454 for (iter = node_to_frame_routing_id_map.begin(); 1470 for (iter = node_to_frame_routing_id_map.begin();
(...skipping 142 matching lines...) Expand 10 before | Expand all | Expand 10 after
1597 // Clear any state if a pending navigation is canceled or preempted. 1613 // Clear any state if a pending navigation is canceled or preempted.
1598 if (suspended_nav_params_) 1614 if (suspended_nav_params_)
1599 suspended_nav_params_.reset(); 1615 suspended_nav_params_.reset();
1600 1616
1601 TRACE_EVENT_ASYNC_END0("navigation", 1617 TRACE_EVENT_ASYNC_END0("navigation",
1602 "RenderFrameHostImpl navigation suspended", this); 1618 "RenderFrameHostImpl navigation suspended", this);
1603 navigations_suspended_ = false; 1619 navigations_suspended_ = false;
1604 } 1620 }
1605 1621
1606 } // namespace content 1622 } // namespace content
OLDNEW
« no previous file with comments | « content/browser/frame_host/render_frame_host_impl.h ('k') | content/browser/frame_host/render_frame_host_manager.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698