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