Index: components/nacl/browser/nacl_host_message_filter.cc |
diff --git a/components/nacl/browser/nacl_host_message_filter.cc b/components/nacl/browser/nacl_host_message_filter.cc |
index 0b35afc93f081959336f87c315750fefd1d53cc4..095954e164e19f769b7c05af94f9a27e67097b67 100644 |
--- a/components/nacl/browser/nacl_host_message_filter.cc |
+++ b/components/nacl/browser/nacl_host_message_filter.cc |
@@ -15,6 +15,7 @@ |
#include "content/public/browser/render_process_host.h" |
#include "content/public/browser/web_contents.h" |
#include "ipc/ipc_platform_file.h" |
+#include "native_client/src/public/nacl_file_info.h" |
#include "net/url_request/url_request_context.h" |
#include "net/url_request/url_request_context_getter.h" |
#include "ppapi/shared_impl/ppapi_permissions.h" |
@@ -145,10 +146,40 @@ void NaClHostMessageFilter::LaunchNaClContinuation( |
const nacl::NaClLaunchParams& launch_params, |
IPC::Message* reply_msg, |
ppapi::PpapiPermissions permissions) { |
+ NaClFileToken nexe_token = { |
+ launch_params.nexe_token_lo, // lo |
+ launch_params.nexe_token_hi // hi |
+ }; |
+ |
+ base::PlatformFile nexe_file; |
+#if defined(OS_WIN) |
+ // Duplicate the nexe file handle from the renderer process into the browser |
+ // process. |
+ if (!::DuplicateHandle(PeerHandle(), |
+ launch_params.nexe_file, |
+ base::GetCurrentProcessHandle(), |
+ &nexe_file, |
+ 0, // Unused, given DUPLICATE_SAME_ACCESS. |
+ FALSE, |
+ DUPLICATE_CLOSE_SOURCE | DUPLICATE_SAME_ACCESS)) { |
+ NaClHostMsg_LaunchNaCl::WriteReplyParams( |
+ reply_msg, |
+ NaClLaunchResult(), |
+ std::string("Failed to duplicate nexe file handle")); |
+ Send(reply_msg); |
+ return; |
+ } |
+#elif defined(OS_POSIX) |
+ nexe_file = |
+ IPC::PlatformFileForTransitToPlatformFile(launch_params.nexe_file); |
+#else |
+#error Unsupported platform. |
+#endif |
+ |
NaClProcessHost* host = new NaClProcessHost( |
GURL(launch_params.manifest_url), |
- base::File( |
- IPC::PlatformFileForTransitToPlatformFile(launch_params.nexe_file)), |
+ base::File(nexe_file), |
+ nexe_token, |
permissions, |
launch_params.render_view_id, |
launch_params.permission_bits, |