1// Copyright (c) 2012 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#ifndef PPAPI_PROXY_BROKER_DISPATCHER_H_
6#define PPAPI_PROXY_BROKER_DISPATCHER_H_
7
8#include "base/compiler_specific.h"
9#include "ppapi/c/trusted/ppp_broker.h"
10#include "ppapi/proxy/proxy_channel.h"
11
12namespace ppapi {
13namespace proxy {
14
15class PPAPI_PROXY_EXPORT BrokerDispatcher : public ProxyChannel {
16 public:
17  virtual ~BrokerDispatcher();
18
19  // You must call this function before anything else. Returns true on success.
20  // The delegate pointer must outlive this class, ownership is not
21  // transferred.
22  virtual bool InitBrokerWithChannel(ProxyChannel::Delegate* delegate,
23                                     base::ProcessId peer_pid,
24                                     const IPC::ChannelHandle& channel_handle,
25                                     bool is_client);
26
27  // IPC::Listener implementation.
28  virtual bool OnMessageReceived(const IPC::Message& msg) OVERRIDE;
29
30 protected:
31  // You must call InitBrokerWithChannel after the constructor.
32  explicit BrokerDispatcher(PP_ConnectInstance_Func connect_instance);
33
34  void OnMsgConnectToPlugin(PP_Instance instance,
35                            IPC::PlatformFileForTransit handle,
36                            int32_t* result);
37
38  PP_ConnectInstance_Func connect_instance_;
39
40 private:
41  DISALLOW_COPY_AND_ASSIGN(BrokerDispatcher);
42};
43
44// The dispatcher for the browser side of the broker channel.
45class PPAPI_PROXY_EXPORT BrokerHostDispatcher : public BrokerDispatcher {
46 public:
47  BrokerHostDispatcher();
48
49  // IPC::Listener implementation.
50  virtual void OnChannelError() OVERRIDE;
51};
52
53// The dispatcher for the broker side of the broker channel.
54class PPAPI_PROXY_EXPORT BrokerSideDispatcher : public BrokerDispatcher {
55 public:
56  explicit BrokerSideDispatcher(PP_ConnectInstance_Func connect_instance);
57
58  // IPC::Listener implementation.
59  virtual void OnChannelError() OVERRIDE;
60};
61
62}  // namespace proxy
63}  // namespace ppapi
64
65#endif  // PPAPI_PROXY_BROKER_DISPATCHER_H_
66