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 #include "chrome/browser/nacl_host/nacl_process_host.h" | 5 #include "chrome/browser/nacl_host/nacl_process_host.h" |
6 | 6 |
7 #include <string> | 7 #include <string> |
8 #include <vector> | 8 #include <vector> |
9 | 9 |
10 #include "base/bind.h" | 10 #include "base/bind.h" |
11 #include "base/command_line.h" | 11 #include "base/command_line.h" |
12 #include "base/message_loop.h" | 12 #include "base/message_loop.h" |
13 #include "base/metrics/histogram.h" | 13 #include "base/metrics/histogram.h" |
14 #include "base/path_service.h" | 14 #include "base/path_service.h" |
15 #include "base/process_util.h" | 15 #include "base/process_util.h" |
16 #include "base/string_util.h" | 16 #include "base/string_util.h" |
17 #include "base/stringprintf.h" | 17 #include "base/stringprintf.h" |
18 #include "base/strings/string_number_conversions.h" | 18 #include "base/strings/string_number_conversions.h" |
19 #include "base/strings/string_split.h" | 19 #include "base/strings/string_split.h" |
20 #include "base/utf_string_conversions.h" | 20 #include "base/utf_string_conversions.h" |
21 #include "base/win/windows_version.h" | 21 #include "base/win/windows_version.h" |
22 #include "build/build_config.h" | 22 #include "build/build_config.h" |
23 #include "chrome/browser/browser_process.h" | 23 #include "chrome/browser/browser_process.h" |
24 #include "chrome/browser/extensions/extension_info_map.h" | 24 #include "chrome/browser/extensions/extension_info_map.h" |
25 #include "chrome/browser/io_thread.h" | 25 #include "chrome/browser/io_thread.h" |
26 #include "chrome/browser/nacl_host/nacl_browser.h" | 26 #include "chrome/browser/nacl_host/nacl_browser.h" |
27 #include "chrome/browser/renderer_host/chrome_render_message_filter.h" | 27 #include "chrome/browser/renderer_host/chrome_render_message_filter.h" |
28 #include "chrome/common/chrome_constants.h" | 28 #include "chrome/common/chrome_constants.h" |
29 #include "chrome/common/chrome_paths.h" | 29 #include "chrome/common/chrome_paths.h" |
| 30 #include "chrome/common/chrome_process_type.h" |
30 #include "chrome/common/chrome_switches.h" | 31 #include "chrome/common/chrome_switches.h" |
31 #include "chrome/common/chrome_version_info.h" | 32 #include "chrome/common/chrome_version_info.h" |
32 #include "chrome/common/logging_chrome.h" | 33 #include "chrome/common/logging_chrome.h" |
33 #include "chrome/common/nacl_cmd_line.h" | 34 #include "chrome/common/nacl_cmd_line.h" |
34 #include "chrome/common/nacl_messages.h" | 35 #include "chrome/common/nacl_messages.h" |
35 #include "chrome/common/render_messages.h" | 36 #include "chrome/common/render_messages.h" |
36 #include "chrome/common/url_constants.h" | 37 #include "chrome/common/url_constants.h" |
37 #include "content/public/browser/browser_child_process_host.h" | 38 #include "content/public/browser/browser_child_process_host.h" |
38 #include "content/public/browser/browser_ppapi_host.h" | 39 #include "content/public/browser/browser_ppapi_host.h" |
39 #include "content/public/browser/child_process_data.h" | 40 #include "content/public/browser/child_process_data.h" |
(...skipping 155 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
195 #endif | 196 #endif |
196 internal_(new NaClInternal()), | 197 internal_(new NaClInternal()), |
197 ALLOW_THIS_IN_INITIALIZER_LIST(weak_factory_(this)), | 198 ALLOW_THIS_IN_INITIALIZER_LIST(weak_factory_(this)), |
198 enable_exception_handling_(false), | 199 enable_exception_handling_(false), |
199 enable_debug_stub_(false), | 200 enable_debug_stub_(false), |
200 uses_irt_(uses_irt), | 201 uses_irt_(uses_irt), |
201 off_the_record_(off_the_record), | 202 off_the_record_(off_the_record), |
202 ALLOW_THIS_IN_INITIALIZER_LIST(ipc_plugin_listener_(this)), | 203 ALLOW_THIS_IN_INITIALIZER_LIST(ipc_plugin_listener_(this)), |
203 render_view_id_(render_view_id) { | 204 render_view_id_(render_view_id) { |
204 process_.reset(content::BrowserChildProcessHost::Create( | 205 process_.reset(content::BrowserChildProcessHost::Create( |
205 content::PROCESS_TYPE_NACL_LOADER, this)); | 206 PROCESS_TYPE_NACL_LOADER, this)); |
206 | 207 |
207 // Set the display name so the user knows what plugin the process is running. | 208 // Set the display name so the user knows what plugin the process is running. |
208 // We aren't on the UI thread so getting the pref locale for language | 209 // We aren't on the UI thread so getting the pref locale for language |
209 // formatting isn't possible, so IDN will be lost, but this is probably OK | 210 // formatting isn't possible, so IDN will be lost, but this is probably OK |
210 // for this use case. | 211 // for this use case. |
211 process_->SetName(net::FormatUrl(manifest_url_, std::string())); | 212 process_->SetName(net::FormatUrl(manifest_url_, std::string())); |
212 | 213 |
213 // We allow untrusted hardware exception handling to be enabled via | 214 // We allow untrusted hardware exception handling to be enabled via |
214 // an env var for consistency with the standalone build of NaCl. | 215 // an env var for consistency with the standalone build of NaCl. |
215 if (CommandLine::ForCurrentProcess()->HasSwitch( | 216 if (CommandLine::ForCurrentProcess()->HasSwitch( |
(...skipping 598 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
814 // This method is called when NaClProcessHostMsg_PpapiChannelCreated is | 815 // This method is called when NaClProcessHostMsg_PpapiChannelCreated is |
815 // received or PpapiHostMsg_ChannelCreated is forwarded by our plugin | 816 // received or PpapiHostMsg_ChannelCreated is forwarded by our plugin |
816 // listener. | 817 // listener. |
817 void NaClProcessHost::OnPpapiChannelCreated( | 818 void NaClProcessHost::OnPpapiChannelCreated( |
818 const IPC::ChannelHandle& channel_handle) { | 819 const IPC::ChannelHandle& channel_handle) { |
819 // Only renderer processes should create a channel. | 820 // Only renderer processes should create a channel. |
820 DCHECK(enable_ppapi_proxy()); | 821 DCHECK(enable_ppapi_proxy()); |
821 // If the proxy channel is null, this must be the initial NaCl-Browser IPC | 822 // If the proxy channel is null, this must be the initial NaCl-Browser IPC |
822 // channel. | 823 // channel. |
823 if (!ipc_proxy_channel_.get()) { | 824 if (!ipc_proxy_channel_.get()) { |
824 DCHECK_EQ(content::PROCESS_TYPE_NACL_LOADER, process_->GetData().type); | 825 DCHECK_EQ(PROCESS_TYPE_NACL_LOADER, process_->GetData().process_type); |
825 | 826 |
826 ipc_proxy_channel_.reset( | 827 ipc_proxy_channel_.reset( |
827 new IPC::ChannelProxy(channel_handle, | 828 new IPC::ChannelProxy(channel_handle, |
828 IPC::Channel::MODE_CLIENT, | 829 IPC::Channel::MODE_CLIENT, |
829 &ipc_plugin_listener_, | 830 &ipc_plugin_listener_, |
830 base::MessageLoopProxy::current())); | 831 base::MessageLoopProxy::current())); |
831 // Create the browser ppapi host and enable PPAPI message dispatching to the | 832 // Create the browser ppapi host and enable PPAPI message dispatching to the |
832 // browser process. | 833 // browser process. |
833 ppapi_host_.reset(content::BrowserPpapiHost::CreateExternalPluginProcess( | 834 ppapi_host_.reset(content::BrowserPpapiHost::CreateExternalPluginProcess( |
834 ipc_proxy_channel_.get(), // sender | 835 ipc_proxy_channel_.get(), // sender |
(...skipping 135 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
970 } else { | 971 } else { |
971 NaClStartDebugExceptionHandlerThread( | 972 NaClStartDebugExceptionHandlerThread( |
972 process_handle.Take(), info, | 973 process_handle.Take(), info, |
973 base::MessageLoopProxy::current(), | 974 base::MessageLoopProxy::current(), |
974 base::Bind(&NaClProcessHost::OnDebugExceptionHandlerLaunchedByBroker, | 975 base::Bind(&NaClProcessHost::OnDebugExceptionHandlerLaunchedByBroker, |
975 weak_factory_.GetWeakPtr())); | 976 weak_factory_.GetWeakPtr())); |
976 return true; | 977 return true; |
977 } | 978 } |
978 } | 979 } |
979 #endif | 980 #endif |
OLD | NEW |