1a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved.
2a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
3a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)// found in the LICENSE file.
4a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
5a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "components/nacl/loader/nacl_trusted_listener.h"
6a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
7f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "base/single_thread_task_runner.h"
8f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
9a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)NaClTrustedListener::NaClTrustedListener(
10a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    const IPC::ChannelHandle& handle,
1103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)    base::SingleThreadTaskRunner* ipc_task_runner,
1203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)    base::WaitableEvent* shutdown_event)
1303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)    : channel_handle_(handle) {
1403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  channel_ = IPC::SyncChannel::Create(handle,
1503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)                                      IPC::Channel::MODE_SERVER,
1603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)                                      this,
1703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)                                      ipc_task_runner,
1803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)                                      true,  /* create_channel_now */
1903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)                                      shutdown_event).Pass();
20a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)}
21a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
22a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)NaClTrustedListener::~NaClTrustedListener() {
23a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)}
24a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
256e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)IPC::ChannelHandle NaClTrustedListener::TakeClientChannelHandle() {
266e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  IPC::ChannelHandle handle = channel_handle_;
27a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#if defined(OS_POSIX)
286e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  handle.socket =
2903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)      base::FileDescriptor(channel_->TakeClientFileDescriptor(), true);
30a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#endif
316e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  return handle;
326e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)}
33a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
34a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)bool NaClTrustedListener::OnMessageReceived(const IPC::Message& msg) {
35a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  return false;
36a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)}
37a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
38a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)void NaClTrustedListener::OnChannelError() {
3903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  channel_->Close();
40a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)}
41a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
42a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)bool NaClTrustedListener::Send(IPC::Message* msg) {
4303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  return channel_->Send(msg);
44a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)}
45