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 CONTENT_RENDERER_PEPPER_PPB_BROKER_IMPL_H_
6#define CONTENT_RENDERER_PEPPER_PPB_BROKER_IMPL_H_
7
8#include "base/basictypes.h"
9#include "base/compiler_specific.h"
10#include "base/memory/weak_ptr.h"
11#include "base/process/process.h"
12#include "ipc/ipc_listener.h"
13#include "ppapi/c/pp_completion_callback.h"
14#include "ppapi/c/trusted/ppb_broker_trusted.h"
15#include "ppapi/shared_impl/resource.h"
16#include "ppapi/shared_impl/tracked_callback.h"
17#include "ppapi/thunk/ppb_broker_api.h"
18
19class GURL;
20
21namespace IPC {
22struct ChannelHandle;
23}
24
25namespace content {
26class PepperBroker;
27
28class PPB_Broker_Impl : public ppapi::Resource,
29                        public ppapi::thunk::PPB_Broker_API,
30                        public IPC::Listener,
31                        public base::SupportsWeakPtr<PPB_Broker_Impl> {
32 public:
33  explicit PPB_Broker_Impl(PP_Instance instance);
34
35  // Resource override.
36  virtual ppapi::thunk::PPB_Broker_API* AsPPB_Broker_API() OVERRIDE;
37
38  // PPB_BrokerTrusted implementation.
39  virtual int32_t Connect(
40      scoped_refptr<ppapi::TrackedCallback> connect_callback) OVERRIDE;
41  virtual int32_t GetHandle(int32_t* handle) OVERRIDE;
42
43  // Returns the URL of the document this plug-in runs in. This is necessary to
44  // decide whether to grant access to the PPAPI broker.
45  GURL GetDocumentUrl();
46
47  void BrokerConnected(int32_t handle, int32_t result);
48
49 private:
50  virtual ~PPB_Broker_Impl();
51
52  // IPC::Listener implementation.
53  virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE;
54
55  void OnPpapiBrokerChannelCreated(base::ProcessId broker_pid,
56                                   const IPC::ChannelHandle& handle);
57  void OnPpapiBrokerPermissionResult(bool result);
58
59  // PluginDelegate ppapi broker object.
60  // We don't own this pointer but are responsible for calling Disconnect on it.
61  PepperBroker* broker_;
62
63  // Callback invoked from BrokerConnected.
64  scoped_refptr<ppapi::TrackedCallback> connect_callback_;
65
66  // Pipe handle for the plugin instance to use to communicate with the broker.
67  // Never owned by this object.
68  int32_t pipe_handle_;
69
70  int routing_id_;
71
72  DISALLOW_COPY_AND_ASSIGN(PPB_Broker_Impl);
73};
74
75}  // namespace content
76
77#endif  // CONTENT_RENDERER_PEPPER_PPB_BROKER_IMPL_H_
78