diff options
author | ajwong@chromium.org <ajwong@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-07-28 01:23:17 +0000 |
---|---|---|
committer | ajwong@chromium.org <ajwong@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-07-28 01:23:17 +0000 |
commit | 0b75f6173ddaf3a82837903013eeabb29739e015 (patch) | |
tree | 0cccf20878ba646636e5e211adb6c81448a395ea /remoting/client/plugin/chromoting_scriptable_object.h | |
parent | b5f9de67c1231759039f1d0eced5143c7d911ce5 (diff) | |
download | chromium_src-0b75f6173ddaf3a82837903013eeabb29739e015.zip chromium_src-0b75f6173ddaf3a82837903013eeabb29739e015.tar.gz chromium_src-0b75f6173ddaf3a82837903013eeabb29739e015.tar.bz2 |
Initial scriptable object implementation.
BUG=50248
TEST=write javascript to manually setup connection.
Review URL: http://codereview.chromium.org/3064009
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@53892 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'remoting/client/plugin/chromoting_scriptable_object.h')
-rw-r--r-- | remoting/client/plugin/chromoting_scriptable_object.h | 100 |
1 files changed, 100 insertions, 0 deletions
diff --git a/remoting/client/plugin/chromoting_scriptable_object.h b/remoting/client/plugin/chromoting_scriptable_object.h new file mode 100644 index 0000000..3513120 --- /dev/null +++ b/remoting/client/plugin/chromoting_scriptable_object.h @@ -0,0 +1,100 @@ +// Copyright (c) 2010 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +// This implements the JavaScript class entrypoint for the plugin. +// The Javascript API is defined as follows. +// +// interface ChromotingScriptableObject { +// // Called when the Chromoting plugin has had a state change such as +// // connection completed. +// attribute Function onreadystatechange; +// +// // Constants for states, etc. +// const unsigned short NOT_CONNECTED = 0; +// const unsigned short CONNECTED = 1; +// +// // Methods on the object. +// void connect(string username, string host_jid, string auth_token); +// +// // Attributes. +// readonly attribute unsigned short status; +// } +// +// onreadystatechange +// +// Methods: +// Connect(username, auth_token, host_jid, onstatechange); + +#ifndef REMOTING_CLIENT_PLUGIN_CHROMOTING_SCRIPTABLE_OBJECT_H_ +#define REMOTING_CLIENT_PLUGIN_CHROMOTING_SCRIPTABLE_OBJECT_H_ + +#include <map> +#include <string> +#include <vector> + +#include "third_party/ppapi/cpp/scriptable_object.h" +#include "third_party/ppapi/cpp/var.h" + +namespace remoting { + +class ChromotingPlugin; + +class ChromotingScriptableObject : public pp::ScriptableObject { + public: + explicit ChromotingScriptableObject(ChromotingPlugin* instance); + virtual ~ChromotingScriptableObject(); + + virtual void Init(); + + // Override the ScriptableObject functions. + virtual bool HasProperty(const pp::Var& name, pp::Var* exception); + virtual bool HasMethod(const pp::Var& name, pp::Var* exception); + virtual pp::Var GetProperty(const pp::Var& name, pp::Var* exception); + virtual void GetAllPropertyNames(std::vector<pp::Var>* properties, + pp::Var* exception); + virtual void SetProperty(const pp::Var& name, + const pp::Var& value, + pp::Var* exception); + virtual pp::Var Call(const pp::Var& method_name, + const std::vector<pp::Var>& args, + pp::Var* exception); + + private: + typedef std::map<std::string, int> PropertyNameMap; + typedef pp::Var (ChromotingScriptableObject::*MethodHandler)( + const std::vector<pp::Var>& args, pp::Var* exception); + struct PropertyDescriptor { + explicit PropertyDescriptor(const std::string& n, pp::Var a) + : name(n), attribute(a), method(NULL) { + } + + explicit PropertyDescriptor(const std::string& n, MethodHandler m) + : name(n), method(m) { + } + + enum Type { + ATTRIBUTE, + METHOD, + } type; + + std::string name; + pp::Var attribute; + MethodHandler method; + }; + + + void AddAttribute(const std::string& name, pp::Var attribute); + void AddMethod(const std::string& name, MethodHandler handler); + + pp::Var DoConnect(const std::vector<pp::Var>& args, pp::Var* exception); + + PropertyNameMap property_names_; + std::vector<PropertyDescriptor> properties_; + + ChromotingPlugin* instance_; +}; + +} // namespace remoting + +#endif // REMOTING_CLIENT_PLUGIN_CHROMOTING_SCRIPTABLE_OBJECT_H_ |