OLD | NEW |
1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2006-2008 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 O3D_GPU_PLUGIN_NP_UTILS_NP_UTILS_H_ | 5 #ifndef O3D_GPU_PLUGIN_NP_UTILS_NP_UTILS_H_ |
6 #define O3D_GPU_PLUGIN_NP_UTILS_NP_UTILS_H_ | 6 #define O3D_GPU_PLUGIN_NP_UTILS_NP_UTILS_H_ |
7 | 7 |
8 #include <string> | 8 #include <string> |
9 | 9 |
10 #include "o3d/gpu_plugin/np_utils/np_browser.h" | 10 #include "o3d/gpu_plugin/np_utils/np_browser.h" |
| 11 #include "o3d/gpu_plugin/np_utils/np_class.h" |
11 #include "o3d/gpu_plugin/np_utils/np_object_pointer.h" | 12 #include "o3d/gpu_plugin/np_utils/np_object_pointer.h" |
12 #include "third_party/npapi/bindings/npapi.h" | 13 #include "third_party/npapi/bindings/npapi.h" |
13 #include "third_party/npapi/bindings/npruntime.h" | 14 #include "third_party/npapi/bindings/npruntime.h" |
14 | 15 |
15 namespace o3d { | 16 namespace o3d { |
16 namespace gpu_plugin { | 17 namespace gpu_plugin { |
17 | 18 |
18 // Convert NPVariant to C++ type. Returns whether the conversion was successful. | 19 // Convert NPVariant to C++ type. Returns whether the conversion was successful. |
19 bool NPVariantToValue(bool* value, const NPVariant& variant); | 20 bool NPVariantToValue(bool* value, const NPVariant& variant); |
20 bool NPVariantToValue(int32* value, const NPVariant& variant); | 21 bool NPVariantToValue(int32* value, const NPVariant& variant); |
21 bool NPVariantToValue(float* value, const NPVariant& variant); | 22 bool NPVariantToValue(float* value, const NPVariant& variant); |
22 bool NPVariantToValue(double* value, const NPVariant& variant); | 23 bool NPVariantToValue(double* value, const NPVariant& variant); |
23 bool NPVariantToValue(std::string* value, const NPVariant& variant); | 24 bool NPVariantToValue(std::string* value, const NPVariant& variant); |
24 | 25 |
25 template <typename T> | 26 template <typename T> |
26 bool NPVariantToValue(NPObjectPointer<T>* value, | 27 bool NPVariantToValue(NPObjectPointer<T>* value, |
27 const NPVariant& variant) { | 28 const NPVariant& variant) { |
28 if (NPVARIANT_IS_NULL(variant)) { | 29 if (NPVARIANT_IS_NULL(variant)) { |
29 *value = NPObjectPointer<T>(); | 30 *value = NPObjectPointer<T>(); |
30 return true; | 31 return true; |
31 } else if (NPVARIANT_IS_OBJECT(variant)) { | 32 } else if (NPVARIANT_IS_OBJECT(variant)) { |
32 NPObject* object = NPVARIANT_TO_OBJECT(variant); | 33 NPObject* object = NPVARIANT_TO_OBJECT(variant); |
33 if (object->_class == BaseNPObject::GetNPClass<T>()) { | 34 if (object->_class == NPGetClass<T>()) { |
34 *value = NPObjectPointer<T>(static_cast<T*>( | 35 *value = NPObjectPointer<T>(static_cast<T*>( |
35 NPVARIANT_TO_OBJECT(variant))); | 36 NPVARIANT_TO_OBJECT(variant))); |
36 return true; | 37 return true; |
37 } | 38 } |
38 } | 39 } |
39 | 40 |
40 return false; | 41 return false; |
41 } | 42 } |
42 | 43 |
43 // Specialization for NPObject does not check for mismatched NPClass. | 44 // Specialization for NPObject does not check for mismatched NPClass. |
(...skipping 27 matching lines...) Expand all Loading... |
71 } else { | 72 } else { |
72 NULL_TO_NPVARIANT(*variant); | 73 NULL_TO_NPVARIANT(*variant); |
73 } | 74 } |
74 } | 75 } |
75 | 76 |
76 // NPVariant that automatically manages lifetime of string and object variants. | 77 // NPVariant that automatically manages lifetime of string and object variants. |
77 class SmartNPVariant : public NPVariant { | 78 class SmartNPVariant : public NPVariant { |
78 public: | 79 public: |
79 SmartNPVariant(); | 80 SmartNPVariant(); |
80 SmartNPVariant(const SmartNPVariant& rhs); | 81 SmartNPVariant(const SmartNPVariant& rhs); |
81 SmartNPVariant(const NPVariant& rhs); | 82 explicit SmartNPVariant(const NPVariant& rhs); |
82 | 83 |
83 template <typename T> | 84 template <typename T> |
84 explicit SmartNPVariant(const T& v) { | 85 explicit SmartNPVariant(const T& v) { |
85 ValueToNPVariant(v, this); | 86 ValueToNPVariant(v, this); |
86 } | 87 } |
87 | 88 |
88 ~SmartNPVariant(); | 89 ~SmartNPVariant(); |
89 | 90 |
90 SmartNPVariant& operator=(const SmartNPVariant& rhs); | 91 SmartNPVariant& operator=(const SmartNPVariant& rhs); |
91 SmartNPVariant& operator=(const NPVariant& rhs); | 92 SmartNPVariant& operator=(const NPVariant& rhs); |
(...skipping 162 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
254 NPBrowser::get()->GetStringIdentifier(name), | 255 NPBrowser::get()->GetStringIdentifier(name), |
255 &variant); | 256 &variant); |
256 } | 257 } |
257 | 258 |
258 bool NPRemoveProperty(NPP npp, | 259 bool NPRemoveProperty(NPP npp, |
259 const NPObjectPointer<NPObject>& object, | 260 const NPObjectPointer<NPObject>& object, |
260 const NPUTF8* name); | 261 const NPUTF8* name); |
261 | 262 |
262 template <typename NPObjectType> | 263 template <typename NPObjectType> |
263 NPObjectPointer<NPObjectType> NPCreateObject(NPP npp) { | 264 NPObjectPointer<NPObjectType> NPCreateObject(NPP npp) { |
264 const NPClass* np_class = BaseNPObject::GetNPClass<NPObjectType>(); | 265 const NPClass* np_class = NPGetClass<NPObjectType>(); |
265 NPObjectType* object = static_cast<NPObjectType*>( | 266 NPObjectType* object = static_cast<NPObjectType*>( |
266 NPBrowser::get()->CreateObject(npp, np_class)); | 267 NPBrowser::get()->CreateObject(npp, np_class)); |
267 return NPObjectPointer<NPObjectType>::FromReturned(object); | 268 return NPObjectPointer<NPObjectType>::FromReturned(object); |
268 } | 269 } |
269 | 270 |
270 } // namespace gpu_plugin | 271 } // namespace gpu_plugin |
271 } // namespace o3d | 272 } // namespace o3d |
272 | 273 |
273 #endif // O3D_GPU_PLUGIN_NP_UTILS_NP_UTILS_H_ | 274 #endif // O3D_GPU_PLUGIN_NP_UTILS_NP_UTILS_H_ |
OLD | NEW |