Index: components/nacl/browser/nacl_process_host.cc |
diff --git a/components/nacl/browser/nacl_process_host.cc b/components/nacl/browser/nacl_process_host.cc |
index e174e83a665533aab259dbdd71a4a7b6e701190e..69857afd50d61b8215c7d47f1bf462ca29a9fab6 100644 |
--- a/components/nacl/browser/nacl_process_host.cc |
+++ b/components/nacl/browser/nacl_process_host.cc |
@@ -250,6 +250,8 @@ unsigned NaClProcessHost::keepalive_throttle_interval_milliseconds_ = |
NaClProcessHost::NaClProcessHost(const GURL& manifest_url, |
base::File nexe_file, |
+ uint64_t nexe_token_lo, |
+ uint64_t nexe_token_hi, |
ppapi::PpapiPermissions permissions, |
int render_view_id, |
uint32 permission_bits, |
@@ -262,6 +264,8 @@ NaClProcessHost::NaClProcessHost(const GURL& manifest_url, |
const base::FilePath& profile_directory) |
: manifest_url_(manifest_url), |
nexe_file_(nexe_file.Pass()), |
+ nexe_token_lo_(nexe_token_lo), |
+ nexe_token_hi_(nexe_token_hi), |
permissions_(permissions), |
#if defined(OS_WIN) |
process_launched_by_broker_(false), |
@@ -817,15 +821,28 @@ bool NaClProcessHost::StartNaClExecution() { |
// Enable PPAPI proxy channel creation only for renderer processes. |
params.enable_ipc_proxy = enable_ppapi_proxy(); |
+ // nexe_file_ still keeps the ownership at this moment, because |params| |
+ // may just be destroyed before sending IPC is properly processed. |
+ // Note that although we set auto_close=true for FileDescriptor's |
+ // constructor, it is not automatically handled in its destructor as RAII. |
+#if defined(OS_POSIX) |
+ params.nexe_file = |
+ base::FileDescriptor(nexe_file_.GetPlatformFile(), true); |
+#else |
bbudge
2014/06/30 18:28:53
nit: #elif defined(OS_WIN) to make this a little m
teravest
2014/06/30 22:04:55
Done.
|
+ // Duplicate the handle from the renderer to the plugin process. |
+ if (!::DuplicateHandle(nacl_host_message_filter_->PeerHandle(), |
+ nexe_file_.GetPlatformFile(), |
+ process_->GetData().handle, |
+ ¶ms.nexe_file, |
+ 0, // Unused, given DUPLICATE_SAME_ACCESS. |
+ FALSE, |
+ DUPLICATE_CLOSE_SOURCE | DUPLICATE_SAME_ACCESS)) |
+ return false; |
+#endif |
+ |
if (uses_nonsfi_mode_) { |
// Currently, non-SFI mode is supported only on Linux. |
#if defined(OS_LINUX) |
- // nexe_file_ still keeps the ownership at this moment, because |params| |
- // may just be destroyed before sending IPC is properly processed. |
- // Note that although we set auto_close=true for FileDescriptor's |
- // constructor, it is not automatically handled in its destructor as RAII. |
- params.nexe_file = |
- base::FileDescriptor(nexe_file_.GetPlatformFile(), true); |
// In non-SFI mode, we do not use SRPC. Make sure that the socketpair is |
// not created. |
DCHECK_EQ(internal_->socket_for_sel_ldr, NACL_INVALID_HANDLE); |
@@ -840,6 +857,9 @@ bool NaClProcessHost::StartNaClExecution() { |
params.uses_irt = uses_irt_; |
params.enable_dyncode_syscalls = enable_dyncode_syscalls_; |
+ params.nexe_token_lo = nexe_token_lo_; |
+ params.nexe_token_hi = nexe_token_hi_; |
+ |
const ChildProcessData& data = process_->GetData(); |
if (!ShareHandleToSelLdr(data.handle, |
internal_->socket_for_sel_ldr, true, |
@@ -893,9 +913,9 @@ bool NaClProcessHost::StartNaClExecution() { |
// Here we are about to send the IPC, so release file descriptors to delegate |
// the ownership to the message. |
- if (uses_nonsfi_mode_) { |
- nexe_file_.TakePlatformFile(); |
- } else { |
+ nexe_file_.TakePlatformFile(); |
+ |
Mark Seaborn
2014/06/30 20:01:03
Nit: remove empty line to make it clear that the c
teravest
2014/06/30 22:04:55
Done.
|
+ if (!uses_nonsfi_mode_) { |
internal_->socket_for_sel_ldr = NACL_INVALID_HANDLE; |
} |