Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(438)

Side by Side Diff: remoting/client/plugin/chromoting_scriptable_object.h

Issue 3064009: Initial scriptable object implementation. (Closed)
Patch Set: Fix alpha's style nits. Created 10 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
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 // This implements the JavaScript class entrypoint for the plugin.
6 // The Javascript API is defined as follows.
7 //
8 // interface ChromotingScriptableObject {
9 // // Called when the Chromoting plugin has had a state change such as
10 // // connection completed.
11 // attribute Function onreadystatechange;
12 //
13 // // Constants for states, etc.
14 // const unsigned short NOT_CONNECTED = 0;
15 // const unsigned short CONNECTED = 1;
16 //
17 // // Methods on the object.
18 // void connect(string username, string host_jid, string auth_token);
19 //
20 // // Attributes.
21 // readonly attribute unsigned short status;
22 // }
23 //
24 // onreadystatechange
25 //
26 // Methods:
27 // Connect(username, auth_token, host_jid, onstatechange);
28
29 #ifndef REMOTING_CLIENT_PLUGIN_CHROMOTING_SCRIPTABLE_OBJECT_H_
30 #define REMOTING_CLIENT_PLUGIN_CHROMOTING_SCRIPTABLE_OBJECT_H_
31
32 #include <map>
33 #include <string>
34 #include <vector>
35
36 #include "third_party/ppapi/cpp/scriptable_object.h"
37 #include "third_party/ppapi/cpp/var.h"
38
39 namespace remoting {
40
41 class ChromotingPlugin;
42
43 class ChromotingScriptableObject : public pp::ScriptableObject {
44 public:
45 explicit ChromotingScriptableObject(ChromotingPlugin* instance);
46 virtual ~ChromotingScriptableObject();
47
48 virtual void Init();
49
50 // Override the ScriptableObject functions.
51 virtual bool HasProperty(const pp::Var& name, pp::Var* exception);
52 virtual bool HasMethod(const pp::Var& name, pp::Var* exception);
53 virtual pp::Var GetProperty(const pp::Var& name, pp::Var* exception);
54 virtual void GetAllPropertyNames(std::vector<pp::Var>* properties,
55 pp::Var* exception);
56 virtual void SetProperty(const pp::Var& name,
57 const pp::Var& value,
58 pp::Var* exception);
59 virtual pp::Var Call(const pp::Var& method_name,
60 const std::vector<pp::Var>& args,
61 pp::Var* exception);
62
63 private:
64 typedef std::map<std::string, int> PropertyNameMap;
65 typedef pp::Var (ChromotingScriptableObject::*MethodHandler)(
66 const std::vector<pp::Var>& args, pp::Var* exception);
67 struct PropertyDescriptor {
68 explicit PropertyDescriptor(const std::string& n, pp::Var a)
69 : name(n), attribute(a), method(NULL) {
70 }
71
72 explicit PropertyDescriptor(const std::string& n, MethodHandler m)
73 : name(n), method(m) {
74 }
75
76 enum Type {
77 ATTRIBUTE,
78 METHOD,
79 } type;
80
81 std::string name;
82 pp::Var attribute;
83 MethodHandler method;
84 };
85
86
87 void AddAttribute(const std::string& name, pp::Var attribute);
88 void AddMethod(const std::string& name, MethodHandler handler);
89
90 pp::Var DoConnect(const std::vector<pp::Var>& args, pp::Var* exception);
91
92 PropertyNameMap property_names_;
93 std::vector<PropertyDescriptor> properties_;
94
95 ChromotingPlugin* instance_;
96 };
97
98 } // namespace remoting
99
100 #endif // REMOTING_CLIENT_PLUGIN_CHROMOTING_SCRIPTABLE_OBJECT_H_
OLDNEW
« no previous file with comments | « remoting/client/plugin/chromoting_plugin.cc ('k') | remoting/client/plugin/chromoting_scriptable_object.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698