Chromium Code Reviews| 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 0a3a0c936d3496e4c22ccd6f1f67e0862d917a55..bca6d6508b3979c2d4b409dad4a669007e67a96c 100644 |
| --- a/components/nacl/browser/nacl_process_host.cc |
| +++ b/components/nacl/browser/nacl_process_host.cc |
| @@ -250,6 +250,7 @@ unsigned NaClProcessHost::keepalive_throttle_interval_milliseconds_ = |
| NaClProcessHost::NaClProcessHost(const GURL& manifest_url, |
| base::File nexe_file, |
| + NaClFileToken nexe_token, |
| ppapi::PpapiPermissions permissions, |
| int render_view_id, |
| uint32 permission_bits, |
| @@ -262,6 +263,7 @@ NaClProcessHost::NaClProcessHost(const GURL& manifest_url, |
| const base::FilePath& profile_directory) |
| : manifest_url_(manifest_url), |
| nexe_file_(nexe_file.Pass()), |
| + nexe_token_(nexe_token), |
| permissions_(permissions), |
| #if defined(OS_WIN) |
| process_launched_by_broker_(false), |
| @@ -817,15 +819,30 @@ 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| |
|
Mark Seaborn
2014/07/02 23:48:36
This comment is not true for the Windows case, bec
teravest
2014/07/07 22:48:47
I followed your suggestion here, though I changed
|
| + // 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); |
| +#elif defined(OS_WIN) |
| + // 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; |
| +#else |
| +#error Unsupported target platform. |
| +#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,8 @@ 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(); |
| + if (!uses_nonsfi_mode_) { |
| internal_->socket_for_sel_ldr = NACL_INVALID_HANDLE; |
| } |