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)#ifndef COMPONENTS_NACL_LOADER_NACL_TRUSTED_LISTENER_H_
6a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#define COMPONENTS_NACL_LOADER_NACL_TRUSTED_LISTENER_H_
7a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
8a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "base/memory/ref_counted.h"
9a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "ipc/ipc_channel_handle.h"
10a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "ipc/ipc_listener.h"
1103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)#include "ipc/ipc_sync_channel.h"
12f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
13f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)namespace base {
14f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)class SingleThreadTaskRunner;
15f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)}
16a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
17a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)class NaClTrustedListener : public base::RefCounted<NaClTrustedListener>,
18a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)                            public IPC::Listener {
19a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) public:
20a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  NaClTrustedListener(const IPC::ChannelHandle& handle,
2103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)                      base::SingleThreadTaskRunner* ipc_task_runner,
2203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)                      base::WaitableEvent* shutdown_event);
23a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
246e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  IPC::ChannelHandle TakeClientChannelHandle();
25a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
26a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  // Listener implementation.
27a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE;
28a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  virtual void OnChannelError() OVERRIDE;
29a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
30a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  bool Send(IPC::Message* msg);
31a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
32a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) private:
33a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  friend class base::RefCounted<NaClTrustedListener>;
34a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  virtual ~NaClTrustedListener();
356e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  IPC::ChannelHandle channel_handle_;
3603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  scoped_ptr<IPC::SyncChannel> channel_;
37a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
38a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(NaClTrustedListener);
39a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)};
40a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
41a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#endif  // COMPONENTS_NACL_LOADER_NACL_TRUSTED_LISTENER_H_
42