Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(446)

Side by Side Diff: components/nacl/browser/nacl_process_host.cc

Issue 332463003: Pepper: Remove LOAD_MODULE SRPC call in SFI mode. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
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 28 matching lines...) Expand all
39 #include "content/public/browser/child_process_data.h" 39 #include "content/public/browser/child_process_data.h"
40 #include "content/public/browser/plugin_service.h" 40 #include "content/public/browser/plugin_service.h"
41 #include "content/public/browser/render_process_host.h" 41 #include "content/public/browser/render_process_host.h"
42 #include "content/public/browser/web_contents.h" 42 #include "content/public/browser/web_contents.h"
43 #include "content/public/common/child_process_host.h" 43 #include "content/public/common/child_process_host.h"
44 #include "content/public/common/content_switches.h" 44 #include "content/public/common/content_switches.h"
45 #include "content/public/common/process_type.h" 45 #include "content/public/common/process_type.h"
46 #include "content/public/common/sandboxed_process_launcher_delegate.h" 46 #include "content/public/common/sandboxed_process_launcher_delegate.h"
47 #include "ipc/ipc_channel.h" 47 #include "ipc/ipc_channel.h"
48 #include "ipc/ipc_switches.h" 48 #include "ipc/ipc_switches.h"
49 #include "native_client/src/public/nacl_file_info.h"
49 #include "native_client/src/shared/imc/nacl_imc_c.h" 50 #include "native_client/src/shared/imc/nacl_imc_c.h"
50 #include "net/base/net_util.h" 51 #include "net/base/net_util.h"
51 #include "net/socket/tcp_listen_socket.h" 52 #include "net/socket/tcp_listen_socket.h"
52 #include "ppapi/host/host_factory.h" 53 #include "ppapi/host/host_factory.h"
53 #include "ppapi/host/ppapi_host.h" 54 #include "ppapi/host/ppapi_host.h"
54 #include "ppapi/proxy/ppapi_messages.h" 55 #include "ppapi/proxy/ppapi_messages.h"
55 #include "ppapi/shared_impl/ppapi_constants.h" 56 #include "ppapi/shared_impl/ppapi_constants.h"
56 #include "ppapi/shared_impl/ppapi_nacl_plugin_args.h" 57 #include "ppapi/shared_impl/ppapi_nacl_plugin_args.h"
57 58
58 #if defined(OS_POSIX) 59 #if defined(OS_POSIX)
(...skipping 184 matching lines...) Expand 10 before | Expand all | Expand 10 after
243 socket_for_sel_ldr(NACL_INVALID_HANDLE) { } 244 socket_for_sel_ldr(NACL_INVALID_HANDLE) { }
244 }; 245 };
245 246
246 // ----------------------------------------------------------------------------- 247 // -----------------------------------------------------------------------------
247 248
248 unsigned NaClProcessHost::keepalive_throttle_interval_milliseconds_ = 249 unsigned NaClProcessHost::keepalive_throttle_interval_milliseconds_ =
249 ppapi::kKeepaliveThrottleIntervalDefaultMilliseconds; 250 ppapi::kKeepaliveThrottleIntervalDefaultMilliseconds;
250 251
251 NaClProcessHost::NaClProcessHost(const GURL& manifest_url, 252 NaClProcessHost::NaClProcessHost(const GURL& manifest_url,
252 base::File nexe_file, 253 base::File nexe_file,
254 const NaClFileToken& nexe_token,
253 ppapi::PpapiPermissions permissions, 255 ppapi::PpapiPermissions permissions,
254 int render_view_id, 256 int render_view_id,
255 uint32 permission_bits, 257 uint32 permission_bits,
256 bool uses_irt, 258 bool uses_irt,
257 bool uses_nonsfi_mode, 259 bool uses_nonsfi_mode,
258 bool enable_dyncode_syscalls, 260 bool enable_dyncode_syscalls,
259 bool enable_exception_handling, 261 bool enable_exception_handling,
260 bool enable_crash_throttling, 262 bool enable_crash_throttling,
261 bool off_the_record, 263 bool off_the_record,
262 const base::FilePath& profile_directory) 264 const base::FilePath& profile_directory)
263 : manifest_url_(manifest_url), 265 : manifest_url_(manifest_url),
264 nexe_file_(nexe_file.Pass()), 266 nexe_file_(nexe_file.Pass()),
267 nexe_token_lo_(nexe_token.lo),
268 nexe_token_hi_(nexe_token.hi),
265 permissions_(permissions), 269 permissions_(permissions),
266 #if defined(OS_WIN) 270 #if defined(OS_WIN)
267 process_launched_by_broker_(false), 271 process_launched_by_broker_(false),
268 #endif 272 #endif
269 reply_msg_(NULL), 273 reply_msg_(NULL),
270 #if defined(OS_WIN) 274 #if defined(OS_WIN)
271 debug_exception_handler_requested_(false), 275 debug_exception_handler_requested_(false),
272 #endif 276 #endif
273 internal_(new NaClInternal()), 277 internal_(new NaClInternal()),
274 weak_factory_(this), 278 weak_factory_(this),
(...skipping 538 matching lines...) Expand 10 before | Expand all | Expand 10 after
813 bool NaClProcessHost::StartNaClExecution() { 817 bool NaClProcessHost::StartNaClExecution() {
814 NaClBrowser* nacl_browser = NaClBrowser::GetInstance(); 818 NaClBrowser* nacl_browser = NaClBrowser::GetInstance();
815 819
816 NaClStartParams params; 820 NaClStartParams params;
817 821
818 // Enable PPAPI proxy channel creation only for renderer processes. 822 // Enable PPAPI proxy channel creation only for renderer processes.
819 params.enable_ipc_proxy = enable_ppapi_proxy(); 823 params.enable_ipc_proxy = enable_ppapi_proxy();
820 if (uses_nonsfi_mode_) { 824 if (uses_nonsfi_mode_) {
821 // Currently, non-SFI mode is supported only on Linux. 825 // Currently, non-SFI mode is supported only on Linux.
822 #if defined(OS_LINUX) 826 #if defined(OS_LINUX)
823 // nexe_file_ still keeps the ownership at this moment, because |params|
824 // may just be destroyed before sending IPC is properly processed.
825 // Note that although we set auto_close=true for FileDescriptor's
826 // constructor, it is not automatically handled in its destructor as RAII.
827 params.nexe_file =
828 base::FileDescriptor(nexe_file_.GetPlatformFile(), true);
829 // In non-SFI mode, we do not use SRPC. Make sure that the socketpair is 827 // In non-SFI mode, we do not use SRPC. Make sure that the socketpair is
830 // not created. 828 // not created.
831 DCHECK_EQ(internal_->socket_for_sel_ldr, NACL_INVALID_HANDLE); 829 DCHECK_EQ(internal_->socket_for_sel_ldr, NACL_INVALID_HANDLE);
832 #endif 830 #endif
833 } else { 831 } else {
834 params.validation_cache_enabled = nacl_browser->ValidationCacheIsEnabled(); 832 params.validation_cache_enabled = nacl_browser->ValidationCacheIsEnabled();
835 params.validation_cache_key = nacl_browser->GetValidationCacheKey(); 833 params.validation_cache_key = nacl_browser->GetValidationCacheKey();
836 params.version = NaClBrowser::GetDelegate()->GetVersionString(); 834 params.version = NaClBrowser::GetDelegate()->GetVersionString();
837 params.enable_exception_handling = enable_exception_handling_; 835 params.enable_exception_handling = enable_exception_handling_;
838 params.enable_debug_stub = enable_debug_stub_ && 836 params.enable_debug_stub = enable_debug_stub_ &&
839 NaClBrowser::GetDelegate()->URLMatchesDebugPatterns(manifest_url_); 837 NaClBrowser::GetDelegate()->URLMatchesDebugPatterns(manifest_url_);
840 params.uses_irt = uses_irt_; 838 params.uses_irt = uses_irt_;
841 params.enable_dyncode_syscalls = enable_dyncode_syscalls_; 839 params.enable_dyncode_syscalls = enable_dyncode_syscalls_;
842 840
841 // TODO(teravest): Resolve the file tokens right now instead of making the
842 // loader send IPC to resolve them later.
843 params.nexe_token_lo = nexe_token_lo_;
844 params.nexe_token_hi = nexe_token_hi_;
845
843 const ChildProcessData& data = process_->GetData(); 846 const ChildProcessData& data = process_->GetData();
844 if (!ShareHandleToSelLdr(data.handle, 847 if (!ShareHandleToSelLdr(data.handle,
845 internal_->socket_for_sel_ldr, true, 848 internal_->socket_for_sel_ldr, true,
846 &params.handles)) { 849 &params.handles)) {
847 return false; 850 return false;
848 } 851 }
849 852
850 if (params.uses_irt) { 853 if (params.uses_irt) {
851 const base::File& irt_file = nacl_browser->IrtFile(); 854 const base::File& irt_file = nacl_browser->IrtFile();
852 CHECK(irt_file.IsValid()); 855 CHECK(irt_file.IsValid());
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
884 if (params.enable_debug_stub) { 887 if (params.enable_debug_stub) {
885 net::SocketDescriptor server_bound_socket = GetDebugStubSocketHandle(); 888 net::SocketDescriptor server_bound_socket = GetDebugStubSocketHandle();
886 if (server_bound_socket != net::kInvalidSocket) { 889 if (server_bound_socket != net::kInvalidSocket) {
887 params.debug_stub_server_bound_socket = 890 params.debug_stub_server_bound_socket =
888 FileDescriptor(server_bound_socket, true); 891 FileDescriptor(server_bound_socket, true);
889 } 892 }
890 } 893 }
891 #endif 894 #endif
892 } 895 }
893 896
894 // Here we are about to send the IPC, so release file descriptors to delegate 897 if (!uses_nonsfi_mode_) {
895 // the ownership to the message.
896 if (uses_nonsfi_mode_) {
897 nexe_file_.TakePlatformFile();
898 } else {
899 internal_->socket_for_sel_ldr = NACL_INVALID_HANDLE; 898 internal_->socket_for_sel_ldr = NACL_INVALID_HANDLE;
900 } 899 }
901 900
901 params.nexe_file = IPC::TakeFileHandleForProcess(nexe_file_.Pass(),
902 process_->GetData().handle);
903
902 process_->Send(new NaClProcessMsg_Start(params)); 904 process_->Send(new NaClProcessMsg_Start(params));
903 return true; 905 return true;
904 } 906 }
905 907
906 // This method is called when NaClProcessHostMsg_PpapiChannelCreated is 908 // This method is called when NaClProcessHostMsg_PpapiChannelCreated is
907 // received. 909 // received.
908 void NaClProcessHost::OnPpapiChannelsCreated( 910 void NaClProcessHost::OnPpapiChannelsCreated(
909 const IPC::ChannelHandle& browser_channel_handle, 911 const IPC::ChannelHandle& browser_channel_handle,
910 const IPC::ChannelHandle& ppapi_renderer_channel_handle, 912 const IPC::ChannelHandle& ppapi_renderer_channel_handle,
911 const IPC::ChannelHandle& trusted_renderer_channel_handle, 913 const IPC::ChannelHandle& trusted_renderer_channel_handle,
(...skipping 234 matching lines...) Expand 10 before | Expand all | Expand 10 after
1146 process_handle.Take(), info, 1148 process_handle.Take(), info,
1147 base::MessageLoopProxy::current(), 1149 base::MessageLoopProxy::current(),
1148 base::Bind(&NaClProcessHost::OnDebugExceptionHandlerLaunchedByBroker, 1150 base::Bind(&NaClProcessHost::OnDebugExceptionHandlerLaunchedByBroker,
1149 weak_factory_.GetWeakPtr())); 1151 weak_factory_.GetWeakPtr()));
1150 return true; 1152 return true;
1151 } 1153 }
1152 } 1154 }
1153 #endif 1155 #endif
1154 1156
1155 } // namespace nacl 1157 } // namespace nacl
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698