Home | History | Annotate | Download | only in dev
      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_CPP_SCRIPTABLE_OBJECT_DEPRECATED_H_
      6 #define PPAPI_CPP_SCRIPTABLE_OBJECT_DEPRECATED_H_
      7 
      8 #include <vector>
      9 
     10 struct PPP_Class_Deprecated;
     11 
     12 namespace pp {
     13 class Var;
     14 class VarPrivate;
     15 }
     16 
     17 namespace pp {
     18 
     19 namespace deprecated {
     20 
     21 // This class allows you to implement objects accessible by JavaScript. Derive
     22 // from this class and override the virtual functions you support. pp::Var has
     23 // a constructor that takes a pointer to a ScriptableObject for when you want
     24 // to convert your custom object to a var.
     25 //
     26 // Please see the PPB_Core C interface for more information on how to implement
     27 // these functions. These functions are the backend implementation for the
     28 // functions in PPB_Var, which contains further information.
     29 //
     30 // Please see:
     31 //   http://code.google.com/p/ppapi/wiki/InterfacingWithJavaScript
     32 // for a general overview of interfacing with JavaScript.
     33 class ScriptableObject {
     34  public:
     35   ScriptableObject() {}
     36   virtual ~ScriptableObject() {}
     37 
     38   // The default implementation returns false.
     39   virtual bool HasProperty(const Var& name, Var* exception);
     40 
     41   // The default implementation returns false.
     42   virtual bool HasMethod(const Var& name, Var* exception);
     43 
     44   // The default implementation sets an exception that the property doesn't
     45   // exist.
     46   virtual Var GetProperty(const Var& name, Var* exception);
     47 
     48   // The default implementation returns no properties.
     49   virtual void GetAllPropertyNames(std::vector<Var>* properties,
     50                                    Var* exception);
     51 
     52   // The default implementation sets an exception that the property can not be
     53   // set.
     54   virtual void SetProperty(const Var& name,
     55                            const Var& value,
     56                            Var* exception);
     57 
     58   // The default implementation sets an exception that the method does not
     59   // exist.
     60   virtual void RemoveProperty(const Var& name,
     61                               Var* exception);
     62 
     63   // TODO(brettw) need native array access here.
     64 
     65   // method_name is guaranteed to be either a string or an integer.
     66   //
     67   // The default implementation sets an exception that the method does not
     68   // exist.
     69   virtual Var Call(const Var& method_name,
     70                    const std::vector<Var>& args,
     71                    Var* exception);
     72 
     73   // The default implementation sets an exception that the method does not
     74   // exist.
     75   virtual Var Construct(const std::vector<Var>& args,
     76                         Var* exception);
     77 
     78  private:
     79   friend class ::pp::Var;
     80   friend class ::pp::VarPrivate;
     81   static const PPP_Class_Deprecated* GetClass();
     82 
     83   // Unimplemented, copy and assignment is not allowed.
     84   ScriptableObject(const ScriptableObject& other);
     85   ScriptableObject& operator=(const ScriptableObject& other);
     86 };
     87 
     88 }  // namespace deprecated
     89 
     90 }  // namespace pp
     91 
     92 #endif  // PPAPI_CPP_SCRIPTABLE_OBJECT_DEPRECATED_H_
     93 
     94