ppp_class_deprecated.h revision 5821806d5e7f356e8fa4b058a389a808ea183019
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
3 * found in the LICENSE file.
4 */
5#ifndef PPAPI_C_PPP_CLASS_DEPRECATED_H_
6#define PPAPI_C_PPP_CLASS_DEPRECATED_H_
7
8#include "ppapi/c/dev/deprecated_bool.h"
9#include "ppapi/c/pp_stdint.h"
10#include "ppapi/c/pp_var.h"
11
12/**
13 * @file
14 * Defines the PPP_Class_Deprecated struct.
15 *
16 * @addtogroup PPP
17 * @{
18 */
19
20struct PP_Var;
21
22/**
23 * Interface for the plugin to implement JavaScript-accessible objects.
24 *
25 * This interface has no interface name. Instead, the plugin passes a pointer
26 * to this interface to PPB_Var_Deprecated.CreateObject that corresponds to the
27 * object being implemented.
28 *
29 * See the PPB_Var_Deprecated interface for more information on these functions.
30 * This interface just allows you to implement the "back end" of those
31 * functions, so most of the contract is specified in that interface.
32 *
33 * See
34 *   http://code.google.com/p/ppapi/wiki/InterfacingWithJavaScript
35 * for general information on using and implementing vars.
36 */
37struct PPP_Class_Deprecated {
38  /**
39   * |name| is guaranteed to be an integer or string type var. Exception is
40   * guaranteed non-NULL. An integer is used for |name| when implementing
41   * array access into the object. This test should only return true for
42   * properties that are not methods.  Use HasMethod() to handle methods.
43   */
44  bool (*HasProperty)(void* object,
45                      struct PP_Var name,
46                      struct PP_Var* exception);
47
48  /**
49   * |name| is guaranteed to be a string-type. Exception is guaranteed non-NULL.
50   * If the method does not exist, return false and don't set the exception.
51   * Errors in this function will probably not occur in general usage, but
52   * if you need to throw an exception, still return false.
53   */
54  bool (*HasMethod)(void* object,
55                    struct PP_Var name,
56                    struct PP_Var* exception);
57
58  /**
59   * |name| is guaranteed to be a string-type or an integer-type var. Exception
60   * is guaranteed non-NULL. An integer is used for |name| when implementing
61   * array access into the object. If the property does not exist, set the
62   * exception and return a var of type Void. A property does not exist if
63   * a call HasProperty() for the same |name| would return false.
64   */
65  struct PP_Var (*GetProperty)(void* object,
66                               struct PP_Var name,
67                               struct PP_Var* exception);
68
69  /**
70   * Exception is guaranteed non-NULL.
71   *
72   * This should include all enumerable properties, including methods. Be sure
73   * to set |*property_count| to 0 and |properties| to NULL in all failure
74   * cases, these should never be unset when calling this function. The
75   * pointers passed in are guaranteed not to be NULL, so you don't have to
76   * NULL check them.
77   *
78   * If you have any properties, allocate the property array with
79   * PPB_Core.MemAlloc(sizeof(PP_Var) * property_count) and add a reference
80   * to each property on behalf of the caller. The caller is responsible for
81   * Release()ing each var and calling PPB_Core.MemFree on the property pointer.
82   */
83  void (*GetAllPropertyNames)(void* object,
84                              uint32_t* property_count,
85                              struct PP_Var** properties,
86                              struct PP_Var* exception);
87
88  /**
89   * |name| is guaranteed to be an integer or string type var. Exception is
90   * guaranteed non-NULL.
91   */
92  void (*SetProperty)(void* object,
93                      struct PP_Var name,
94                      struct PP_Var value,
95                      struct PP_Var* exception);
96
97  /**
98   * |name| is guaranteed to be an integer or string type var. Exception is
99   * guaranteed non-NULL.
100   */
101  void (*RemoveProperty)(void* object,
102                         struct PP_Var name,
103                         struct PP_Var* exception);
104
105  // TODO(brettw) need native array access here.
106
107  /**
108   * |name| is guaranteed to be a string type var. Exception is guaranteed
109   * non-NULL
110   */
111  struct PP_Var (*Call)(void* object,
112                        struct PP_Var method_name,
113                        uint32_t argc,
114                        struct PP_Var* argv,
115                        struct PP_Var* exception);
116
117  /** Exception is guaranteed non-NULL. */
118  struct PP_Var (*Construct)(void* object,
119                             uint32_t argc,
120                             struct PP_Var* argv,
121                             struct PP_Var* exception);
122
123  /**
124   * Called when the reference count of the object reaches 0. Normally, plugins
125   * would free their internal data pointed to by the |object| pointer.
126   */
127  void (*Deallocate)(void* object);
128};
129
130/**
131 * @}
132 * End addtogroup PPP
133 */
134#endif  /* PPAPI_C_PPP_CLASS_DEPRECATED_H_ */
135
136