Refactor management of overview window copy lifetime into a separate class.
[chromium-blink-merge.git] / content / renderer / pepper / pepper_broker.h
bloba363780f171ab73751a5c90307badfbd464023ee
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.
5 #ifndef CONTENT_RENDERER_PEPPER_PEPPER_BROKER_H_
6 #define CONTENT_RENDERER_PEPPER_PEPPER_BROKER_H_
8 #include "base/memory/ref_counted.h"
9 #include "base/process/process.h"
10 #include "base/sync_socket.h"
11 #include "content/common/content_export.h"
12 #include "content/renderer/pepper/ppb_broker_impl.h"
13 #include "ppapi/proxy/proxy_channel.h"
15 namespace IPC {
16 struct ChannelHandle;
19 namespace ppapi {
20 namespace proxy {
21 class BrokerDispatcher;
25 namespace content {
27 class PluginModule;
29 // This object is NOT thread-safe.
30 class CONTENT_EXPORT PepperBrokerDispatcherWrapper {
31 public:
32 PepperBrokerDispatcherWrapper();
33 ~PepperBrokerDispatcherWrapper();
35 bool Init(base::ProcessId broker_pid,
36 const IPC::ChannelHandle& channel_handle);
38 int32_t SendHandleToBroker(PP_Instance instance,
39 base::SyncSocket::Handle handle);
41 private:
42 scoped_ptr<ppapi::proxy::BrokerDispatcher> dispatcher_;
43 scoped_ptr<ppapi::proxy::ProxyChannel::Delegate> dispatcher_delegate_;
46 class PepperBroker : public base::RefCountedThreadSafe<PepperBroker>{
47 public:
48 explicit PepperBroker(PluginModule* plugin_module);
50 // Decrements the references to the broker.
51 // When there are no more references, this renderer's dispatcher is
52 // destroyed, allowing the broker to shutdown if appropriate.
53 // Callers should not reference this object after calling Disconnect().
54 void Disconnect(PPB_Broker_Impl* client);
56 // Adds a pending connection to the broker. Balances out Disconnect() calls.
57 void AddPendingConnect(PPB_Broker_Impl* client);
59 // Called when the channel to the broker has been established.
60 void OnBrokerChannelConnected(base::ProcessId broker_pid,
61 const IPC::ChannelHandle& channel_handle);
63 // Called when we know whether permission to access the PPAPI broker was
64 // granted.
65 void OnBrokerPermissionResult(PPB_Broker_Impl* client,
66 bool result);
68 private:
69 friend class base::RefCountedThreadSafe<PepperBroker>;
71 struct PendingConnection {
72 PendingConnection();
73 ~PendingConnection();
75 bool is_authorized;
76 base::WeakPtr<PPB_Broker_Impl> client;
79 virtual ~PepperBroker();
81 // Reports failure to all clients that had pending operations.
82 void ReportFailureToClients(int error_code);
84 // Connects the plugin to the broker via a pipe.
85 void ConnectPluginToBroker(PPB_Broker_Impl* client);
87 scoped_ptr<PepperBrokerDispatcherWrapper> dispatcher_;
89 // A map of pointers to objects that have requested a connection to the weak
90 // pointer we can use to reference them. The mapping is needed so we can clean
91 // up entries for objects that may have been deleted.
92 typedef std::map<PPB_Broker_Impl*, PendingConnection> ClientMap;
93 ClientMap pending_connects_;
95 // Pointer to the associated plugin module.
96 // Always set and cleared at the same time as the module's pointer to this.
97 PluginModule* plugin_module_;
99 DISALLOW_COPY_AND_ASSIGN(PepperBroker);
102 } // namespace content
104 #endif // CONTENT_RENDERER_PEPPER_PEPPER_BROKER_H_