| 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 "components/nacl/browser/nacl_process_host.h" | 5 #include "components/nacl/browser/nacl_process_host.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 #include <string> | 8 #include <string> |
| 9 #include <vector> | 9 #include <vector> |
| 10 | 10 |
| (...skipping 219 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 230 : socket_for_renderer(NACL_INVALID_HANDLE), | 230 : socket_for_renderer(NACL_INVALID_HANDLE), |
| 231 socket_for_sel_ldr(NACL_INVALID_HANDLE) { } | 231 socket_for_sel_ldr(NACL_INVALID_HANDLE) { } |
| 232 }; | 232 }; |
| 233 | 233 |
| 234 // ----------------------------------------------------------------------------- | 234 // ----------------------------------------------------------------------------- |
| 235 | 235 |
| 236 NaClProcessHost::NaClProcessHost(const GURL& manifest_url, | 236 NaClProcessHost::NaClProcessHost(const GURL& manifest_url, |
| 237 int render_view_id, | 237 int render_view_id, |
| 238 uint32 permission_bits, | 238 uint32 permission_bits, |
| 239 bool uses_irt, | 239 bool uses_irt, |
| 240 bool uses_nonsfi_mode, |
| 240 bool enable_dyncode_syscalls, | 241 bool enable_dyncode_syscalls, |
| 241 bool enable_exception_handling, | 242 bool enable_exception_handling, |
| 242 bool enable_crash_throttling, | 243 bool enable_crash_throttling, |
| 243 bool off_the_record, | 244 bool off_the_record, |
| 244 const base::FilePath& profile_directory) | 245 const base::FilePath& profile_directory) |
| 245 : manifest_url_(manifest_url), | 246 : manifest_url_(manifest_url), |
| 246 permissions_(GetNaClPermissions(permission_bits)), | 247 permissions_(GetNaClPermissions(permission_bits)), |
| 247 #if defined(OS_WIN) | 248 #if defined(OS_WIN) |
| 248 process_launched_by_broker_(false), | 249 process_launched_by_broker_(false), |
| 249 #endif | 250 #endif |
| 250 reply_msg_(NULL), | 251 reply_msg_(NULL), |
| 251 #if defined(OS_WIN) | 252 #if defined(OS_WIN) |
| 252 debug_exception_handler_requested_(false), | 253 debug_exception_handler_requested_(false), |
| 253 #endif | 254 #endif |
| 254 internal_(new NaClInternal()), | 255 internal_(new NaClInternal()), |
| 255 weak_factory_(this), | 256 weak_factory_(this), |
| 256 uses_irt_(uses_irt), | 257 uses_irt_(uses_irt), |
| 258 uses_nonsfi_mode_(uses_nonsfi_mode), |
| 257 enable_debug_stub_(false), | 259 enable_debug_stub_(false), |
| 258 enable_dyncode_syscalls_(enable_dyncode_syscalls), | 260 enable_dyncode_syscalls_(enable_dyncode_syscalls), |
| 259 enable_exception_handling_(enable_exception_handling), | 261 enable_exception_handling_(enable_exception_handling), |
| 260 enable_crash_throttling_(enable_crash_throttling), | 262 enable_crash_throttling_(enable_crash_throttling), |
| 261 off_the_record_(off_the_record), | 263 off_the_record_(off_the_record), |
| 262 profile_directory_(profile_directory), | 264 profile_directory_(profile_directory), |
| 263 render_view_id_(render_view_id) { | 265 render_view_id_(render_view_id) { |
| 264 process_.reset(content::BrowserChildProcessHost::Create( | 266 process_.reset(content::BrowserChildProcessHost::Create( |
| 265 PROCESS_TYPE_NACL_LOADER, this)); | 267 PROCESS_TYPE_NACL_LOADER, this)); |
| 266 | 268 |
| (...skipping 481 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 748 params.validation_cache_enabled = nacl_browser->ValidationCacheIsEnabled(); | 750 params.validation_cache_enabled = nacl_browser->ValidationCacheIsEnabled(); |
| 749 params.validation_cache_key = nacl_browser->GetValidationCacheKey(); | 751 params.validation_cache_key = nacl_browser->GetValidationCacheKey(); |
| 750 params.version = NaClBrowser::GetDelegate()->GetVersionString(); | 752 params.version = NaClBrowser::GetDelegate()->GetVersionString(); |
| 751 params.enable_exception_handling = enable_exception_handling_; | 753 params.enable_exception_handling = enable_exception_handling_; |
| 752 params.enable_debug_stub = enable_debug_stub_ && | 754 params.enable_debug_stub = enable_debug_stub_ && |
| 753 NaClBrowser::GetDelegate()->URLMatchesDebugPatterns(manifest_url_); | 755 NaClBrowser::GetDelegate()->URLMatchesDebugPatterns(manifest_url_); |
| 754 // Enable PPAPI proxy channel creation only for renderer processes. | 756 // Enable PPAPI proxy channel creation only for renderer processes. |
| 755 params.enable_ipc_proxy = enable_ppapi_proxy(); | 757 params.enable_ipc_proxy = enable_ppapi_proxy(); |
| 756 params.uses_irt = uses_irt_; | 758 params.uses_irt = uses_irt_; |
| 757 params.enable_dyncode_syscalls = enable_dyncode_syscalls_; | 759 params.enable_dyncode_syscalls = enable_dyncode_syscalls_; |
| 758 params.enable_nonsfi_mode = CommandLine::ForCurrentProcess()->HasSwitch( | 760 params.uses_nonsfi_mode = uses_nonsfi_mode_; |
| 759 switches::kEnableNaClNonSfiMode); | |
| 760 | 761 |
| 761 const ChildProcessData& data = process_->GetData(); | 762 const ChildProcessData& data = process_->GetData(); |
| 762 if (!ShareHandleToSelLdr(data.handle, | 763 if (!ShareHandleToSelLdr(data.handle, |
| 763 internal_->socket_for_sel_ldr, true, | 764 internal_->socket_for_sel_ldr, true, |
| 764 ¶ms.handles)) { | 765 ¶ms.handles)) { |
| 765 return false; | 766 return false; |
| 766 } | 767 } |
| 767 | 768 |
| 768 if (params.uses_irt) { | 769 if (params.uses_irt) { |
| 769 base::PlatformFile irt_file = nacl_browser->IrtFile(); | 770 base::PlatformFile irt_file = nacl_browser->IrtFile(); |
| (...skipping 29 matching lines...) Expand all Loading... |
| 799 #if defined(OS_POSIX) | 800 #if defined(OS_POSIX) |
| 800 if (params.enable_debug_stub) { | 801 if (params.enable_debug_stub) { |
| 801 net::SocketDescriptor server_bound_socket = GetDebugStubSocketHandle(); | 802 net::SocketDescriptor server_bound_socket = GetDebugStubSocketHandle(); |
| 802 if (server_bound_socket != net::kInvalidSocket) { | 803 if (server_bound_socket != net::kInvalidSocket) { |
| 803 params.debug_stub_server_bound_socket = | 804 params.debug_stub_server_bound_socket = |
| 804 FileDescriptor(server_bound_socket, true); | 805 FileDescriptor(server_bound_socket, true); |
| 805 } | 806 } |
| 806 } | 807 } |
| 807 #endif | 808 #endif |
| 808 | 809 |
| 810 if (params.uses_nonsfi_mode) { |
| 811 #if defined(OS_LINUX) |
| 812 const bool kNonSFIModeSupported = true; |
| 813 #else |
| 814 const bool kNonSFIModeSupported = false; |
| 815 #endif |
| 816 if (!kNonSFIModeSupported || |
| 817 !CommandLine::ForCurrentProcess()->HasSwitch( |
| 818 switches::kEnableNaClNonSfiMode)) { |
| 819 return false; |
| 820 } |
| 821 } |
| 822 |
| 809 process_->Send(new NaClProcessMsg_Start(params)); | 823 process_->Send(new NaClProcessMsg_Start(params)); |
| 810 | 824 |
| 811 internal_->socket_for_sel_ldr = NACL_INVALID_HANDLE; | 825 internal_->socket_for_sel_ldr = NACL_INVALID_HANDLE; |
| 812 return true; | 826 return true; |
| 813 } | 827 } |
| 814 | 828 |
| 815 // This method is called when NaClProcessHostMsg_PpapiChannelCreated is | 829 // This method is called when NaClProcessHostMsg_PpapiChannelCreated is |
| 816 // received. | 830 // received. |
| 817 void NaClProcessHost::OnPpapiChannelsCreated( | 831 void NaClProcessHost::OnPpapiChannelsCreated( |
| 818 const IPC::ChannelHandle& browser_channel_handle, | 832 const IPC::ChannelHandle& browser_channel_handle, |
| (...skipping 228 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1047 process_handle.Take(), info, | 1061 process_handle.Take(), info, |
| 1048 base::MessageLoopProxy::current(), | 1062 base::MessageLoopProxy::current(), |
| 1049 base::Bind(&NaClProcessHost::OnDebugExceptionHandlerLaunchedByBroker, | 1063 base::Bind(&NaClProcessHost::OnDebugExceptionHandlerLaunchedByBroker, |
| 1050 weak_factory_.GetWeakPtr())); | 1064 weak_factory_.GetWeakPtr())); |
| 1051 return true; | 1065 return true; |
| 1052 } | 1066 } |
| 1053 } | 1067 } |
| 1054 #endif | 1068 #endif |
| 1055 | 1069 |
| 1056 } // namespace nacl | 1070 } // namespace nacl |
| OLD | NEW |