OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 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 | 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_SHARED_IMPL_RESOURCE_H_ | 5 #ifndef PPAPI_SHARED_IMPL_RESOURCE_H_ |
6 #define PPAPI_SHARED_IMPL_RESOURCE_H_ | 6 #define PPAPI_SHARED_IMPL_RESOURCE_H_ |
7 | 7 |
8 #include <stddef.h> // For NULL. | 8 #include <stddef.h> // For NULL. |
9 | 9 |
10 #include <string> | 10 #include <string> |
11 | 11 |
12 #include "base/basictypes.h" | 12 #include "base/basictypes.h" |
13 #include "base/memory/ref_counted.h" | 13 #include "base/memory/ref_counted.h" |
14 #include "ppapi/c/pp_instance.h" | 14 #include "ppapi/c/pp_instance.h" |
15 #include "ppapi/c/pp_resource.h" | 15 #include "ppapi/c/pp_resource.h" |
16 #include "ppapi/c/ppb_console.h" | 16 #include "ppapi/c/ppb_console.h" |
17 #include "ppapi/shared_impl/host_resource.h" | 17 #include "ppapi/shared_impl/host_resource.h" |
18 | 18 |
19 // All resource types should be added here. This implements our hand-rolled | 19 // All resource types should be added here. This implements our hand-rolled |
20 // RTTI system since we don't compile with "real" RTTI. | 20 // RTTI system since we don't compile with "real" RTTI. |
21 #define FOR_ALL_PPAPI_RESOURCE_APIS(F) \ | 21 #define FOR_ALL_PPAPI_RESOURCE_APIS(F) \ |
22 F(ExtensionsCommon_API) \ | 22 F(ExtensionsCommon_API) \ |
23 F(PPB_Audio_API) \ | 23 F(PPB_Audio_API) \ |
24 F(PPB_AudioBuffer_API) \ | 24 F(PPB_AudioBuffer_API) \ |
25 F(PPB_AudioConfig_API) \ | 25 F(PPB_AudioConfig_API) \ |
26 F(PPB_AudioInput_API) \ | 26 F(PPB_AudioInput_API) \ |
27 F(PPB_AudioTrusted_API) \ | 27 F(PPB_AudioTrusted_API) \ |
28 F(PPB_Broker_API) \ | 28 F(PPB_Broker_API) \ |
29 F(PPB_Broker_Instance_API) \ | 29 F(PPB_Broker_Instance_API) \ |
30 F(PPB_BrowserFont_Singleton_API) \ | 30 F(PPB_BrowserFont_Singleton_API) \ |
31 F(PPB_BrowserFont_Trusted_API) \ | 31 F(PPB_BrowserFont_Trusted_API) \ |
32 F(PPB_Buffer_API) \ | 32 F(PPB_Buffer_API) \ |
33 F(PPB_DeviceRef_API) \ | 33 F(PPB_DeviceRef_API) \ |
34 F(PPB_Ext_CrxFileSystem_Private_API) \ | 34 F(PPB_Ext_CrxFileSystem_Private_API) \ |
35 F(PPB_FileChooser_API) \ | 35 F(PPB_FileChooser_API) \ |
36 F(PPB_FileIO_API) \ | 36 F(PPB_FileIO_API) \ |
37 F(PPB_FileMapping_API) \ | 37 F(PPB_FileMapping_API) \ |
38 F(PPB_FileRef_API) \ | 38 F(PPB_FileRef_API) \ |
39 F(PPB_FileSystem_API) \ | 39 F(PPB_FileSystem_API) \ |
40 F(PPB_Find_API) \ | 40 F(PPB_Find_API) \ |
41 F(PPB_Flash_Clipboard_API) \ | 41 F(PPB_Flash_Clipboard_API) \ |
42 F(PPB_Flash_DRM_API) \ | 42 F(PPB_Flash_DRM_API) \ |
43 F(PPB_Flash_File_API) \ | 43 F(PPB_Flash_File_API) \ |
44 F(PPB_Flash_FontFile_API) \ | 44 F(PPB_Flash_FontFile_API) \ |
45 F(PPB_Flash_Fullscreen_API) \ | 45 F(PPB_Flash_Fullscreen_API) \ |
46 F(PPB_Flash_Functions_API) \ | 46 F(PPB_Flash_Functions_API) \ |
47 F(PPB_Flash_Menu_API) \ | 47 F(PPB_Flash_Menu_API) \ |
48 F(PPB_Flash_MessageLoop_API) \ | 48 F(PPB_Flash_MessageLoop_API) \ |
49 F(PPB_Gamepad_API) \ | 49 F(PPB_Gamepad_API) \ |
50 F(PPB_Graphics2D_API) \ | 50 F(PPB_Graphics2D_API) \ |
51 F(PPB_Graphics3D_API) \ | 51 F(PPB_Graphics3D_API) \ |
52 F(PPB_HostResolver_API) \ | 52 F(PPB_HostResolver_API) \ |
53 F(PPB_HostResolver_Private_API) \ | 53 F(PPB_HostResolver_Private_API) \ |
54 F(PPB_ImageData_API) \ | 54 F(PPB_ImageData_API) \ |
55 F(PPB_InputEvent_API) \ | 55 F(PPB_InputEvent_API) \ |
56 F(PPB_IsolatedFileSystem_Private_API) \ | 56 F(PPB_IsolatedFileSystem_Private_API) \ |
57 F(PPB_LayerCompositor_API) \ | 57 F(PPB_LayerCompositor_API) \ |
58 F(PPB_MediaStreamAudioTrack_API) \ | 58 F(PPB_MediaStreamAudioTrack_API) \ |
59 F(PPB_MediaStreamVideoTrack_API) \ | 59 F(PPB_MediaStreamVideoTrack_API) \ |
60 F(PPB_MessageLoop_API) \ | 60 F(PPB_MessageLoop_API) \ |
61 F(PPB_NetAddress_API) \ | 61 F(PPB_NetAddress_API) \ |
62 F(PPB_NetworkList_API) \ | 62 F(PPB_NetworkList_API) \ |
63 F(PPB_NetworkMonitor_API) \ | 63 F(PPB_NetworkMonitor_API) \ |
64 F(PPB_NetworkProxy_API) \ | 64 F(PPB_NetworkProxy_API) \ |
65 F(PPB_OutputProtection_API) \ | 65 F(PPB_OutputProtection_API) \ |
66 F(PPB_PDF_API) \ | 66 F(PPB_PDF_API) \ |
67 F(PPB_PlatformVerification_API) \ | 67 F(PPB_PlatformVerification_API) \ |
68 F(PPB_Printing_API) \ | 68 F(PPB_Printing_API) \ |
69 F(PPB_Scrollbar_API) \ | 69 F(PPB_Scrollbar_API) \ |
70 F(PPB_Talk_Private_API) \ | 70 F(PPB_Talk_Private_API) \ |
71 F(PPB_TrueTypeFont_API) \ | 71 F(PPB_TrueTypeFont_API) \ |
72 F(PPB_TrueTypeFont_Singleton_API) \ | 72 F(PPB_TrueTypeFont_Singleton_API) \ |
73 F(PPB_TCPServerSocket_Private_API) \ | 73 F(PPB_TCPServerSocket_Private_API) \ |
74 F(PPB_TCPSocket_API) \ | 74 F(PPB_TCPSocket_API) \ |
75 F(PPB_TCPSocket_Private_API) \ | 75 F(PPB_TCPSocket_Private_API) \ |
76 F(PPB_UDPSocket_API) \ | 76 F(PPB_UDPSocket_API) \ |
77 F(PPB_UDPSocket_Private_API) \ | 77 F(PPB_UDPSocket_Private_API) \ |
78 F(PPB_UMA_Singleton_API) \ | 78 F(PPB_UMA_Singleton_API) \ |
79 F(PPB_URLLoader_API) \ | 79 F(PPB_URLLoader_API) \ |
80 F(PPB_URLRequestInfo_API) \ | 80 F(PPB_URLRequestInfo_API) \ |
81 F(PPB_URLResponseInfo_API) \ | 81 F(PPB_URLResponseInfo_API) \ |
82 F(PPB_VideoCapture_API) \ | 82 F(PPB_VideoCapture_API) \ |
83 F(PPB_VideoDecoder_API) \ | 83 F(PPB_VideoDecoder_API) \ |
84 F(PPB_VideoDestination_Private_API) \ | 84 F(PPB_VideoDestination_Private_API) \ |
85 F(PPB_VideoFrame_API) \ | 85 F(PPB_VideoFrame_API) \ |
86 F(PPB_VideoLayer_API) \ | 86 F(PPB_VideoLayer_API) \ |
87 F(PPB_VideoSource_Private_API) \ | 87 F(PPB_VideoSource_Private_API) \ |
88 F(PPB_View_API) \ | 88 F(PPB_View_API) \ |
89 F(PPB_WebSocket_API) \ | 89 F(PPB_WebSocket_API) \ |
90 F(PPB_Widget_API) \ | 90 F(PPB_Widget_API) \ |
91 F(PPB_X509Certificate_Private_API) | 91 F(PPB_X509Certificate_Private_API) |
92 | 92 |
93 namespace IPC { | 93 namespace IPC { |
94 class Message; | 94 class Message; |
95 } | 95 } |
96 | 96 |
97 namespace ppapi { | 97 namespace ppapi { |
98 | 98 |
99 // Normally we shouldn't reply on proxy here, but this is to support | 99 // Normally we shouldn't reply on proxy here, but this is to support |
100 // OnReplyReceived. See that comment. | 100 // OnReplyReceived. See that comment. |
101 namespace proxy { | 101 namespace proxy { |
102 class ResourceMessageReplyParams; | 102 class ResourceMessageReplyParams; |
103 } | 103 } |
104 | 104 |
105 // Forward declare all the resource APIs. | 105 // Forward declare all the resource APIs. |
106 namespace thunk { | 106 namespace thunk { |
107 #define DECLARE_RESOURCE_CLASS(RESOURCE) class RESOURCE; | 107 #define DECLARE_RESOURCE_CLASS(RESOURCE) class RESOURCE; |
108 FOR_ALL_PPAPI_RESOURCE_APIS(DECLARE_RESOURCE_CLASS) | 108 FOR_ALL_PPAPI_RESOURCE_APIS(DECLARE_RESOURCE_CLASS) |
109 #undef DECLARE_RESOURCE_CLASS | 109 #undef DECLARE_RESOURCE_CLASS |
110 } // namespace thunk | 110 } // namespace thunk |
111 | 111 |
112 // Resources have slightly different registration behaviors when the're an | 112 // Resources have slightly different registration behaviors when the're an |
113 // in-process ("impl") resource in the host (renderer) process, or when they're | 113 // in-process ("impl") resource in the host (renderer) process, or when they're |
114 // a proxied resource in the plugin process. This enum differentiates those | 114 // a proxied resource in the plugin process. This enum differentiates those |
115 // cases. | 115 // cases. |
116 enum ResourceObjectType { | 116 enum ResourceObjectType { OBJECT_IS_IMPL, OBJECT_IS_PROXY }; |
117 OBJECT_IS_IMPL, | |
118 OBJECT_IS_PROXY | |
119 }; | |
120 | 117 |
121 class PPAPI_SHARED_EXPORT Resource : public base::RefCounted<Resource> { | 118 class PPAPI_SHARED_EXPORT Resource : public base::RefCounted<Resource> { |
122 public: | 119 public: |
123 // Constructor for impl and non-proxied, instance-only objects. | 120 // Constructor for impl and non-proxied, instance-only objects. |
124 // | 121 // |
125 // For constructing "impl" (non-proxied) objects, this just takes the | 122 // For constructing "impl" (non-proxied) objects, this just takes the |
126 // associated instance, and generates a new resource ID. The host resource | 123 // associated instance, and generates a new resource ID. The host resource |
127 // will be the same as the newly-generated resource ID. For all objects in | 124 // will be the same as the newly-generated resource ID. For all objects in |
128 // the renderer (host) process, you'll use this constructor and call it with | 125 // the renderer (host) process, you'll use this constructor and call it with |
129 // OBJECT_IS_IMPL. | 126 // OBJECT_IS_IMPL. |
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
188 // resource alive. | 185 // resource alive. |
189 // | 186 // |
190 // You will want to override this if your resource does some kind of | 187 // You will want to override this if your resource does some kind of |
191 // background processing (like maybe network loads) on behalf of the plugin | 188 // background processing (like maybe network loads) on behalf of the plugin |
192 // and you want to stop that when the plugin is deleted. | 189 // and you want to stop that when the plugin is deleted. |
193 // | 190 // |
194 // Note that subclasses except PluginResource should override | 191 // Note that subclasses except PluginResource should override |
195 // InstanceWasDeleted() to be notified. | 192 // InstanceWasDeleted() to be notified. |
196 virtual void NotifyInstanceWasDeleted(); | 193 virtual void NotifyInstanceWasDeleted(); |
197 | 194 |
198 // Dynamic casting for this object. Returns the pointer to the given type if | 195 // Dynamic casting for this object. Returns the pointer to the given type if |
199 // it's supported. Derived classes override the functions they support to | 196 // it's supported. Derived classes override the functions they support to |
200 // return the interface. | 197 // return the interface. |
201 #define DEFINE_TYPE_GETTER(RESOURCE) \ | 198 #define DEFINE_TYPE_GETTER(RESOURCE) virtual thunk::RESOURCE* As##RESOURCE(); |
202 virtual thunk::RESOURCE* As##RESOURCE(); | |
203 FOR_ALL_PPAPI_RESOURCE_APIS(DEFINE_TYPE_GETTER) | 199 FOR_ALL_PPAPI_RESOURCE_APIS(DEFINE_TYPE_GETTER) |
204 #undef DEFINE_TYPE_GETTER | 200 #undef DEFINE_TYPE_GETTER |
205 | 201 |
206 // Template-based dynamic casting. See specializations below. This is | 202 // Template-based dynamic casting. See specializations below. This is |
207 // unimplemented for the default case. This way, for anything that's not a | 203 // unimplemented for the default case. This way, for anything that's not a |
208 // resource (or if a developer forgets to add the resource to the list in | 204 // resource (or if a developer forgets to add the resource to the list in |
209 // this file), the result is a linker error. | 205 // this file), the result is a linker error. |
210 template <typename T> T* GetAs(); | 206 template <typename T> |
| 207 T* GetAs(); |
211 | 208 |
212 // Called when a PpapiPluginMsg_ResourceReply reply is received for a | 209 // Called when a PpapiPluginMsg_ResourceReply reply is received for a |
213 // previous CallRenderer. The message is the nested reply message, which may | 210 // previous CallRenderer. The message is the nested reply message, which may |
214 // be an empty message (depending on what the host sends). | 211 // be an empty message (depending on what the host sends). |
215 // | 212 // |
216 // The default implementation will assert (if you send a request, you should | 213 // The default implementation will assert (if you send a request, you should |
217 // override this function). | 214 // override this function). |
218 // | 215 // |
219 // (This function would make more conceptual sense on PluginResource but we | 216 // (This function would make more conceptual sense on PluginResource but we |
220 // need to call this function from general code that doesn't know how to | 217 // need to call this function from general code that doesn't know how to |
(...skipping 20 matching lines...) Expand all Loading... |
241 private: | 238 private: |
242 // See the getters above. | 239 // See the getters above. |
243 PP_Resource pp_resource_; | 240 PP_Resource pp_resource_; |
244 HostResource host_resource_; | 241 HostResource host_resource_; |
245 | 242 |
246 DISALLOW_IMPLICIT_CONSTRUCTORS(Resource); | 243 DISALLOW_IMPLICIT_CONSTRUCTORS(Resource); |
247 }; | 244 }; |
248 | 245 |
249 // Template-based dynamic casting. These specializations forward to the | 246 // Template-based dynamic casting. These specializations forward to the |
250 // AsXXX virtual functions to return whether the given type is supported. | 247 // AsXXX virtual functions to return whether the given type is supported. |
251 #define DEFINE_RESOURCE_CAST(RESOURCE) \ | 248 #define DEFINE_RESOURCE_CAST(RESOURCE) \ |
252 template<> inline thunk::RESOURCE* Resource::GetAs() { \ | 249 template <> \ |
253 return As##RESOURCE(); \ | 250 inline thunk::RESOURCE* Resource::GetAs() { \ |
| 251 return As##RESOURCE(); \ |
254 } | 252 } |
255 FOR_ALL_PPAPI_RESOURCE_APIS(DEFINE_RESOURCE_CAST) | 253 FOR_ALL_PPAPI_RESOURCE_APIS(DEFINE_RESOURCE_CAST) |
256 #undef DEFINE_RESOURCE_CAST | 254 #undef DEFINE_RESOURCE_CAST |
257 | 255 |
258 } // namespace ppapi | 256 } // namespace ppapi |
259 | 257 |
260 #endif // PPAPI_SHARED_IMPL_RESOURCE_H_ | 258 #endif // PPAPI_SHARED_IMPL_RESOURCE_H_ |
OLD | NEW |