OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 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 120 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
131 #include "content/public/common/result_codes.h" | 131 #include "content/public/common/result_codes.h" |
132 #include "content/public/common/sandboxed_process_launcher_delegate.h" | 132 #include "content/public/common/sandboxed_process_launcher_delegate.h" |
133 #include "content/public/common/url_constants.h" | 133 #include "content/public/common/url_constants.h" |
134 #include "gpu/command_buffer/service/gpu_switches.h" | 134 #include "gpu/command_buffer/service/gpu_switches.h" |
135 #include "ipc/ipc_channel.h" | 135 #include "ipc/ipc_channel.h" |
136 #include "ipc/ipc_logging.h" | 136 #include "ipc/ipc_logging.h" |
137 #include "ipc/ipc_switches.h" | 137 #include "ipc/ipc_switches.h" |
138 #include "media/base/media_switches.h" | 138 #include "media/base/media_switches.h" |
139 #include "net/url_request/url_request_context_getter.h" | 139 #include "net/url_request/url_request_context_getter.h" |
140 #include "ppapi/shared_impl/ppapi_switches.h" | 140 #include "ppapi/shared_impl/ppapi_switches.h" |
| 141 #include "third_party/skia/include/core/SkBitmap.h" |
141 #include "ui/base/ui_base_switches.h" | 142 #include "ui/base/ui_base_switches.h" |
142 #include "ui/events/event_switches.h" | 143 #include "ui/events/event_switches.h" |
143 #include "ui/gfx/switches.h" | 144 #include "ui/gfx/switches.h" |
144 #include "ui/gl/gl_switches.h" | 145 #include "ui/gl/gl_switches.h" |
145 #include "webkit/browser/fileapi/sandbox_file_system_backend.h" | 146 #include "webkit/browser/fileapi/sandbox_file_system_backend.h" |
146 #include "webkit/common/resource_type.h" | 147 #include "webkit/common/resource_type.h" |
147 | 148 |
148 #if defined(OS_WIN) | 149 #if defined(OS_WIN) |
149 #include "base/win/scoped_com_initializer.h" | 150 #include "base/win/scoped_com_initializer.h" |
150 #include "content/common/font_cache_dispatcher_win.h" | 151 #include "content/common/font_cache_dispatcher_win.h" |
151 #include "content/common/sandbox_win.h" | 152 #include "content/common/sandbox_win.h" |
152 #endif | 153 #endif |
153 | 154 |
154 #if defined(ENABLE_WEBRTC) | 155 #if defined(ENABLE_WEBRTC) |
155 #include "content/browser/media/webrtc_internals.h" | 156 #include "content/browser/media/webrtc_internals.h" |
156 #include "content/browser/renderer_host/media/media_stream_track_metrics_host.h" | 157 #include "content/browser/renderer_host/media/media_stream_track_metrics_host.h" |
157 #include "content/browser/renderer_host/media/webrtc_identity_service_host.h" | 158 #include "content/browser/renderer_host/media/webrtc_identity_service_host.h" |
158 #include "content/common/media/media_stream_messages.h" | 159 #include "content/common/media/media_stream_messages.h" |
159 #endif | 160 #endif |
160 | 161 |
161 #include "third_party/skia/include/core/SkBitmap.h" | 162 #if defined(USE_MOJO) |
| 163 #include "content/common/mojo/mojo_channel_init.h" |
| 164 #include "content/common/mojo/mojo_messages.h" |
| 165 #include "mojo/system/embedder/platform_channel_pair.h" |
| 166 #endif |
162 | 167 |
163 extern bool g_exited_main_message_loop; | 168 extern bool g_exited_main_message_loop; |
164 | 169 |
165 static const char* kSiteProcessMapKeyName = "content_site_process_map"; | 170 static const char* kSiteProcessMapKeyName = "content_site_process_map"; |
166 | 171 |
167 namespace content { | 172 namespace content { |
168 namespace { | 173 namespace { |
169 | 174 |
170 void CacheShaderInfo(int32 id, base::FilePath path) { | 175 void CacheShaderInfo(int32 id, base::FilePath path) { |
171 ShaderCacheFactory::GetInstance()->SetCacheInfo(id, path); | 176 ShaderCacheFactory::GetInstance()->SetCacheInfo(id, path); |
(...skipping 146 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
318 return ipc_fd_; | 323 return ipc_fd_; |
319 } | 324 } |
320 #endif // OS_WIN | 325 #endif // OS_WIN |
321 | 326 |
322 private: | 327 private: |
323 #if defined(OS_POSIX) | 328 #if defined(OS_POSIX) |
324 int ipc_fd_; | 329 int ipc_fd_; |
325 #endif // OS_POSIX | 330 #endif // OS_POSIX |
326 }; | 331 }; |
327 | 332 |
| 333 #if defined(USE_MOJO) |
| 334 base::PlatformFile PlatformFileFromScopedPlatformHandle( |
| 335 mojo::embedder::ScopedPlatformHandle handle) { |
| 336 #if defined(OS_POSIX) |
| 337 return handle.release().fd; |
| 338 #elif defined(OS_WIN) |
| 339 return handle.release().handle; |
| 340 #endif |
| 341 } |
| 342 #endif |
| 343 |
328 } // namespace | 344 } // namespace |
329 | 345 |
330 RendererMainThreadFactoryFunction g_renderer_main_thread_factory = NULL; | 346 RendererMainThreadFactoryFunction g_renderer_main_thread_factory = NULL; |
331 | 347 |
332 void RenderProcessHost::RegisterRendererMainThreadFactory( | 348 void RenderProcessHost::RegisterRendererMainThreadFactory( |
333 RendererMainThreadFactoryFunction create) { | 349 RendererMainThreadFactoryFunction create) { |
334 g_renderer_main_thread_factory = create; | 350 g_renderer_main_thread_factory = create; |
335 } | 351 } |
336 | 352 |
337 base::MessageLoop* g_in_process_thread; | 353 base::MessageLoop* g_in_process_thread; |
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
415 storage_partition_impl_(storage_partition_impl), | 431 storage_partition_impl_(storage_partition_impl), |
416 sudden_termination_allowed_(true), | 432 sudden_termination_allowed_(true), |
417 ignore_input_events_(false), | 433 ignore_input_events_(false), |
418 supports_browser_plugin_(supports_browser_plugin), | 434 supports_browser_plugin_(supports_browser_plugin), |
419 is_guest_(is_guest), | 435 is_guest_(is_guest), |
420 gpu_observer_registered_(false), | 436 gpu_observer_registered_(false), |
421 delayed_cleanup_needed_(false), | 437 delayed_cleanup_needed_(false), |
422 within_process_died_observer_(false), | 438 within_process_died_observer_(false), |
423 power_monitor_broadcaster_(this), | 439 power_monitor_broadcaster_(this), |
424 geolocation_dispatcher_host_(NULL), | 440 geolocation_dispatcher_host_(NULL), |
425 weak_factory_(this), | |
426 screen_orientation_dispatcher_host_(NULL), | 441 screen_orientation_dispatcher_host_(NULL), |
427 worker_ref_count_(0) { | 442 worker_ref_count_(0), |
| 443 weak_factory_(this) { |
428 widget_helper_ = new RenderWidgetHelper(); | 444 widget_helper_ = new RenderWidgetHelper(); |
429 | 445 |
430 ChildProcessSecurityPolicyImpl::GetInstance()->Add(GetID()); | 446 ChildProcessSecurityPolicyImpl::GetInstance()->Add(GetID()); |
431 | 447 |
432 CHECK(!g_exited_main_message_loop); | 448 CHECK(!g_exited_main_message_loop); |
433 RegisterHost(GetID(), this); | 449 RegisterHost(GetID(), this); |
434 g_all_hosts.Get().set_check_on_null_data(true); | 450 g_all_hosts.Get().set_check_on_null_data(true); |
435 // Initialize |child_process_activity_time_| to a reasonable value. | 451 // Initialize |child_process_activity_time_| to a reasonable value. |
436 mark_child_process_activity_time(); | 452 mark_child_process_activity_time(); |
437 | 453 |
(...skipping 1693 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2131 } | 2147 } |
2132 | 2148 |
2133 void RenderProcessHostImpl::DecrementWorkerRefCount() { | 2149 void RenderProcessHostImpl::DecrementWorkerRefCount() { |
2134 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 2150 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
2135 DCHECK_GT(worker_ref_count_, 0); | 2151 DCHECK_GT(worker_ref_count_, 0); |
2136 --worker_ref_count_; | 2152 --worker_ref_count_; |
2137 if (worker_ref_count_ == 0) | 2153 if (worker_ref_count_ == 0) |
2138 Cleanup(); | 2154 Cleanup(); |
2139 } | 2155 } |
2140 | 2156 |
| 2157 #if defined(USE_MOJO) |
| 2158 void RenderProcessHostImpl::CreateMojoChannel() { |
| 2159 if (mojo_channel_init_.get()) |
| 2160 return; |
| 2161 |
| 2162 mojo::embedder::PlatformChannelPair channel_pair; |
| 2163 mojo_channel_init_.reset(new MojoChannelInit); |
| 2164 mojo_channel_init_->Init( |
| 2165 PlatformFileFromScopedPlatformHandle(channel_pair.PassServerHandle()), |
| 2166 BrowserThread::GetMessageLoopProxyForThread(BrowserThread::IO)); |
| 2167 if (mojo_channel_init_->is_handle_valid()) { |
| 2168 base::ProcessHandle process_handle = run_renderer_in_process() ? |
| 2169 base::Process::Current().handle() : |
| 2170 child_process_launcher_->GetHandle(); |
| 2171 base::PlatformFile client_file = |
| 2172 PlatformFileFromScopedPlatformHandle(channel_pair.PassClientHandle()); |
| 2173 Send(new MojoMsg_ChannelCreated( |
| 2174 IPC::GetFileHandleForProcess(client_file, process_handle, true))); |
| 2175 } |
| 2176 } |
| 2177 #endif |
| 2178 |
2141 } // namespace content | 2179 } // namespace content |
OLD | NEW |