OLD | NEW |
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_C_PPB_VAR_H_ | 5 #ifndef PPAPI_C_PPB_VAR_H_ |
6 #define PPAPI_C_PPB_VAR_H_ | 6 #define PPAPI_C_PPB_VAR_H_ |
7 | 7 |
| 8 #include "ppapi/c/pp_bool.h" |
8 #include "ppapi/c/pp_instance.h" | 9 #include "ppapi/c/pp_instance.h" |
| 10 #include "ppapi/c/pp_macros.h" |
9 #include "ppapi/c/pp_module.h" | 11 #include "ppapi/c/pp_module.h" |
10 #include "ppapi/c/pp_resource.h" | 12 #include "ppapi/c/pp_resource.h" |
11 #include "ppapi/c/pp_stdint.h" | 13 #include "ppapi/c/pp_stdint.h" |
12 #include "ppapi/c/pp_var.h" | 14 #include "ppapi/c/pp_var.h" |
13 | 15 |
14 #define PPB_VAR_INTERFACE "PPB_Var;0.1" | 16 #define PPB_VAR_INTERFACE "PPB_Var;0.2" |
15 | 17 |
16 /** | 18 /** |
17 * @file | 19 * @file |
18 * Defines the PPB_Var struct. | 20 * Defines the PPB_Var struct. |
19 * See http://code.google.com/p/ppapi/wiki/InterfacingWithJavaScript | 21 * See http://code.google.com/p/ppapi/wiki/InterfacingWithJavaScript |
20 * for general information on using this interface. | 22 * for general information on using this interface. |
21 * {PENDING: Should the generated doc really be pointing to methods?} | 23 * {PENDING: Should the generated doc really be pointing to methods?} |
22 * | 24 * |
23 * @addtogroup PPB | 25 * @addtogroup PPB |
24 * @{ | 26 * @{ |
25 */ | 27 */ |
26 | 28 |
27 enum PP_ObjectProperty_Modifier { | 29 enum PP_ObjectProperty_Modifier { |
28 PP_OBJECTPROPERTY_MODIFIER_NONE = 0, | 30 PP_OBJECTPROPERTY_MODIFIER_NONE = 0, |
29 PP_OBJECTPROPERTY_MODIFIER_READONLY = 1 << 0, | 31 PP_OBJECTPROPERTY_MODIFIER_READONLY = 1 << 0, |
30 PP_OBJECTPROPERTY_MODIFIER_DONTENUM = 1 << 1, | 32 PP_OBJECTPROPERTY_MODIFIER_DONTENUM = 1 << 1, |
31 PP_OBJECTPROPERTY_MODIFIER_DONTDELETE = 1 << 2, | 33 PP_OBJECTPROPERTY_MODIFIER_DONTDELETE = 1 << 2, |
32 PP_OBJECTPROPERTY_MODIFIER_HASVALUE = 1 << 3 | 34 PP_OBJECTPROPERTY_MODIFIER_HASVALUE = 1 << 3 |
33 }; | 35 }; |
34 | 36 |
35 struct PP_ObjectProperty { | 37 struct PP_ObjectProperty { |
36 PP_Var name; | 38 struct PP_Var name; |
37 PP_Var value; | 39 struct PP_Var value; |
38 PP_Var getter; | 40 struct PP_Var getter; |
39 PP_Var setter; | 41 struct PP_Var setter; |
40 uint32_t modifiers; | 42 uint32_t modifiers; |
41 }; | 43 }; |
42 | 44 |
43 /** | 45 /** |
44 * PPB_Var API | 46 * PPB_Var API |
45 * | 47 * |
46 * JavaScript specification: | 48 * JavaScript specification: |
47 * | 49 * |
48 * When referencing JS specification, we will refer to ECMAScript, 5th edition, | 50 * When referencing JS specification, we will refer to ECMAScript, 5th edition, |
49 * and we will put section numbers in square brackets. | 51 * and we will put section numbers in square brackets. |
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
120 */ | 122 */ |
121 const char* (*VarToUtf8)(struct PP_Var var, uint32_t* len); | 123 const char* (*VarToUtf8)(struct PP_Var var, uint32_t* len); |
122 | 124 |
123 /** | 125 /** |
124 * Convert a variable to a different type using rules from ECMAScript | 126 * Convert a variable to a different type using rules from ECMAScript |
125 * specification, section [9]. | 127 * specification, section [9]. |
126 * | 128 * |
127 * For conversions from/to PP_VARTYPE_OBJECT, the instance must be specified, | 129 * For conversions from/to PP_VARTYPE_OBJECT, the instance must be specified, |
128 * or an exception of type PP_VARTYPE_STRING will be thrown. | 130 * or an exception of type PP_VARTYPE_STRING will be thrown. |
129 */ | 131 */ |
130 PP_Var (*ConvertType)(PP_Instance instance, | 132 struct PP_Var (*ConvertType)(PP_Instance instance, |
131 struct PP_Var var, | 133 struct PP_Var var, |
132 PP_VarType new_type, | 134 PP_VarType new_type, |
133 PP_Var* exception); | 135 struct PP_Var* exception); |
134 | 136 |
135 /** | 137 /** |
136 * Sets a property on the object, similar to Object.prototype.defineProperty. | 138 * Sets a property on the object, similar to Object.prototype.defineProperty. |
137 * | 139 * |
138 * First, if object is not PP_VARTYPE_OBJECT, throw an exception. | 140 * First, if object is not PP_VARTYPE_OBJECT, throw an exception. |
139 * TODO(neb): Specify the exception. Ideally, it would be a TypeError, but | 141 * TODO(neb): Specify the exception. Ideally, it would be a TypeError, but |
140 * don't have the JS context to create new objects, we might throw a string. | 142 * don't have the JS context to create new objects, we might throw a string. |
141 * Then, the property's 'name' field is converted to string using | 143 * Then, the property's 'name' field is converted to string using |
142 * ConvertType (ToString [9.8]). | 144 * ConvertType (ToString [9.8]). |
143 * After that, defineOwnProperty [8.12.9, 15.4.5.1] is called with the | 145 * After that, defineOwnProperty [8.12.9, 15.4.5.1] is called with the |
144 * property. | 146 * property. |
145 * To set a simple property, set the value and set modifiers to default | 147 * To set a simple property, set the value and set modifiers to default |
146 * (Writable|Enumerable|Configurable|HasValue), see [8.12.15] and | 148 * (Writable|Enumerable|Configurable|HasValue), see [8.12.15] and |
147 * function PPB_MakeSimpleProperty. | 149 * function PPB_MakeSimpleProperty. |
148 */ | 150 */ |
149 void (*DefineProperty)(struct PP_Var object, | 151 void (*DefineProperty)(struct PP_Var object, |
150 struct PP_ObjectProperty property, | 152 struct PP_ObjectProperty property, |
151 PP_Var* exception); | 153 struct PP_Var* exception); |
152 | 154 |
153 /** | 155 /** |
154 * Tests whether an object has a property with a given name. | 156 * Tests whether an object has a property with a given name. |
155 * | 157 * |
156 * First, if object is not PP_VARTYPE_OBJECT, throw an exception. | 158 * First, if object is not PP_VARTYPE_OBJECT, throw an exception. |
157 * TODO(neb): Specify the exception. Ideally, it would be a TypeError, but | 159 * TODO(neb): Specify the exception. Ideally, it would be a TypeError, but |
158 * don't have the JS context to create new objects, we might throw a string. | 160 * don't have the JS context to create new objects, we might throw a string. |
159 * Then, convert 'property' to string using ConvertType (ToString [9.8]). | 161 * Then, convert 'property' to string using ConvertType (ToString [9.8]). |
160 * Then return true if the given property exists on the object [8.12.6]. | 162 * Then return true if the given property exists on the object [8.12.6]. |
161 */ | 163 */ |
162 bool (*HasProperty)(struct PP_Var object, | 164 PP_Bool (*HasProperty)(struct PP_Var object, |
163 struct PP_Var property, | 165 struct PP_Var property, |
164 struct PP_Var* exception); | 166 struct PP_Var* exception); |
165 | 167 |
166 /** | 168 /** |
167 * Returns a given property of the object. | 169 * Returns a given property of the object. |
168 * | 170 * |
169 * First, if object is not PP_VARTYPE_OBJECT, throw an exception. | 171 * First, if object is not PP_VARTYPE_OBJECT, throw an exception. |
170 * TODO(neb): Specify the exception. Ideally, it would be a TypeError, but | 172 * TODO(neb): Specify the exception. Ideally, it would be a TypeError, but |
171 * don't have the JS context to create new objects, we might throw a string. | 173 * don't have the JS context to create new objects, we might throw a string. |
172 * Then, convert 'property' to string using ConvertType (ToString [9.8]). | 174 * Then, convert 'property' to string using ConvertType (ToString [9.8]). |
173 * Then return the given property of the object [8.12.2]. | 175 * Then return the given property of the object [8.12.2]. |
174 */ | 176 */ |
175 PP_Var (*GetProperty)(struct PP_Var object, | 177 struct PP_Var (*GetProperty)(struct PP_Var object, |
176 struct PP_Var property, | 178 struct PP_Var property, |
177 struct PP_Var* exception); | 179 struct PP_Var* exception); |
178 | 180 |
179 /** | 181 /** |
180 * Delete a property from the object, return true if succeeded. | 182 * Delete a property from the object, return true if succeeded. |
181 * | 183 * |
182 * True is returned if the property didn't exist in the first place. | 184 * True is returned if the property didn't exist in the first place. |
183 * | 185 * |
184 * First, if object is not PP_VARTYPE_OBJECT, throw an exception. | 186 * First, if object is not PP_VARTYPE_OBJECT, throw an exception. |
185 * TODO(neb): Specify the exception. Ideally, it would be a TypeError, but | 187 * TODO(neb): Specify the exception. Ideally, it would be a TypeError, but |
186 * don't have the JS context to create new objects, we might throw a string. | 188 * don't have the JS context to create new objects, we might throw a string. |
187 * Then, convert 'property' to string using ConvertType (ToString [9.8]). | 189 * Then, convert 'property' to string using ConvertType (ToString [9.8]). |
188 * Then delete the given property of the object [8.12.7]. | 190 * Then delete the given property of the object [8.12.7]. |
189 */ | 191 */ |
190 bool (*DeleteProperty)(struct PP_Var object, | 192 PP_Bool (*DeleteProperty)(struct PP_Var object, |
191 struct PP_Var property, | 193 struct PP_Var property, |
192 struct PP_Var* exception); | 194 struct PP_Var* exception); |
193 | 195 |
194 /** | 196 /** |
195 * Retrieves all property names on the given object. Property names include | 197 * Retrieves all property names on the given object. Property names include |
196 * methods. | 198 * methods. |
197 * | 199 * |
198 * If object is not PP_VARTYPE_OBJECT, throw an exception. | 200 * If object is not PP_VARTYPE_OBJECT, throw an exception. |
199 * TODO(neb): Specify the exception. Ideally, it would be a TypeError, but | 201 * TODO(neb): Specify the exception. Ideally, it would be a TypeError, but |
200 * don't have the JS context to create new objects, we might throw a string. | 202 * don't have the JS context to create new objects, we might throw a string. |
201 * | 203 * |
202 * If there is a failure, the given exception will be set (if it is non-NULL). | 204 * If there is a failure, the given exception will be set (if it is non-NULL). |
(...skipping 22 matching lines...) Expand all Loading... |
225 * ppb_core.MemFree(properties); </pre> | 227 * ppb_core.MemFree(properties); </pre> |
226 */ | 228 */ |
227 void (*EnumerateProperties)(struct PP_Var object, | 229 void (*EnumerateProperties)(struct PP_Var object, |
228 uint32_t* property_count, | 230 uint32_t* property_count, |
229 struct PP_Var** properties, | 231 struct PP_Var** properties, |
230 struct PP_Var* exception); | 232 struct PP_Var* exception); |
231 | 233 |
232 /** | 234 /** |
233 * Check if an object is a JS Function [9.11]. | 235 * Check if an object is a JS Function [9.11]. |
234 */ | 236 */ |
235 bool (*IsCallable)(struct PP_Var object); | 237 PP_Bool (*IsCallable)(struct PP_Var object); |
236 | 238 |
237 /** | 239 /** |
238 * Call the functions. | 240 * Call the functions. |
239 * | 241 * |
240 * Similar to Function.prototype.call [15.3.4.4]. It will throw a TypeError | 242 * Similar to Function.prototype.call [15.3.4.4]. It will throw a TypeError |
241 * and return undefined if object is not PP_VARTYPE_OBJECT, or is not | 243 * and return undefined if object is not PP_VARTYPE_OBJECT, or is not |
242 * callable. | 244 * callable. |
243 * | 245 * |
244 * Pass the arguments to the function in order in the |argv| array, and the | 246 * Pass the arguments to the function in order in the |argv| array, and the |
245 * number of arguments in the |argc| parameter. |argv| can be NULL if |argc| | 247 * number of arguments in the |argc| parameter. |argv| can be NULL if |argc| |
(...skipping 26 matching lines...) Expand all Loading... |
272 * | 274 * |
273 * For examples, to construct an empty object, do: | 275 * For examples, to construct an empty object, do: |
274 * GetWindow().GetProperty("Object").Construct(0, NULL); | 276 * GetWindow().GetProperty("Object").Construct(0, NULL); |
275 */ | 277 */ |
276 struct PP_Var (*Construct)(struct PP_Var object, | 278 struct PP_Var (*Construct)(struct PP_Var object, |
277 uint32_t argc, | 279 uint32_t argc, |
278 struct PP_Var* argv, | 280 struct PP_Var* argv, |
279 struct PP_Var* exception); | 281 struct PP_Var* exception); |
280 }; | 282 }; |
281 | 283 |
282 inline struct PP_ObjectProperty PP_MakeSimpleProperty(PP_Var name, | 284 PP_INLINE struct PP_ObjectProperty PP_MakeSimpleProperty(struct PP_Var name, |
283 PP_Var value) { | 285 struct PP_Var value) { |
284 struct PP_ObjectProperty result = { | 286 struct PP_ObjectProperty result; |
285 name, value, PP_MakeUndefined(), PP_MakeUndefined(), | 287 result.name = name; |
286 PP_OBJECTPROPERTY_MODIFIER_HASVALUE }; | 288 result.value = value; |
| 289 result.getter = PP_MakeUndefined(); |
| 290 result.setter = PP_MakeUndefined(); |
| 291 result.modifiers = PP_OBJECTPROPERTY_MODIFIER_HASVALUE; |
287 return result; | 292 return result; |
288 } | 293 } |
289 | 294 |
290 /** | 295 /** |
291 * @} | 296 * @} |
292 * End addtogroup PPB | 297 * End addtogroup PPB |
293 */ | 298 */ |
294 #endif // PPAPI_C_PPB_VAR_H_ | 299 #endif // PPAPI_C_PPB_VAR_H_ |
295 | |
OLD | NEW |