OLD | NEW |
1 // Copyright 2012 The Chromium Authors. All rights reserved. | 1 // Copyright 2012 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 // Represents the browser side of the browser <--> renderer communication | 5 // Represents the browser side of the browser <--> renderer communication |
6 // channel. There will be one RenderProcessHost per renderer process. | 6 // channel. There will be one RenderProcessHost per renderer process. |
7 | 7 |
8 #include "content/browser/renderer_host/render_process_host_impl.h" | 8 #include "content/browser/renderer_host/render_process_host_impl.h" |
9 | 9 |
10 #include <algorithm> | 10 #include <algorithm> |
(...skipping 433 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
444 } | 444 } |
445 | 445 |
446 private: | 446 private: |
447 std::unique_ptr<std::map<int, SessionStorageNamespaceMap>> | 447 std::unique_ptr<std::map<int, SessionStorageNamespaceMap>> |
448 session_storage_namespaces_awaiting_close_; | 448 session_storage_namespaces_awaiting_close_; |
449 DISALLOW_COPY_AND_ASSIGN(SessionStorageHolder); | 449 DISALLOW_COPY_AND_ASSIGN(SessionStorageHolder); |
450 }; | 450 }; |
451 | 451 |
452 void CreateMemoryCoordinatorHandle( | 452 void CreateMemoryCoordinatorHandle( |
453 int render_process_id, | 453 int render_process_id, |
| 454 const service_manager::BindSourceInfo& source_info, |
454 mojom::MemoryCoordinatorHandleRequest request) { | 455 mojom::MemoryCoordinatorHandleRequest request) { |
455 MemoryCoordinatorImpl::GetInstance()->CreateHandle(render_process_id, | 456 MemoryCoordinatorImpl::GetInstance()->CreateHandle(render_process_id, |
456 std::move(request)); | 457 std::move(request)); |
457 } | 458 } |
458 | 459 |
459 // Forwards service requests to Service Manager since the renderer cannot launch | 460 // Forwards service requests to Service Manager since the renderer cannot launch |
460 // out-of-process services on is own. | 461 // out-of-process services on is own. |
461 template <typename R> | 462 template <typename R> |
462 void ForwardShapeDetectionRequest(R request) { | 463 void ForwardShapeDetectionRequest(const service_manager::BindSourceInfo&, |
| 464 R request) { |
| 465 // TODO(beng): This should really be using the per-profile connector. |
463 service_manager::Connector* connector = | 466 service_manager::Connector* connector = |
464 ServiceManagerConnection::GetForProcess()->GetConnector(); | 467 ServiceManagerConnection::GetForProcess()->GetConnector(); |
465 connector->BindInterface(shape_detection::mojom::kServiceName, | 468 connector->BindInterface(shape_detection::mojom::kServiceName, |
466 std::move(request)); | 469 std::move(request)); |
467 } | 470 } |
468 | 471 |
469 class WorkerURLLoaderFactoryProviderImpl | 472 class WorkerURLLoaderFactoryProviderImpl |
470 : public mojom::WorkerURLLoaderFactoryProvider { | 473 : public mojom::WorkerURLLoaderFactoryProvider { |
471 public: | 474 public: |
472 static void Create( | 475 static void Create( |
473 int render_process_id, | 476 int render_process_id, |
474 scoped_refptr<ResourceMessageFilter> resource_message_filter, | 477 scoped_refptr<ResourceMessageFilter> resource_message_filter, |
475 scoped_refptr<ServiceWorkerContextWrapper> service_worker_context, | 478 scoped_refptr<ServiceWorkerContextWrapper> service_worker_context, |
| 479 const service_manager::BindSourceInfo& source_info, |
476 mojom::WorkerURLLoaderFactoryProviderRequest request) { | 480 mojom::WorkerURLLoaderFactoryProviderRequest request) { |
477 DCHECK(base::FeatureList::IsEnabled(features::kOffMainThreadFetch)); | 481 DCHECK(base::FeatureList::IsEnabled(features::kOffMainThreadFetch)); |
478 mojo::MakeStrongBinding( | 482 mojo::MakeStrongBinding( |
479 base::MakeUnique<WorkerURLLoaderFactoryProviderImpl>( | 483 base::MakeUnique<WorkerURLLoaderFactoryProviderImpl>( |
480 render_process_id, resource_message_filter->GetWeakPtr(), | 484 render_process_id, resource_message_filter->GetWeakPtr(), |
481 std::move(service_worker_context)), | 485 std::move(service_worker_context)), |
482 std::move(request)); | 486 std::move(request)); |
483 } | 487 } |
484 WorkerURLLoaderFactoryProviderImpl( | 488 WorkerURLLoaderFactoryProviderImpl( |
485 int render_process_id, | 489 int render_process_id, |
(...skipping 843 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1329 scoped_refptr<ServiceWorkerContextWrapper> service_worker_context( | 1333 scoped_refptr<ServiceWorkerContextWrapper> service_worker_context( |
1330 static_cast<ServiceWorkerContextWrapper*>( | 1334 static_cast<ServiceWorkerContextWrapper*>( |
1331 storage_partition_impl_->GetServiceWorkerContext())); | 1335 storage_partition_impl_->GetServiceWorkerContext())); |
1332 registry->AddInterface( | 1336 registry->AddInterface( |
1333 base::Bind(&WorkerURLLoaderFactoryProviderImpl::Create, GetID(), | 1337 base::Bind(&WorkerURLLoaderFactoryProviderImpl::Create, GetID(), |
1334 resource_message_filter_, service_worker_context)); | 1338 resource_message_filter_, service_worker_context)); |
1335 } | 1339 } |
1336 | 1340 |
1337 // This is to support usage of WebSockets in cases in which there is no | 1341 // This is to support usage of WebSockets in cases in which there is no |
1338 // associated RenderFrame (e.g., Shared Workers). | 1342 // associated RenderFrame (e.g., Shared Workers). |
1339 AddUIThreadInterface( | 1343 AddUIThreadInterface(registry.get(), |
1340 registry.get(), base::Bind(&WebSocketManager::CreateWebSocket, GetID(), | 1344 base::Bind(&WebSocketManager::CreateWebSocket, GetID(), |
1341 MSG_ROUTING_NONE)); | 1345 MSG_ROUTING_NONE)); |
1342 | 1346 |
1343 // Chrome browser process only provides DiscardableSharedMemory service when | 1347 // Chrome browser process only provides DiscardableSharedMemory service when |
1344 // Chrome is not running in mus+ash. | 1348 // Chrome is not running in mus+ash. |
1345 if (!service_manager::ServiceManagerIsRemote()) { | 1349 if (!service_manager::ServiceManagerIsRemote()) { |
1346 discardable_memory::DiscardableSharedMemoryManager* manager = | 1350 discardable_memory::DiscardableSharedMemoryManager* manager = |
1347 BrowserMainLoop::GetInstance()->discardable_shared_memory_manager(); | 1351 BrowserMainLoop::GetInstance()->discardable_shared_memory_manager(); |
1348 registry->AddInterface( | 1352 registry->AddInterface( |
1349 base::Bind(&discardable_memory::DiscardableSharedMemoryManager::Bind, | 1353 base::Bind(&discardable_memory::DiscardableSharedMemoryManager::Bind, |
1350 base::Unretained(manager))); | 1354 base::Unretained(manager))); |
1351 } | 1355 } |
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1394 void RenderProcessHostImpl::GetAssociatedInterface( | 1398 void RenderProcessHostImpl::GetAssociatedInterface( |
1395 const std::string& name, | 1399 const std::string& name, |
1396 mojom::AssociatedInterfaceAssociatedRequest request) { | 1400 mojom::AssociatedInterfaceAssociatedRequest request) { |
1397 int32_t routing_id = | 1401 int32_t routing_id = |
1398 associated_interface_provider_bindings_.dispatch_context(); | 1402 associated_interface_provider_bindings_.dispatch_context(); |
1399 IPC::Listener* listener = listeners_.Lookup(routing_id); | 1403 IPC::Listener* listener = listeners_.Lookup(routing_id); |
1400 if (listener) | 1404 if (listener) |
1401 listener->OnAssociatedInterfaceRequest(name, request.PassHandle()); | 1405 listener->OnAssociatedInterfaceRequest(name, request.PassHandle()); |
1402 } | 1406 } |
1403 | 1407 |
1404 void RenderProcessHostImpl::CreateMusGpuRequest(ui::mojom::GpuRequest request) { | 1408 void RenderProcessHostImpl::CreateMusGpuRequest( |
| 1409 const service_manager::BindSourceInfo& source_info, |
| 1410 ui::mojom::GpuRequest request) { |
1405 DCHECK_CURRENTLY_ON(BrowserThread::IO); | 1411 DCHECK_CURRENTLY_ON(BrowserThread::IO); |
1406 if (!gpu_client_) | 1412 if (!gpu_client_) |
1407 gpu_client_.reset(new GpuClient(GetID())); | 1413 gpu_client_.reset(new GpuClient(GetID())); |
1408 gpu_client_->Add(std::move(request)); | 1414 gpu_client_->Add(std::move(request)); |
1409 } | 1415 } |
1410 | 1416 |
1411 void RenderProcessHostImpl::CreateOffscreenCanvasProvider( | 1417 void RenderProcessHostImpl::CreateOffscreenCanvasProvider( |
| 1418 const service_manager::BindSourceInfo& source_info, |
1412 blink::mojom::OffscreenCanvasProviderRequest request) { | 1419 blink::mojom::OffscreenCanvasProviderRequest request) { |
1413 DCHECK_CURRENTLY_ON(BrowserThread::UI); | 1420 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
1414 if (!offscreen_canvas_provider_) { | 1421 if (!offscreen_canvas_provider_) { |
1415 // The client id gets converted to a uint32_t in FrameSinkId. | 1422 // The client id gets converted to a uint32_t in FrameSinkId. |
1416 uint32_t renderer_client_id = base::checked_cast<uint32_t>(id_); | 1423 uint32_t renderer_client_id = base::checked_cast<uint32_t>(id_); |
1417 offscreen_canvas_provider_ = | 1424 offscreen_canvas_provider_ = |
1418 base::MakeUnique<OffscreenCanvasProviderImpl>(renderer_client_id); | 1425 base::MakeUnique<OffscreenCanvasProviderImpl>(renderer_client_id); |
1419 } | 1426 } |
1420 offscreen_canvas_provider_->Add(std::move(request)); | 1427 offscreen_canvas_provider_->Add(std::move(request)); |
1421 } | 1428 } |
1422 | 1429 |
1423 void RenderProcessHostImpl::BindFrameSinkProvider( | 1430 void RenderProcessHostImpl::BindFrameSinkProvider( |
| 1431 const service_manager::BindSourceInfo& source_info, |
1424 mojom::FrameSinkProviderRequest request) { | 1432 mojom::FrameSinkProviderRequest request) { |
1425 frame_sink_provider_.Bind(std::move(request)); | 1433 frame_sink_provider_.Bind(std::move(request)); |
1426 } | 1434 } |
1427 | 1435 |
1428 void RenderProcessHostImpl::CreateStoragePartitionService( | 1436 void RenderProcessHostImpl::CreateStoragePartitionService( |
1429 mojo::InterfaceRequest<mojom::StoragePartitionService> request) { | 1437 const service_manager::BindSourceInfo& source_info, |
| 1438 mojom::StoragePartitionServiceRequest request) { |
1430 // DO NOT REMOVE THIS COMMAND LINE CHECK WITHOUT SECURITY REVIEW! | 1439 // DO NOT REMOVE THIS COMMAND LINE CHECK WITHOUT SECURITY REVIEW! |
1431 if (base::CommandLine::ForCurrentProcess()->HasSwitch( | 1440 if (base::CommandLine::ForCurrentProcess()->HasSwitch( |
1432 switches::kMojoLocalStorage)) { | 1441 switches::kMojoLocalStorage)) { |
1433 storage_partition_impl_->Bind(std::move(request)); | 1442 storage_partition_impl_->Bind(std::move(request)); |
1434 } | 1443 } |
1435 } | 1444 } |
1436 | 1445 |
1437 int RenderProcessHostImpl::GetNextRoutingID() { | 1446 int RenderProcessHostImpl::GetNextRoutingID() { |
1438 return widget_helper_->GetNextRoutingID(); | 1447 return widget_helper_->GetNextRoutingID(); |
1439 } | 1448 } |
(...skipping 1692 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3132 LOG(ERROR) << "Terminating render process for bad Mojo message: " << error; | 3141 LOG(ERROR) << "Terminating render process for bad Mojo message: " << error; |
3133 | 3142 |
3134 // The ReceivedBadMessage call below will trigger a DumpWithoutCrashing. | 3143 // The ReceivedBadMessage call below will trigger a DumpWithoutCrashing. |
3135 // Capture the error message in a crash key value. | 3144 // Capture the error message in a crash key value. |
3136 base::debug::ScopedCrashKey error_key_value("mojo-message-error", error); | 3145 base::debug::ScopedCrashKey error_key_value("mojo-message-error", error); |
3137 bad_message::ReceivedBadMessage(render_process_id, | 3146 bad_message::ReceivedBadMessage(render_process_id, |
3138 bad_message::RPH_MOJO_PROCESS_ERROR); | 3147 bad_message::RPH_MOJO_PROCESS_ERROR); |
3139 } | 3148 } |
3140 | 3149 |
3141 } // namespace content | 3150 } // namespace content |
OLD | NEW |