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

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

Issue 6286070: Remove all uses of the global Dispatcher Get function. (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 9 years, 10 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
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_INTERFACE_PROXY_H_ 5 #ifndef PPAPI_PROXY_INTERFACE_PROXY_H_
6 #define PPAPI_PROXY_INTERFACE_PROXY_H_ 6 #define PPAPI_PROXY_INTERFACE_PROXY_H_
7 7
8 #include "base/basictypes.h" 8 #include "base/basictypes.h"
9 #include "ipc/ipc_channel.h" 9 #include "ipc/ipc_channel.h"
10 #include "ipc/ipc_message.h" 10 #include "ipc/ipc_message.h"
11 #include "ppapi/c/pp_completion_callback.h" 11 #include "ppapi/c/pp_completion_callback.h"
12 #include "ppapi/c/pp_resource.h" 12 #include "ppapi/c/pp_resource.h"
13 #include "ppapi/c/pp_var.h" 13 #include "ppapi/c/pp_var.h"
14 #include "ppapi/proxy/interface_id.h" 14 #include "ppapi/proxy/interface_id.h"
15 15
16 namespace pp { 16 namespace pp {
17 namespace proxy { 17 namespace proxy {
18 18
19 class Dispatcher; 19 class Dispatcher;
20 20
21 class InterfaceProxy : public IPC::Channel::Listener, 21 class InterfaceProxy : public IPC::Channel::Listener,
22 public IPC::Message::Sender { 22 public IPC::Message::Sender {
23 public: 23 public:
24 // Creates the given interface associated with the given dispatcher. The 24 // Factory function type for interfaces. Ownership of the returned pointer
25 // dispatcher manages our lifetime. 25 // is transferred to the caller.
26 // 26 typedef InterfaceProxy* (*Factory)(Dispatcher* dispatcher,
27 // The target interface pointer, when non-NULL, indicates that this is a 27 const void* target_interface);
28 // target proxy (see dispatcher.h for a definition). In this case, the proxy 28
29 // will interpret this pointer to the actual implementation of the interface 29 // Information about the interface. Each interface has a static function to
30 // in the local process. 30 // return its info, which allows either construction on the target side, and
31 // 31 // getting the proxied interface on the source side (see dispatcher.h for
32 // If the target interface is NULL, this proxy will be a "source" interface. 32 // terminology).
33 InterfaceProxy(Dispatcher* dispatcher, const void* target_interface); 33 struct Info {
34 const void* interface;
35
36 const char* name;
37 InterfaceID id;
38
39 bool is_trusted;
40
41 InterfaceProxy::Factory create;
piman 2011/02/07 21:29:22 create->create_proxy ?
42 };
43
34 virtual ~InterfaceProxy(); 44 virtual ~InterfaceProxy();
35 45
36 // See dispatcher.h for definitions of source and target. 46 // The actual implementation of the given interface in the current process.
37 bool is_source_proxy() const { return !target_interface_; }
38 bool is_target_proxy() const { return !!target_interface_; }
39
40 // When this proxy is the "target" of the IPC communication (see
41 // dispatcher.h), this target_interface pointer will indicate the local
42 // side's interface pointer. This contains the functions that actually
43 // implement the proxied interface.
44 //
45 // This will be NULL when this proxy is a source proxy.
46 const void* target_interface() const { return target_interface_; } 47 const void* target_interface() const { return target_interface_; }
47 48
48 Dispatcher* dispatcher() const { return dispatcher_; } 49 Dispatcher* dispatcher() const { return dispatcher_; }
49 50
50 // IPC::Message::Sender implementation. 51 // IPC::Message::Sender implementation.
51 virtual bool Send(IPC::Message* msg); 52 virtual bool Send(IPC::Message* msg);
52 53
53 // Returns the local implementation of the interface that will proxy it to
54 // the remote side. This is used on the source side only (see dispatcher.h).
55 virtual const void* GetSourceInterface() const = 0;
56
57 // Returns the interface ID associated with this proxy. Implemented by each
58 // derived class to identify itself.
59 virtual InterfaceID GetInterfaceId() const = 0;
60
61 // Sub-classes must implement IPC::Channel::Listener which contains this: 54 // Sub-classes must implement IPC::Channel::Listener which contains this:
62 //virtual bool OnMessageReceived(const IPC::Message& msg); 55 //virtual bool OnMessageReceived(const IPC::Message& msg);
63 56
64 protected: 57 protected:
58 // Creates the given interface associated with the given dispatcher. The
59 // dispatcher manages our lifetime.
60 //
61 // The target interface pointer, when non-NULL, indicates that this is a
62 // target proxy (see dispatcher.h for a definition). In this case, the proxy
63 // will interpret this pointer to the actual implementation of the interface
64 // in the local process.
65 InterfaceProxy(Dispatcher* dispatcher, const void* target_interface);
66
65 uint32 SendCallback(PP_CompletionCallback callback); 67 uint32 SendCallback(PP_CompletionCallback callback);
66 PP_CompletionCallback ReceiveCallback(uint32 serialized_callback); 68 PP_CompletionCallback ReceiveCallback(uint32 serialized_callback);
67 69
68 private: 70 private:
69 Dispatcher* dispatcher_; 71 Dispatcher* dispatcher_;
70 const void* target_interface_; 72 const void* target_interface_;
71 }; 73 };
72 74
73 inline PP_Bool BoolToPPBool(bool value) { 75 inline PP_Bool BoolToPPBool(bool value) {
74 return value ? PP_TRUE : PP_FALSE; 76 return value ? PP_TRUE : PP_FALSE;
75 } 77 }
76 78
77 inline bool PPBoolToBool(PP_Bool value) { 79 inline bool PPBoolToBool(PP_Bool value) {
78 return (PP_TRUE == value); 80 return (PP_TRUE == value);
79 } 81 }
80 82
81 } // namespace proxy 83 } // namespace proxy
82 } // namespace pp 84 } // namespace pp
83 85
84 #endif // PPAPI_PROXY_INTERFACE_PROXY_H_ 86 #endif // PPAPI_PROXY_INTERFACE_PROXY_H_
85 87
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698