| Index: components/nacl/loader/nacl_listener.cc
|
| diff --git a/components/nacl/loader/nacl_listener.cc b/components/nacl/loader/nacl_listener.cc
|
| index 0866f26000faafbcfdcefe3b3e72aedf9eb6f2b6..c9d30e49449e7b79f9bfb13f92d59b500f9faf11 100644
|
| --- a/components/nacl/loader/nacl_listener.cc
|
| +++ b/components/nacl/loader/nacl_listener.cc
|
| @@ -18,6 +18,7 @@
|
| #include "base/rand_util.h"
|
| #include "components/nacl/common/nacl_messages.h"
|
| #include "components/nacl/loader/nacl_ipc_adapter.h"
|
| +#include "components/nacl/loader/nacl_trusted_listener.h"
|
| #include "components/nacl/loader/nacl_validation_db.h"
|
| #include "components/nacl/loader/nacl_validation_query.h"
|
| #include "ipc/ipc_channel_handle.h"
|
| @@ -176,6 +177,7 @@ class BrowserValidationDBProxy : public NaClValidationDB {
|
|
|
| NaClListener::NaClListener() : shutdown_event_(true, false),
|
| io_thread_("NaCl_IOThread"),
|
| + chrome_main_thread_("NaCl_ChromeMainThread"),
|
| #if defined(OS_LINUX)
|
| prereserved_sandbox_size_(0),
|
| #endif
|
| @@ -185,6 +187,8 @@ NaClListener::NaClListener() : shutdown_event_(true, false),
|
| main_loop_(NULL) {
|
| io_thread_.StartWithOptions(
|
| base::Thread::Options(base::MessageLoop::TYPE_IO, 0));
|
| + chrome_main_thread_.StartWithOptions(
|
| + base::Thread::Options(base::MessageLoop::TYPE_IO, 0));
|
| #if defined(OS_WIN)
|
| DCHECK(g_listener == NULL);
|
| g_listener = this;
|
| @@ -233,6 +237,7 @@ bool NaClListener::OnMessageReceived(const IPC::Message& msg) {
|
| }
|
|
|
| void NaClListener::OnStart(const nacl::NaClStartParams& params) {
|
| + // DCHECK(trusted_plugin_channel_created_);
|
| struct NaClChromeMainArgs *args = NaClChromeMainArgsCreate();
|
| if (args == NULL) {
|
| LOG(ERROR) << "NaClChromeMainArgsCreate() failed";
|
| @@ -333,6 +338,7 @@ void NaClListener::OnStart(const nacl::NaClStartParams& params) {
|
| args->prereserved_sandbox_size = prereserved_sandbox_size_;
|
| #endif
|
|
|
| + // FIXME: Handle nonsfi.
|
| #if defined(OS_LINUX)
|
| if (params.enable_nonsfi_mode) {
|
| nacl::nonsfi::MainStart(args->imc_bootstrap_handle);
|
| @@ -340,6 +346,24 @@ void NaClListener::OnStart(const nacl::NaClStartParams& params) {
|
| return;
|
| }
|
| #endif
|
| - NaClChromeMainStart(args);
|
| - NOTREACHED();
|
| +
|
| + int irt_fd = args->irt_fd;
|
| + struct NaClApp* nap = NaClChromeMainCreateApp(args);
|
| + CreateTrustedPluginChannel(nap, irt_fd);
|
| +}
|
| +
|
| +void NaClListener::CreateTrustedPluginChannel(struct NaClApp* nap, int irt_fd) {
|
| + fprintf(stderr, "NaClListener::OnCreateTrustedPluginChannel\n");
|
| + IPC::ChannelHandle handle =
|
| + IPC::Channel::GenerateVerifiedChannelID("nacl_trusted");
|
| + trusted_listener_ = new NaClTrustedListener(
|
| + handle, nap, irt_fd, io_thread_.message_loop_proxy().get(),
|
| + &shutdown_event_);
|
| +#if defined(OS_POSIX)
|
| + handle.socket = base::FileDescriptor(
|
| + trusted_listener_->TakeClientFileDescriptor(), true);
|
| +#endif
|
| + if (!Send(new NaClProcessHostMsg_TrustedPluginChannelCreated(handle)))
|
| + LOG(ERROR) << "Failed to send trusted plugin IPC channel handle "
|
| + << "to NaClProcessHost.";
|
| }
|
|
|