| OLD | NEW |
| 1 // Copyright (c) 2006-2009 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2006-2009 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 "chrome/browser/renderer_host/browser_render_process_host.h" | 8 #include "chrome/browser/renderer_host/browser_render_process_host.h" |
| 9 | 9 |
| 10 #include "build/build_config.h" | 10 #include "build/build_config.h" |
| 11 | 11 |
| 12 #include <algorithm> | 12 #include <algorithm> |
| 13 | 13 |
| 14 #include "app/app_switches.h" | 14 #include "app/app_switches.h" |
| 15 #if defined(OS_WIN) | 15 #if defined(OS_WIN) |
| 16 #include "app/win_util.h" | 16 #include "app/win_util.h" |
| 17 #endif | 17 #endif |
| 18 #include "base/command_line.h" | 18 #include "base/command_line.h" |
| 19 #include "base/linked_ptr.h" | 19 #include "base/linked_ptr.h" |
| 20 #include "base/logging.h" | 20 #include "base/logging.h" |
| 21 #include "base/path_service.h" | 21 #include "base/path_service.h" |
| 22 #include "base/process_util.h" | 22 #include "base/process_util.h" |
| 23 #include "base/rand_util.h" | 23 #include "base/rand_util.h" |
| 24 #include "base/scoped_ptr.h" | 24 #include "base/scoped_ptr.h" |
| 25 #include "base/shared_memory.h" | 25 #include "base/shared_memory.h" |
| 26 #include "base/singleton.h" | 26 #include "base/singleton.h" |
| 27 #include "base/string_util.h" | 27 #include "base/string_util.h" |
| 28 #include "base/thread.h" | 28 #include "base/thread.h" |
| 29 #include "chrome/browser/browser_process.h" | 29 #include "chrome/browser/browser_process.h" |
| 30 #include "chrome/browser/child_process_security_policy.h" |
| 30 #include "chrome/browser/extensions/extension_message_service.h" | 31 #include "chrome/browser/extensions/extension_message_service.h" |
| 31 #include "chrome/browser/extensions/user_script_master.h" | 32 #include "chrome/browser/extensions/user_script_master.h" |
| 32 #include "chrome/browser/history/history.h" | 33 #include "chrome/browser/history/history.h" |
| 33 #include "chrome/browser/plugin_service.h" | 34 #include "chrome/browser/plugin_service.h" |
| 34 #include "chrome/browser/profile.h" | 35 #include "chrome/browser/profile.h" |
| 35 #include "chrome/browser/renderer_host/render_view_host.h" | 36 #include "chrome/browser/renderer_host/render_view_host.h" |
| 36 #include "chrome/browser/renderer_host/render_widget_helper.h" | 37 #include "chrome/browser/renderer_host/render_widget_helper.h" |
| 37 #include "chrome/browser/renderer_host/render_widget_host.h" | 38 #include "chrome/browser/renderer_host/render_widget_host.h" |
| 38 #include "chrome/browser/renderer_host/renderer_security_policy.h" | |
| 39 #include "chrome/browser/renderer_host/resource_message_filter.h" | 39 #include "chrome/browser/renderer_host/resource_message_filter.h" |
| 40 #include "chrome/browser/renderer_host/web_cache_manager.h" | 40 #include "chrome/browser/renderer_host/web_cache_manager.h" |
| 41 #include "chrome/browser/visitedlink_master.h" | 41 #include "chrome/browser/visitedlink_master.h" |
| 42 #include "chrome/common/chrome_switches.h" | 42 #include "chrome/common/chrome_switches.h" |
| 43 #include "chrome/common/child_process_info.h" | 43 #include "chrome/common/child_process_info.h" |
| 44 #include "chrome/common/logging_chrome.h" | 44 #include "chrome/common/logging_chrome.h" |
| 45 #include "chrome/common/notification_service.h" | 45 #include "chrome/common/notification_service.h" |
| 46 #include "chrome/common/process_watcher.h" | 46 #include "chrome/common/process_watcher.h" |
| 47 #include "chrome/common/render_messages.h" | 47 #include "chrome/common/render_messages.h" |
| 48 #include "chrome/common/result_codes.h" | 48 #include "chrome/common/result_codes.h" |
| (...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 148 | 148 |
| 149 // Note: When we create the BrowserRenderProcessHost, it's technically | 149 // Note: When we create the BrowserRenderProcessHost, it's technically |
| 150 // backgrounded, because it has no visible listeners. But the process | 150 // backgrounded, because it has no visible listeners. But the process |
| 151 // doesn't actually exist yet, so we'll Background it later, after | 151 // doesn't actually exist yet, so we'll Background it later, after |
| 152 // creation. | 152 // creation. |
| 153 } | 153 } |
| 154 | 154 |
| 155 BrowserRenderProcessHost::~BrowserRenderProcessHost() { | 155 BrowserRenderProcessHost::~BrowserRenderProcessHost() { |
| 156 if (pid() >= 0) { | 156 if (pid() >= 0) { |
| 157 WebCacheManager::GetInstance()->Remove(pid()); | 157 WebCacheManager::GetInstance()->Remove(pid()); |
| 158 RendererSecurityPolicy::GetInstance()->Remove(pid()); | 158 ChildProcessSecurityPolicy::GetInstance()->Remove(pid()); |
| 159 } | 159 } |
| 160 | 160 |
| 161 // We may have some unsent messages at this point, but that's OK. | 161 // We may have some unsent messages at this point, but that's OK. |
| 162 channel_.reset(); | 162 channel_.reset(); |
| 163 | 163 |
| 164 // Destroy the AudioRendererHost properly. | 164 // Destroy the AudioRendererHost properly. |
| 165 if (audio_renderer_host_.get()) | 165 if (audio_renderer_host_.get()) |
| 166 audio_renderer_host_->Destroy(); | 166 audio_renderer_host_->Destroy(); |
| 167 | 167 |
| 168 if (process_.handle() && !run_renderer_in_process()) { | 168 if (process_.handle() && !run_renderer_in_process()) { |
| (...skipping 166 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 335 if (!process) { | 335 if (!process) { |
| 336 channel_.reset(); | 336 channel_.reset(); |
| 337 return false; | 337 return false; |
| 338 } | 338 } |
| 339 process_.set_handle(process); | 339 process_.set_handle(process); |
| 340 SetProcessID(process_.pid()); | 340 SetProcessID(process_.pid()); |
| 341 } | 341 } |
| 342 | 342 |
| 343 resource_message_filter->Init(pid()); | 343 resource_message_filter->Init(pid()); |
| 344 WebCacheManager::GetInstance()->Add(pid()); | 344 WebCacheManager::GetInstance()->Add(pid()); |
| 345 RendererSecurityPolicy::GetInstance()->Add(pid()); | 345 ChildProcessSecurityPolicy::GetInstance()->Add(pid()); |
| 346 | 346 |
| 347 // Now that the process is created, set its backgrounding accordingly. | 347 // Now that the process is created, set its backgrounding accordingly. |
| 348 SetBackgrounded(backgrounded_); | 348 SetBackgrounded(backgrounded_); |
| 349 | 349 |
| 350 InitVisitedLinks(); | 350 InitVisitedLinks(); |
| 351 InitUserScripts(); | 351 InitUserScripts(); |
| 352 InitExtensions(); | 352 InitExtensions(); |
| 353 | 353 |
| 354 if (max_page_id_ != -1) | 354 if (max_page_id_ != -1) |
| 355 channel_->Send(new ViewMsg_SetNextPageID(max_page_id_ + 1)); | 355 channel_->Send(new ViewMsg_SetNextPageID(max_page_id_ + 1)); |
| (...skipping 439 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 795 ExtensionMessageService* ems = ExtensionMessageService::GetInstance(context); | 795 ExtensionMessageService* ems = ExtensionMessageService::GetInstance(context); |
| 796 ems->AddEventListener(event_name, pid()); | 796 ems->AddEventListener(event_name, pid()); |
| 797 } | 797 } |
| 798 | 798 |
| 799 void BrowserRenderProcessHost::OnExtensionRemoveListener( | 799 void BrowserRenderProcessHost::OnExtensionRemoveListener( |
| 800 const std::string& event_name) { | 800 const std::string& event_name) { |
| 801 URLRequestContext* context = profile()->GetRequestContext(); | 801 URLRequestContext* context = profile()->GetRequestContext(); |
| 802 ExtensionMessageService* ems = ExtensionMessageService::GetInstance(context); | 802 ExtensionMessageService* ems = ExtensionMessageService::GetInstance(context); |
| 803 ems->RemoveEventListener(event_name, pid()); | 803 ems->RemoveEventListener(event_name, pid()); |
| 804 } | 804 } |
| OLD | NEW |