| 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> |
| 11 #include <limits> | 11 #include <limits> |
| 12 #include <set> |
| 12 #include <utility> | 13 #include <utility> |
| 13 #include <vector> | 14 #include <vector> |
| 14 | 15 |
| 15 #include "base/base_switches.h" | 16 #include "base/base_switches.h" |
| 16 #include "base/bind.h" | 17 #include "base/bind.h" |
| 17 #include "base/bind_helpers.h" | 18 #include "base/bind_helpers.h" |
| 18 #include "base/callback.h" | 19 #include "base/callback.h" |
| 19 #include "base/command_line.h" | 20 #include "base/command_line.h" |
| 20 #include "base/debug/dump_without_crashing.h" | 21 #include "base/debug/dump_without_crashing.h" |
| 21 #include "base/feature_list.h" | 22 #include "base/feature_list.h" |
| (...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 66 #include "content/browser/dom_storage/dom_storage_context_wrapper.h" | 67 #include "content/browser/dom_storage/dom_storage_context_wrapper.h" |
| 67 #include "content/browser/dom_storage/dom_storage_message_filter.h" | 68 #include "content/browser/dom_storage/dom_storage_message_filter.h" |
| 68 #include "content/browser/fileapi/fileapi_message_filter.h" | 69 #include "content/browser/fileapi/fileapi_message_filter.h" |
| 69 #include "content/browser/frame_host/render_frame_message_filter.h" | 70 #include "content/browser/frame_host/render_frame_message_filter.h" |
| 70 #include "content/browser/gpu/browser_gpu_memory_buffer_manager.h" | 71 #include "content/browser/gpu/browser_gpu_memory_buffer_manager.h" |
| 71 #include "content/browser/gpu/compositor_util.h" | 72 #include "content/browser/gpu/compositor_util.h" |
| 72 #include "content/browser/gpu/gpu_data_manager_impl.h" | 73 #include "content/browser/gpu/gpu_data_manager_impl.h" |
| 73 #include "content/browser/gpu/gpu_process_host.h" | 74 #include "content/browser/gpu/gpu_process_host.h" |
| 74 #include "content/browser/gpu/shader_disk_cache.h" | 75 #include "content/browser/gpu/shader_disk_cache.h" |
| 75 #include "content/browser/histogram_message_filter.h" | 76 #include "content/browser/histogram_message_filter.h" |
| 77 #include "content/browser/indexed_db/database_factory_impl.h" |
| 78 #include "content/browser/indexed_db/database_impl.h" |
| 76 #include "content/browser/indexed_db/indexed_db_context_impl.h" | 79 #include "content/browser/indexed_db/indexed_db_context_impl.h" |
| 77 #include "content/browser/indexed_db/indexed_db_dispatcher_host.h" | |
| 78 #include "content/browser/loader/resource_message_filter.h" | 80 #include "content/browser/loader/resource_message_filter.h" |
| 79 #include "content/browser/loader/resource_scheduler_filter.h" | 81 #include "content/browser/loader/resource_scheduler_filter.h" |
| 80 #include "content/browser/loader/url_loader_factory_impl.h" | 82 #include "content/browser/loader/url_loader_factory_impl.h" |
| 81 #include "content/browser/media/capture/audio_mirroring_manager.h" | 83 #include "content/browser/media/capture/audio_mirroring_manager.h" |
| 82 #include "content/browser/media/capture/image_capture_impl.h" | 84 #include "content/browser/media/capture/image_capture_impl.h" |
| 83 #include "content/browser/media/media_internals.h" | 85 #include "content/browser/media/media_internals.h" |
| 84 #include "content/browser/media/midi_host.h" | 86 #include "content/browser/media/midi_host.h" |
| 85 #include "content/browser/memory/memory_message_filter.h" | 87 #include "content/browser/memory/memory_message_filter.h" |
| 86 #include "content/browser/message_port_message_filter.h" | 88 #include "content/browser/message_port_message_filter.h" |
| 87 #include "content/browser/mime_registry_impl.h" | 89 #include "content/browser/mime_registry_impl.h" |
| (...skipping 527 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 615 channel_connected_(false), | 617 channel_connected_(false), |
| 616 sent_render_process_ready_(false), | 618 sent_render_process_ready_(false), |
| 617 #if defined(OS_ANDROID) | 619 #if defined(OS_ANDROID) |
| 618 never_signaled_(base::WaitableEvent::ResetPolicy::MANUAL, | 620 never_signaled_(base::WaitableEvent::ResetPolicy::MANUAL, |
| 619 base::WaitableEvent::InitialState::NOT_SIGNALED), | 621 base::WaitableEvent::InitialState::NOT_SIGNALED), |
| 620 #endif | 622 #endif |
| 621 weak_factory_(this) { | 623 weak_factory_(this) { |
| 622 widget_helper_ = new RenderWidgetHelper(); | 624 widget_helper_ = new RenderWidgetHelper(); |
| 623 | 625 |
| 624 ChildProcessSecurityPolicyImpl::GetInstance()->Add(GetID()); | 626 ChildProcessSecurityPolicyImpl::GetInstance()->Add(GetID()); |
| 627 database_factory_impl_ = new DatabaseFactoryImpl( |
| 628 storage_partition_impl->GetIndexedDBContext(), |
| 629 storage_partition_impl->GetURLRequestContext(), GetID()); |
| 625 | 630 |
| 626 CHECK(!BrowserMainRunner::ExitedMainMessageLoop()); | 631 CHECK(!BrowserMainRunner::ExitedMainMessageLoop()); |
| 627 RegisterHost(GetID(), this); | 632 RegisterHost(GetID(), this); |
| 628 g_all_hosts.Get().set_check_on_null_data(true); | 633 g_all_hosts.Get().set_check_on_null_data(true); |
| 629 // Initialize |child_process_activity_time_| to a reasonable value. | 634 // Initialize |child_process_activity_time_| to a reasonable value. |
| 630 mark_child_process_activity_time(); | 635 mark_child_process_activity_time(); |
| 631 | 636 |
| 632 if (!GetBrowserContext()->IsOffTheRecord() && | 637 if (!GetBrowserContext()->IsOffTheRecord() && |
| 633 !base::CommandLine::ForCurrentProcess()->HasSwitch( | 638 !base::CommandLine::ForCurrentProcess()->HasSwitch( |
| 634 switches::kDisableGpuShaderDiskCache)) { | 639 switches::kDisableGpuShaderDiskCache)) { |
| (...skipping 357 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 992 browser_context->GetResourceContext()->GetMediaDeviceIDSalt()); | 997 browser_context->GetResourceContext()->GetMediaDeviceIDSalt()); |
| 993 AddFilter(audio_renderer_host_.get()); | 998 AddFilter(audio_renderer_host_.get()); |
| 994 AddFilter( | 999 AddFilter( |
| 995 new MidiHost(GetID(), BrowserMainLoop::GetInstance()->midi_manager())); | 1000 new MidiHost(GetID(), BrowserMainLoop::GetInstance()->midi_manager())); |
| 996 AddFilter(new VideoCaptureHost(media_stream_manager)); | 1001 AddFilter(new VideoCaptureHost(media_stream_manager)); |
| 997 AddFilter(new AppCacheDispatcherHost( | 1002 AddFilter(new AppCacheDispatcherHost( |
| 998 storage_partition_impl_->GetAppCacheService(), GetID())); | 1003 storage_partition_impl_->GetAppCacheService(), GetID())); |
| 999 AddFilter(new ClipboardMessageFilter(blob_storage_context)); | 1004 AddFilter(new ClipboardMessageFilter(blob_storage_context)); |
| 1000 AddFilter(new DOMStorageMessageFilter( | 1005 AddFilter(new DOMStorageMessageFilter( |
| 1001 storage_partition_impl_->GetDOMStorageContext())); | 1006 storage_partition_impl_->GetDOMStorageContext())); |
| 1002 AddFilter(new IndexedDBDispatcherHost( | |
| 1003 GetID(), storage_partition_impl_->GetURLRequestContext(), | |
| 1004 storage_partition_impl_->GetIndexedDBContext(), | |
| 1005 blob_storage_context.get())); | |
| 1006 | 1007 |
| 1007 #if defined(ENABLE_WEBRTC) | 1008 #if defined(ENABLE_WEBRTC) |
| 1008 peer_connection_tracker_host_ = new PeerConnectionTrackerHost( | 1009 peer_connection_tracker_host_ = new PeerConnectionTrackerHost( |
| 1009 GetID(), webrtc_eventlog_host_.GetWeakPtr()); | 1010 GetID(), webrtc_eventlog_host_.GetWeakPtr()); |
| 1010 AddFilter(peer_connection_tracker_host_.get()); | 1011 AddFilter(peer_connection_tracker_host_.get()); |
| 1011 AddFilter(new MediaStreamDispatcherHost( | 1012 AddFilter(new MediaStreamDispatcherHost( |
| 1012 GetID(), browser_context->GetResourceContext()->GetMediaDeviceIDSalt(), | 1013 GetID(), browser_context->GetResourceContext()->GetMediaDeviceIDSalt(), |
| 1013 media_stream_manager)); | 1014 media_stream_manager)); |
| 1014 AddFilter(new MediaStreamTrackMetricsHost()); | 1015 AddFilter(new MediaStreamTrackMetricsHost()); |
| 1015 #endif | 1016 #endif |
| (...skipping 157 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1173 registry->AddInterface(base::Bind(&DeviceOrientationAbsoluteHost::Create)); | 1174 registry->AddInterface(base::Bind(&DeviceOrientationAbsoluteHost::Create)); |
| 1174 registry->AddInterface( | 1175 registry->AddInterface( |
| 1175 base::Bind(&URLLoaderFactoryImpl::Create, resource_message_filter_)); | 1176 base::Bind(&URLLoaderFactoryImpl::Create, resource_message_filter_)); |
| 1176 | 1177 |
| 1177 // This is to support usage of WebSockets in cases in which there is no | 1178 // This is to support usage of WebSockets in cases in which there is no |
| 1178 // associated RenderFrame (e.g., Shared Workers). | 1179 // associated RenderFrame (e.g., Shared Workers). |
| 1179 registry->AddInterface( | 1180 registry->AddInterface( |
| 1180 base::Bind(&WebSocketManager::CreateWebSocket, GetID(), MSG_ROUTING_NONE), | 1181 base::Bind(&WebSocketManager::CreateWebSocket, GetID(), MSG_ROUTING_NONE), |
| 1181 ui_task_runner); | 1182 ui_task_runner); |
| 1182 | 1183 |
| 1184 registry->AddInterface( |
| 1185 base::Bind(&RenderProcessHostImpl::CreateIndexedDBFactoryService, |
| 1186 base::Unretained(this)), |
| 1187 storage_partition_impl_->GetIndexedDBContext()->TaskRunner()); |
| 1188 |
| 1183 GetContentClient()->browser()->ExposeInterfacesToRenderer(registry.get(), | 1189 GetContentClient()->browser()->ExposeInterfacesToRenderer(registry.get(), |
| 1184 this); | 1190 this); |
| 1185 | 1191 |
| 1186 MojoShellConnection* mojo_shell_connection = | 1192 MojoShellConnection* mojo_shell_connection = |
| 1187 BrowserContext::GetMojoShellConnectionFor(browser_context_); | 1193 BrowserContext::GetMojoShellConnectionFor(browser_context_); |
| 1188 std::unique_ptr<ConnectionFilterImpl> connection_filter( | 1194 std::unique_ptr<ConnectionFilterImpl> connection_filter( |
| 1189 new ConnectionFilterImpl(mojo_child_connection_->child_identity(), | 1195 new ConnectionFilterImpl(mojo_child_connection_->child_identity(), |
| 1190 std::move(registry))); | 1196 std::move(registry))); |
| 1191 connection_filter_ = | 1197 connection_filter_ = |
| 1192 mojo_shell_connection->AddConnectionFilter(std::move(connection_filter)); | 1198 mojo_shell_connection->AddConnectionFilter(std::move(connection_filter)); |
| 1193 } | 1199 } |
| 1194 | 1200 |
| 1201 void RenderProcessHostImpl::CreateIndexedDBFactoryService( |
| 1202 mojo::InterfaceRequest<::indexed_db::mojom::DatabaseFactory> request) { |
| 1203 database_factory_impl_->Bind(std::move(request)); |
| 1204 } |
| 1205 |
| 1195 void RenderProcessHostImpl::CreateStoragePartitionService( | 1206 void RenderProcessHostImpl::CreateStoragePartitionService( |
| 1196 mojo::InterfaceRequest<mojom::StoragePartitionService> request) { | 1207 mojo::InterfaceRequest<mojom::StoragePartitionService> request) { |
| 1197 // DO NOT REMOVE THIS COMMAND LINE CHECK WITHOUT SECURITY REVIEW! | 1208 // DO NOT REMOVE THIS COMMAND LINE CHECK WITHOUT SECURITY REVIEW! |
| 1198 if (base::CommandLine::ForCurrentProcess()->HasSwitch( | 1209 if (base::CommandLine::ForCurrentProcess()->HasSwitch( |
| 1199 switches::kMojoLocalStorage)) { | 1210 switches::kMojoLocalStorage)) { |
| 1200 storage_partition_impl_->Bind(std::move(request)); | 1211 storage_partition_impl_->Bind(std::move(request)); |
| 1201 } | 1212 } |
| 1202 } | 1213 } |
| 1203 | 1214 |
| 1204 int RenderProcessHostImpl::GetNextRoutingID() { | 1215 int RenderProcessHostImpl::GetNextRoutingID() { |
| (...skipping 1633 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2838 LOG(ERROR) << "Terminating render process for bad Mojo message: " << error; | 2849 LOG(ERROR) << "Terminating render process for bad Mojo message: " << error; |
| 2839 | 2850 |
| 2840 // The ReceivedBadMessage call below will trigger a DumpWithoutCrashing. Alias | 2851 // The ReceivedBadMessage call below will trigger a DumpWithoutCrashing. Alias |
| 2841 // enough information here so that we can determine what the bad message was. | 2852 // enough information here so that we can determine what the bad message was. |
| 2842 base::debug::Alias(&error); | 2853 base::debug::Alias(&error); |
| 2843 bad_message::ReceivedBadMessage(process.get(), | 2854 bad_message::ReceivedBadMessage(process.get(), |
| 2844 bad_message::RPH_MOJO_PROCESS_ERROR); | 2855 bad_message::RPH_MOJO_PROCESS_ERROR); |
| 2845 } | 2856 } |
| 2846 | 2857 |
| 2847 } // namespace content | 2858 } // namespace content |
| OLD | NEW |