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> |
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
62 | 62 |
63 namespace ppapi { | 63 namespace ppapi { |
64 | 64 |
65 // Forward declare all the resource APIs. | 65 // Forward declare all the resource APIs. |
66 namespace thunk { | 66 namespace thunk { |
67 #define DECLARE_RESOURCE_CLASS(RESOURCE) class RESOURCE; | 67 #define DECLARE_RESOURCE_CLASS(RESOURCE) class RESOURCE; |
68 FOR_ALL_PPAPI_RESOURCE_APIS(DECLARE_RESOURCE_CLASS) | 68 FOR_ALL_PPAPI_RESOURCE_APIS(DECLARE_RESOURCE_CLASS) |
69 #undef DECLARE_RESOURCE_CLASS | 69 #undef DECLARE_RESOURCE_CLASS |
70 } // namespace thunk | 70 } // namespace thunk |
71 | 71 |
72 // Resources have slightly different registration behaviors when the're an | |
73 // in-process ("impl") resource in the host (renderer) process, or when they're | |
74 // a proxied resource in the plugin process. This enum differentiates those | |
75 // cases. | |
76 enum ResourceObjectType { | |
77 OBJECT_IS_IMPL, | |
78 OBJECT_IS_PROXY | |
79 }; | |
80 | |
72 class PPAPI_SHARED_EXPORT Resource : public base::RefCounted<Resource> { | 81 class PPAPI_SHARED_EXPORT Resource : public base::RefCounted<Resource> { |
73 public: | 82 public: |
74 // For constructing non-proxied objects. This just takes the associated | 83 // Constructor for impl and non-proxied, instance-only objects. |
75 // instance, and generates a new resource ID. The host resource will be the | 84 // |
76 // same as the newly-generated resource ID. | 85 // For constructing "impl" (non-proxied) objects, this just takes the |
77 explicit Resource(PP_Instance instance); | 86 // associated instance, and generates a new resource ID. The host resource |
87 // will be the same as the newly-generated resource ID. For all objects in | |
88 // the renderer (host) process, you'll use this constructor and call it with | |
89 // OBJECT_IS_IMPL. | |
90 // | |
91 // For proxied objects, this will create an "instance-only" object which | |
92 // lives only in the plugin and doesn't have a corresponding object in the | |
93 // host. If you have a host resource ID, use the constructor below which | |
94 // takes that HostResource value. | |
95 explicit Resource(ResourceObjectType type, PP_Instance instance); | |
78 | 96 |
79 // For constructing proxied objects. This takes the resource generated in | 97 // For constructing given a host resource. |
80 // the host side, stores it, and allocates a "local" resource ID for use in | 98 // |
81 // the current process. | 99 // For OBJECT_IS_PROXY objects, this takes the resource generated in the host |
82 explicit Resource(const HostResource& host_resource); | 100 // side, stores it, and allocates a "local" resource ID for use in the |
101 // current process. | |
102 // | |
103 // For OBJECT_IS_IMPL, the host resource ID must be 0, since there should be | |
104 // no host resource generated (impl objects should generate their own). The | |
105 // reason for supporting this constructor at all for the IMPL case is that | |
106 // some shared objects use a host resource for both modes to keep things the | |
107 // same. | |
108 explicit Resource(ResourceObjectType type, | |
109 const HostResource& host_resource); | |
dmichael (off chromium)
2012/02/13 22:24:40
Will this one ever be called with OBJECT_IS_IMPL?
brettw
2012/02/13 22:28:28
Yes, in ppb_file_ref_shared.cc. That class needs t
| |
83 | 110 |
84 virtual ~Resource(); | 111 virtual ~Resource(); |
85 | 112 |
86 PP_Instance pp_instance() const { return host_resource_.instance(); } | 113 PP_Instance pp_instance() const { return host_resource_.instance(); } |
87 | 114 |
88 // Returns the resource ID for this object in the current process without | 115 // Returns the resource ID for this object in the current process without |
89 // adjusting the refcount. See also GetReference(). | 116 // adjusting the refcount. See also GetReference(). |
90 PP_Resource pp_resource() const { return pp_resource_; } | 117 PP_Resource pp_resource() const { return pp_resource_; } |
91 | 118 |
92 // Returns the host resource which identifies the resource in the host side | 119 // Returns the host resource which identifies the resource in the host side |
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
146 #define DEFINE_RESOURCE_CAST(RESOURCE) \ | 173 #define DEFINE_RESOURCE_CAST(RESOURCE) \ |
147 template<> inline thunk::RESOURCE* Resource::GetAs() { \ | 174 template<> inline thunk::RESOURCE* Resource::GetAs() { \ |
148 return As##RESOURCE(); \ | 175 return As##RESOURCE(); \ |
149 } | 176 } |
150 FOR_ALL_PPAPI_RESOURCE_APIS(DEFINE_RESOURCE_CAST) | 177 FOR_ALL_PPAPI_RESOURCE_APIS(DEFINE_RESOURCE_CAST) |
151 #undef DEFINE_RESOURCE_CAST | 178 #undef DEFINE_RESOURCE_CAST |
152 | 179 |
153 } // namespace ppapi | 180 } // namespace ppapi |
154 | 181 |
155 #endif // PPAPI_SHARED_IMPL_RESOURCE_H_ | 182 #endif // PPAPI_SHARED_IMPL_RESOURCE_H_ |
OLD | NEW |