Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(358)

Side by Side Diff: ppapi/proxy/dispatcher.h

Issue 6628019: Ensure that PP_Instance values are unique within a plugin process in addition... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 9 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « ppapi/ppapi_shared_proxy.gypi ('k') | ppapi/proxy/dispatcher.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #ifndef PPAPI_PROXY_DISPATCHER_H_ 5 #ifndef PPAPI_PROXY_DISPATCHER_H_
6 #define PPAPI_PROXY_DISPATCHER_H_ 6 #define PPAPI_PROXY_DISPATCHER_H_
7 7
8 #include <map> 8 #include <map>
9 #include <set>
9 #include <string> 10 #include <string>
10 #include <vector> 11 #include <vector>
11 12
12 #include "base/linked_ptr.h" 13 #include "base/linked_ptr.h"
13 #include "base/process.h" 14 #include "base/process.h"
14 #include "base/scoped_ptr.h" 15 #include "base/scoped_ptr.h"
15 #include "ipc/ipc_channel.h" 16 #include "ipc/ipc_channel.h"
16 #include "ipc/ipc_channel_handle.h" 17 #include "ipc/ipc_channel_handle.h"
17 #include "ipc/ipc_message.h" 18 #include "ipc/ipc_message.h"
18 #include "ipc/ipc_platform_file.h" 19 #include "ipc/ipc_platform_file.h"
20 #include "ppapi/c/pp_instance.h"
19 #include "ppapi/c/pp_module.h" 21 #include "ppapi/c/pp_module.h"
20 #include "ppapi/proxy/callback_tracker.h" 22 #include "ppapi/proxy/callback_tracker.h"
21 #include "ppapi/proxy/interface_id.h" 23 #include "ppapi/proxy/interface_id.h"
22 #include "ppapi/proxy/interface_proxy.h" 24 #include "ppapi/proxy/interface_proxy.h"
23 #include "ppapi/proxy/plugin_var_tracker.h" 25 #include "ppapi/proxy/plugin_var_tracker.h"
24 26
25 class MessageLoop; 27 class MessageLoop;
26 struct PPB_Var_Deprecated; 28 struct PPB_Var_Deprecated;
27 29
28 namespace base { 30 namespace base {
(...skipping 24 matching lines...) Expand all
53 // "Target" | "Source" 55 // "Target" | "Source"
54 // InterfaceProxy <---------------------- InterfaceProxy 56 // InterfaceProxy <---------------------- InterfaceProxy
55 // | 57 // |
56 class Dispatcher : public IPC::Channel::Listener, 58 class Dispatcher : public IPC::Channel::Listener,
57 public IPC::Message::Sender { 59 public IPC::Message::Sender {
58 public: 60 public:
59 typedef const void* (*GetInterfaceFunc)(const char*); 61 typedef const void* (*GetInterfaceFunc)(const char*);
60 typedef int32_t (*InitModuleFunc)(PP_Module, GetInterfaceFunc); 62 typedef int32_t (*InitModuleFunc)(PP_Module, GetInterfaceFunc);
61 typedef void (*ShutdownModuleFunc)(); 63 typedef void (*ShutdownModuleFunc)();
62 64
65 class Delegate {
66 public:
67 // Returns the dedicated message loop for processing IPC requests.
68 virtual MessageLoop* GetIPCMessageLoop() = 0;
69
70 // Returns the event object that becomes signalled when the main thread's
71 // message loop exits.
72 virtual base::WaitableEvent* GetShutdownEvent() = 0;
73
74 // Returns the set used for globally uniquifying PP_Instances. This same
75 // set must be returned for all channels. This is required only for the
76 // plugin side, for the host side, the return value may be NULL.
77 //
78 // DEREFERENCE ONLY ON THE I/O THREAD.
79 virtual std::set<PP_Instance>* GetGloballySeenInstanceIDSet() = 0;
80 };
81
63 virtual ~Dispatcher(); 82 virtual ~Dispatcher();
64 83
65 // You must call this function before anything else. Returns true on success. 84 // You must call this function before anything else. Returns true on success.
66 bool InitWithChannel(MessageLoop* ipc_message_loop, 85 // The delegate pointer must outlive this class, ownership is not
67 const IPC::ChannelHandle& channel_handle, 86 // transferred.
68 bool is_client, 87 virtual bool InitWithChannel(Delegate* delegate,
69 base::WaitableEvent* shutdown_event); 88 const IPC::ChannelHandle& channel_handle,
89 bool is_client);
70 90
71 // Alternative to InitWithChannel() for unit tests that want to send all 91 // Alternative to InitWithChannel() for unit tests that want to send all
72 // messages sent via this dispatcher to the given test sink. The test sink 92 // messages sent via this dispatcher to the given test sink. The test sink
73 // must outlive this class. 93 // must outlive this class.
74 void InitWithTestSink(IPC::TestSink* test_sink); 94 void InitWithTestSink(IPC::TestSink* test_sink);
75 95
76 // Returns true if the dispatcher is on the plugin side, or false if it's the 96 // Returns true if the dispatcher is on the plugin side, or false if it's the
77 // browser side. 97 // browser side.
78 virtual bool IsPlugin() const = 0; 98 virtual bool IsPlugin() const = 0;
79 99
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
130 GetInterfaceFunc local_get_interface); 150 GetInterfaceFunc local_get_interface);
131 151
132 // Setter for the derived classes to set the appropriate var serialization. 152 // Setter for the derived classes to set the appropriate var serialization.
133 // Takes ownership of the given pointer, which must be on the heap. 153 // Takes ownership of the given pointer, which must be on the heap.
134 void SetSerializationRules(VarSerializationRules* var_serialization_rules); 154 void SetSerializationRules(VarSerializationRules* var_serialization_rules);
135 155
136 bool disallow_trusted_interfaces() const { 156 bool disallow_trusted_interfaces() const {
137 return disallow_trusted_interfaces_; 157 return disallow_trusted_interfaces_;
138 } 158 }
139 159
160 Delegate* delegate() { return delegate_; }
161
140 private: 162 private:
163 // Non-owning pointer. Guaranteed non-NULL after init is called.
164 Delegate* delegate_;
165
141 base::ProcessHandle remote_process_handle_; // See getter above. 166 base::ProcessHandle remote_process_handle_; // See getter above.
142 167
143 // When we're unit testing, this will indicate the sink for the messages to 168 // When we're unit testing, this will indicate the sink for the messages to
144 // be deposited so they can be inspected by the test. When non-NULL, this 169 // be deposited so they can be inspected by the test. When non-NULL, this
145 // indicates that the channel should not be used. 170 // indicates that the channel should not be used.
146 IPC::TestSink* test_sink_; 171 IPC::TestSink* test_sink_;
147 172
148 // Will be null for some tests when there is a test_sink_, and if the 173 // Will be null for some tests when there is a test_sink_, and if the
149 // remote side has crashed. 174 // remote side has crashed.
150 scoped_ptr<IPC::SyncChannel> channel_; 175 scoped_ptr<IPC::SyncChannel> channel_;
151 176
152 bool disallow_trusted_interfaces_; 177 bool disallow_trusted_interfaces_;
153 178
154 GetInterfaceFunc local_get_interface_; 179 GetInterfaceFunc local_get_interface_;
155 180
156 CallbackTracker callback_tracker_; 181 CallbackTracker callback_tracker_;
157 182
158 scoped_ptr<VarSerializationRules> serialization_rules_; 183 scoped_ptr<VarSerializationRules> serialization_rules_;
159 184
160 DISALLOW_COPY_AND_ASSIGN(Dispatcher); 185 DISALLOW_COPY_AND_ASSIGN(Dispatcher);
161 }; 186 };
162 187
163 } // namespace proxy 188 } // namespace proxy
164 } // namespace pp 189 } // namespace pp
165 190
166 #endif // PPAPI_PROXY_DISPATCHER_H_ 191 #endif // PPAPI_PROXY_DISPATCHER_H_
OLDNEW
« no previous file with comments | « ppapi/ppapi_shared_proxy.gypi ('k') | ppapi/proxy/dispatcher.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698