| Index: components/nacl/loader/nonsfi/nonsfi_listener.cc
|
| diff --git a/components/nacl/loader/nonsfi/nonsfi_listener.cc b/components/nacl/loader/nonsfi/nonsfi_listener.cc
|
| index 4d13d4ec231fc8df8d53a6832995776f103dfb7a..cfd32be39ac285ce8949e2597a0a4b479882d8ed 100644
|
| --- a/components/nacl/loader/nonsfi/nonsfi_listener.cc
|
| +++ b/components/nacl/loader/nonsfi/nonsfi_listener.cc
|
| @@ -56,11 +56,6 @@ void NonSfiListener::Listen() {
|
| base::MessageLoop::current()->Run();
|
| }
|
|
|
| -bool NonSfiListener::Send(IPC::Message* msg) {
|
| - DCHECK(channel_.get() != NULL);
|
| - return channel_->Send(msg);
|
| -}
|
| -
|
| bool NonSfiListener::OnMessageReceived(const IPC::Message& msg) {
|
| bool handled = true;
|
| IPC_BEGIN_MESSAGE_MAP(NonSfiListener, msg)
|
| @@ -93,68 +88,34 @@ void NonSfiListener::OnStart(const nacl::NaClStartParams& params) {
|
| SetUrandomFd(base::GetUrandomFD());
|
| #endif
|
|
|
| - IPC::ChannelHandle browser_handle;
|
| - IPC::ChannelHandle ppapi_renderer_handle;
|
| - IPC::ChannelHandle manifest_service_handle;
|
| -
|
| - if (params.enable_ipc_proxy) {
|
| - browser_handle = IPC::Channel::GenerateVerifiedChannelID("nacl");
|
| - ppapi_renderer_handle = IPC::Channel::GenerateVerifiedChannelID("nacl");
|
| - manifest_service_handle =
|
| - IPC::Channel::GenerateVerifiedChannelID("nacl");
|
| -
|
| - // In non-SFI mode, we neither intercept nor rewrite the message using
|
| - // NaClIPCAdapter, and the channels are connected between the plugin and
|
| - // the hosts directly. So, the IPC::Channel instances will be created in
|
| - // the plugin side, because the IPC::Listener needs to live on the
|
| - // plugin's main thread. However, on initialization (i.e. before loading
|
| - // the plugin binary), the FD needs to be passed to the hosts. So, here
|
| - // we create raw FD pairs, and pass the client side FDs to the hosts,
|
| - // and the server side FDs to the plugin.
|
| - int browser_server_ppapi_fd;
|
| - int browser_client_ppapi_fd;
|
| - int renderer_server_ppapi_fd;
|
| - int renderer_client_ppapi_fd;
|
| - int manifest_service_server_fd;
|
| - int manifest_service_client_fd;
|
| - if (!IPC::SocketPair(
|
| - &browser_server_ppapi_fd, &browser_client_ppapi_fd) ||
|
| - !IPC::SocketPair(
|
| - &renderer_server_ppapi_fd, &renderer_client_ppapi_fd) ||
|
| - !IPC::SocketPair(
|
| - &manifest_service_server_fd, &manifest_service_client_fd)) {
|
| - LOG(ERROR) << "Failed to create sockets for IPC.";
|
| - return;
|
| - }
|
| -
|
| - // Set the plugin IPC channel FDs.
|
| - ppapi::SetIPCFileDescriptors(browser_server_ppapi_fd,
|
| - renderer_server_ppapi_fd,
|
| - manifest_service_server_fd);
|
| - ppapi::StartUpPlugin();
|
| -
|
| - // Send back to the client side IPC channel FD to the host.
|
| - browser_handle.socket =
|
| - base::FileDescriptor(browser_client_ppapi_fd, true);
|
| - ppapi_renderer_handle.socket =
|
| - base::FileDescriptor(renderer_client_ppapi_fd, true);
|
| - manifest_service_handle.socket =
|
| - base::FileDescriptor(manifest_service_client_fd, true);
|
| - }
|
| + // In Non-SFI mode, PPAPI proxy must be enabled.
|
| + CHECK(params.enable_ipc_proxy);
|
| +
|
| + // In Non-SFI mode, we neither intercept nor rewrite the message using
|
| + // NaClIPCAdapter, and the channels are connected between the plugin and
|
| + // the hosts directly. So, the IPC::Channel instances will be created in
|
| + // the plugin side, because the IPC::Listener needs to live on the
|
| + // plugin's main thread. We just pass the FDs to plugin side.
|
| + // The FDs are created in the browser process. Following check can fail
|
| + // if the preparation for sending NaClProcessMsg_Start were incomplete.
|
| + CHECK_NE(params.ppapi_browser_channel_handle.socket.fd, -1);
|
| + CHECK_NE(params.ppapi_renderer_channel_handle.socket.fd, -1);
|
| + CHECK_NE(params.trusted_service_channel_handle.socket.fd, -1);
|
| + CHECK_NE(params.manifest_service_channel_handle.socket.fd, -1);
|
| +
|
| + ppapi::SetIPCFileDescriptors(
|
| + params.ppapi_browser_channel_handle.socket.fd,
|
| + params.ppapi_renderer_channel_handle.socket.fd,
|
| + params.manifest_service_channel_handle.socket.fd);
|
| + ppapi::StartUpPlugin();
|
|
|
| // TODO(teravest): Do we plan on using this renderer handle for nexe loading
|
| // for non-SFI? Right now, passing an empty channel handle instead causes
|
| // hangs, so we'll keep it.
|
| trusted_listener_ = new NaClTrustedListener(
|
| - IPC::Channel::GenerateVerifiedChannelID("nacl"),
|
| + params.trusted_service_channel_handle,
|
| io_thread_.message_loop_proxy().get(),
|
| &shutdown_event_);
|
| - if (!Send(new NaClProcessHostMsg_PpapiChannelsCreated(
|
| - browser_handle,
|
| - ppapi_renderer_handle,
|
| - trusted_listener_->TakeClientChannelHandle(),
|
| - manifest_service_handle)))
|
| - LOG(ERROR) << "Failed to send IPC channel handle to NaClProcessHost.";
|
|
|
| // Ensure that the validation cache key (used as an extra input to the
|
| // validation cache's hashing) isn't exposed accidentally.
|
|
|