Index: chrome/browser/nacl_host/nacl_process_host.cc |
=================================================================== |
--- chrome/browser/nacl_host/nacl_process_host.cc (revision 75488) |
+++ chrome/browser/nacl_host/nacl_process_host.cc (working copy) |
@@ -20,6 +20,7 @@ |
#include "chrome/common/nacl_messages.h" |
#include "chrome/common/render_messages.h" |
#include "ipc/ipc_switches.h" |
+#include "native_client/src/shared/imc/nacl_imc.h" |
#if defined(OS_POSIX) |
#include "ipc/ipc_channel_posix.h" |
@@ -42,12 +43,18 @@ |
} // namespace |
+struct NaClProcessHost::NaClInternal { |
+ std::vector<nacl::Handle> sockets_for_renderer; |
+ std::vector<nacl::Handle> sockets_for_sel_ldr; |
+}; |
+ |
NaClProcessHost::NaClProcessHost( |
ResourceDispatcherHost *resource_dispatcher_host, |
const std::wstring& url) |
: BrowserChildProcessHost(NACL_LOADER_PROCESS, resource_dispatcher_host), |
resource_dispatcher_host_(resource_dispatcher_host), |
reply_msg_(NULL), |
+ internal_(new NaClInternal()), |
running_on_wow64_(false) { |
set_name(url); |
#if defined(OS_WIN) |
@@ -63,11 +70,11 @@ |
// defined, but we still compile a bunch of other code from this |
// file anyway. TODO(mseaborn): Make this less messy. |
#ifndef DISABLE_NACL |
- for (size_t i = 0; i < sockets_for_renderer_.size(); i++) { |
- nacl::Close(sockets_for_renderer_[i]); |
+ for (size_t i = 0; i < internal_->sockets_for_renderer.size(); i++) { |
+ nacl::Close(internal_->sockets_for_renderer[i]); |
} |
- for (size_t i = 0; i < sockets_for_sel_ldr_.size(); i++) { |
- nacl::Close(sockets_for_sel_ldr_[i]); |
+ for (size_t i = 0; i < internal_->sockets_for_sel_ldr.size(); i++) { |
+ nacl::Close(internal_->sockets_for_sel_ldr[i]); |
} |
#endif |
@@ -105,8 +112,8 @@ |
// Create a connected socket |
if (nacl::SocketPair(pair) == -1) |
return false; |
- sockets_for_renderer_.push_back(pair[0]); |
- sockets_for_sel_ldr_.push_back(pair[1]); |
+ internal_->sockets_for_renderer.push_back(pair[0]); |
+ internal_->sockets_for_sel_ldr.push_back(pair[1]); |
SetCloseOnExec(pair[0]); |
SetCloseOnExec(pair[1]); |
} |
@@ -183,12 +190,13 @@ |
std::vector<nacl::FileDescriptor> handles_for_renderer; |
base::ProcessHandle nacl_process_handle; |
- for (size_t i = 0; i < sockets_for_renderer_.size(); i++) { |
+ for (size_t i = 0; i < internal_->sockets_for_renderer.size(); i++) { |
#if defined(OS_WIN) |
// Copy the handle into the renderer process. |
HANDLE handle_in_renderer; |
DuplicateHandle(base::GetCurrentProcessHandle(), |
- reinterpret_cast<HANDLE>(sockets_for_renderer_[i]), |
+ reinterpret_cast<HANDLE>( |
+ internal_->sockets_for_renderer[i]), |
render_message_filter_->peer_handle(), |
&handle_in_renderer, |
GENERIC_READ | GENERIC_WRITE, |
@@ -200,7 +208,7 @@ |
// No need to dup the imc_handle - we don't pass it anywhere else so |
// it cannot be closed. |
nacl::FileDescriptor imc_handle; |
- imc_handle.fd = sockets_for_renderer_[i]; |
+ imc_handle.fd = internal_->sockets_for_renderer[i]; |
imc_handle.auto_close = true; |
handles_for_renderer.push_back(imc_handle); |
#endif |
@@ -228,18 +236,19 @@ |
render_message_filter_->Send(reply_msg_); |
render_message_filter_ = NULL; |
reply_msg_ = NULL; |
- sockets_for_renderer_.clear(); |
+ internal_->sockets_for_renderer.clear(); |
SendStartMessage(); |
} |
void NaClProcessHost::SendStartMessage() { |
std::vector<nacl::FileDescriptor> handles_for_sel_ldr; |
- for (size_t i = 0; i < sockets_for_sel_ldr_.size(); i++) { |
+ for (size_t i = 0; i < internal_->sockets_for_sel_ldr.size(); i++) { |
#if defined(OS_WIN) |
HANDLE channel; |
if (!DuplicateHandle(GetCurrentProcess(), |
- reinterpret_cast<HANDLE>(sockets_for_sel_ldr_[i]), |
+ reinterpret_cast<HANDLE>( |
+ internal_->sockets_for_sel_ldr[i]), |
handle(), |
&channel, |
GENERIC_READ | GENERIC_WRITE, |
@@ -250,7 +259,7 @@ |
reinterpret_cast<nacl::FileDescriptor>(channel)); |
#else |
nacl::FileDescriptor channel; |
- channel.fd = dup(sockets_for_sel_ldr_[i]); |
+ channel.fd = dup(internal_->sockets_for_sel_ldr[i]); |
if (channel.fd < 0) { |
LOG(ERROR) << "Failed to dup() a file descriptor"; |
return; |
@@ -281,7 +290,7 @@ |
#endif |
Send(new NaClProcessMsg_Start(handles_for_sel_ldr)); |
- sockets_for_sel_ldr_.clear(); |
+ internal_->sockets_for_sel_ldr.clear(); |
} |
bool NaClProcessHost::OnMessageReceived(const IPC::Message& msg) { |