15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/* Copyright (c) 2010 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef PPAPI_C_PPB_VAR_DEPRECATED_H_
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PPAPI_C_PPB_VAR_DEPRECATED_H_
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/c/dev/deprecated_bool.h"
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/c/pp_instance.h"
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/c/pp_module.h"
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/c/pp_stdint.h"
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/c/pp_var.h"
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct PPP_Class_Deprecated;
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PPB_VAR_DEPRECATED_INTERFACE_0_3 "PPB_Var(Deprecated);0.3"
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PPB_VAR_DEPRECATED_INTERFACE PPB_VAR_DEPRECATED_INTERFACE_0_3
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/**
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @file
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Defines the PPB_Var_Deprecated struct.
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * See http://code.google.com/p/ppapi/wiki/InterfacingWithJavaScript
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * for general information on using this interface.
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * {PENDING: Should the generated doc really be pointing to methods?}
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @addtogroup PPB
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @{
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct PPB_Var_Deprecated {
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /**
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * Adds a reference to the given var. If this is not a refcounted object,
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * this function will do nothing so you can always call it no matter what the
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * type.
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   */
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void (*AddRef)(struct PP_Var var);
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /**
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * Removes a reference to given var, deleting it if the internal refcount
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * becomes 0. If the given var is not a refcounted object, this function will
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * do nothing so you can always call it no matter what the type.
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   */
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void (*Release)(struct PP_Var var);
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /**
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * Creates a string var from a string. The string must be encoded in valid
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * UTF-8 and is NOT NULL-terminated, the length must be specified in |len|.
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * It is an error if the string is not valid UTF-8.
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   *
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * If the length is 0, the |data| pointer will not be dereferenced and may
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * be NULL. Note, however, that if you do this, the "NULL-ness" will not be
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * preserved, as VarToUtf8 will never return NULL on success, even for empty
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * strings.
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   *
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * The resulting object will be a refcounted string object. It will be
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * AddRef()ed for the caller. When the caller is done with it, it should be
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * Release()d.
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   *
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * On error (basically out of memory to allocate the string, or input that
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * is not valid UTF-8), this function will return a Null var.
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   */
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  struct PP_Var (*VarFromUtf8)(PP_Module module,
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                               const char* data, uint32_t len);
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /**
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * Converts a string-type var to a char* encoded in UTF-8. This string is NOT
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * NULL-terminated. The length will be placed in |*len|. If the string is
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * valid but empty the return value will be non-NULL, but |*len| will still
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * be 0.
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   *
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * If the var is not a string, this function will return NULL and |*len| will
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * be 0.
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   *
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * The returned buffer will be valid as long as the underlying var is alive.
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * If the plugin frees its reference, the string will be freed and the pointer
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * will be to random memory.
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   */
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const char* (*VarToUtf8)(struct PP_Var var, uint32_t* len);
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /**
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * Returns true if the property with the given name exists on the given
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * object, false if it does not. Methods are also counted as properties.
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   *
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * The name can either be a string or an integer var. It is an error to pass
855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * another type of var as the name.
865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   *
875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * If you pass an invalid name or object, the exception will be set (if it is
885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * non-NULL, and the return value will be false).
895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   */
905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool (*HasProperty)(struct PP_Var object,
915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                      struct PP_Var name,
925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                      struct PP_Var* exception);
935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /**
955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * Identical to HasProperty, except that HasMethod additionally checks if the
965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * property is a function.
975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   */
985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool (*HasMethod)(struct PP_Var object,
995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                    struct PP_Var name,
1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                    struct PP_Var* exception);
1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /**
1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * Returns the value of the given property. If the property doesn't exist, the
1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * exception (if non-NULL) will be set and a "Void" var will be returned.
1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   */
1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  struct PP_Var (*GetProperty)(struct PP_Var object,
1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                               struct PP_Var name,
1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                               struct PP_Var* exception);
1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /**
1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * Retrieves all property names on the given object. Property names include
1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * methods.
1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   *
1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * If there is a failure, the given exception will be set (if it is non-NULL).
1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * On failure, |*properties| will be set to NULL and |*property_count| will be
1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * set to 0.
1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   *
1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * A pointer to the array of property names will be placesd in |*properties|.
1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * The caller is responsible for calling Release() on each of these properties
1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * (as per normal refcounted memory management) as well as freeing the array
1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * pointer with PPB_Core.MemFree().
1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   *
1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * This function returns all "enumerable" properties. Some JavaScript
1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * properties are "hidden" and these properties won't be retrieved by this
1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * function, yet you can still set and get them.
1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   *
1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * Example:
1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * <pre>  uint32_t count;
1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   *   PP_Var* properties;
1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   *   ppb_var.GetAllPropertyNames(object, &count, &properties);
1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   *
1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   *   ...use the properties here...
1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   *
1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   *   for (uint32_t i = 0; i < count; i++)
1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   *     ppb_var.Release(properties[i]);
1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   *   ppb_core.MemFree(properties); </pre>
1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   */
1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void (*GetAllPropertyNames)(struct PP_Var object,
1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                              uint32_t* property_count,
1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                              struct PP_Var** properties,
1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                              struct PP_Var* exception);
1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /**
1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * Sets the property with the given name on the given object. The exception
1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * will be set, if it is non-NULL, on failure.
1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   */
1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void (*SetProperty)(struct PP_Var object,
1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                      struct PP_Var name,
1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                      struct PP_Var value,
1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                      struct PP_Var* exception);
1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /**
1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * Removes the given property from the given object. The property name must
1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * be an string or integer var, using other types will throw an exception
1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * (assuming the exception pointer is non-NULL).
1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   */
1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void (*RemoveProperty)(struct PP_Var object,
1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                         struct PP_Var name,
1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                         struct PP_Var* exception);
1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // TODO(brettw) need native array access here.
1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /**
1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * Invoke the function |method_name| on the given object. If |method_name|
1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * is a Null var, the default method will be invoked, which is how you can
1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * invoke function objects.
1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   *
1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * Unless it is type Null, |method_name| must be a string. Unlike other
1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * Var functions, integer lookup is not supported since you can't call
1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * functions on integers in JavaScript.
1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   *
1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * Pass the arguments to the function in order in the |argv| array, and the
1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * number of arguments in the |argc| parameter. |argv| can be NULL if |argc|
1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * is zero.
1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   *
1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * Example:
1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   *   Call(obj, VarFromUtf8("DoIt"), 0, NULL, NULL) = obj.DoIt() in JavaScript.
1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   *   Call(obj, PP_MakeNull(), 0, NULL, NULL) = obj() in JavaScript.
1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   */
1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  struct PP_Var (*Call)(struct PP_Var object,
1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                        struct PP_Var method_name,
1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                        uint32_t argc,
1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                        struct PP_Var* argv,
1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                        struct PP_Var* exception);
1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /**
1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * Invoke the object as a constructor.
1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   *
1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * For example, if |object| is |String|, this is like saying |new String| in
1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * JavaScript.
1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   */
1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  struct PP_Var (*Construct)(struct PP_Var object,
1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                             uint32_t argc,
1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                             struct PP_Var* argv,
1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                             struct PP_Var* exception);
1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /**
1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * If the object is an instance of the given class, then this method returns
1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * true and sets *object_data to the value passed to CreateObject provided
2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * object_data is non-NULL. Otherwise, this method returns false.
2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   */
2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool (*IsInstanceOf)(struct PP_Var var,
2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                       const struct PPP_Class_Deprecated* object_class,
2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                       void** object_data);
2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /**
2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * Creates an object that the plugin implements. The plugin supplies a
2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * pointer to the class interface it implements for that object, and its
2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * associated internal data that represents that object. This object data
2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * must be unique among all "live" objects.
2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   *
2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * The returned object will have a reference count of 1. When the reference
2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * count reached 0, the class' Destruct function wlil be called.
2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   *
2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * On failure, this will return a null var. This probably means the module
2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * was invalid.
2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   *
2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * Example: Say we're implementing a "Point" object.
2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * <pre>  void PointDestruct(void* object) {
2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   *     delete (Point*)object;
2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   *   }
2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   *
2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   *   const PPP_Class_Deprecated point_class = {
2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   *     ... all the other class functions go here ...
2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   *     &PointDestruct
2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   *   };
2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   *
2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   *    * The plugin's internal object associated with the point.
2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   *   class Point {
2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   *     ...
2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   *   };
2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   *
2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   *   PP_Var MakePoint(int x, int y) {
2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   *     return CreateObject(&point_class, new Point(x, y));
2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   *   }</pre>
2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   */
2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  struct PP_Var (*CreateObject)(PP_Instance instance,
2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                const struct PPP_Class_Deprecated* object_class,
2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                void* object_data);
2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Like CreateObject but takes a module. This will be deleted when all callers
2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // can be changed to use the PP_Instance CreateObject one.
2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  struct PP_Var (*CreateObjectWithModuleDeprecated)(
2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      PP_Module module,
2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      const struct PPP_Class_Deprecated* object_class,
2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      void* object_data);
2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/**
2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @}
2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * End addtogroup PPB
2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */
2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif  /* PPAPI_C_PPB_VAR_DEPRECATED_H_ */
2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
255