OLD | NEW |
| (Empty) |
1 // Copyright (c) 2012 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 /* | |
6 CppBindingExample class: | |
7 This provides an example of how to use the CppBoundClass to create methods | |
8 and properties that can be exposed to JavaScript by an appropriately built | |
9 embedding client. It is also used by the CppBoundClass unit test. | |
10 | |
11 Typically, a class intended to be bound to JavaScript will define a | |
12 constructor, any methods and properties to be exposed, and optionally a | |
13 destructor. An embedding client can then bind the class to a JavaScript | |
14 object in a frame's window using the CppBoundClass::BindToJavascript() method, | |
15 generally called from the WebFrameClient's DidClearWindowObject(). | |
16 | |
17 Once this class has been bound, say to the name "example", it might be called | |
18 from JavaScript in the following way: | |
19 | |
20 <script> | |
21 if (window.example) { | |
22 document.writeln(example.echoValue(false)); | |
23 document.writeln(example.echoType("Hello world!")); | |
24 document.writeln(example.plus(2, 3.1)); | |
25 | |
26 example.my_value = 15; | |
27 example.my_other_value = 2.1; | |
28 document.writeln(example.plus(example.my_value, example.my_other_value)); | |
29 } | |
30 </script> | |
31 */ | |
32 | |
33 #ifndef CPP_BINDING_EXAMPLE_H__ | |
34 #define CPP_BINDING_EXAMPLE_H__ | |
35 | |
36 #include "webkit/glue/cpp_bound_class.h" | |
37 | |
38 namespace webkit_glue { | |
39 | |
40 class CppBindingExample : public CppBoundClass { | |
41 public: | |
42 // The default constructor initializes the property and method lists needed | |
43 // to bind this class to a JS object. | |
44 CppBindingExample(); | |
45 | |
46 // | |
47 // These public member variables and methods implement the methods and | |
48 // properties that will be exposed to JavaScript. If needed, the class could | |
49 // also contain other methods or variables, which will be hidden from JS | |
50 // as long as they're not mapped in the property and method lists created in | |
51 // the constructor. | |
52 // | |
53 // The signatures of any methods to be bound must match | |
54 // CppBoundClass::Callback. | |
55 // | |
56 | |
57 // Returns the value that was passed in as its first (only) argument. | |
58 void echoValue(const CppArgumentList& args, CppVariant* result); | |
59 | |
60 // Returns a hard-coded value of the same type (bool, number (double), | |
61 // string, or null) that was passed in as an argument. | |
62 void echoType(const CppArgumentList& args, CppVariant* result); | |
63 | |
64 // Returns the sum of the (first) two arguments as a double, if they are both | |
65 // numbers (integers or doubles). Otherwise returns null. | |
66 void plus(const CppArgumentList& args, CppVariant* result); | |
67 | |
68 // Always returns the same value -- an example of a read-only property. | |
69 void same(CppVariant* result); | |
70 | |
71 // Invoked when a nonexistent method is called on this example object, this | |
72 // prints an error message. | |
73 void fallbackMethod(const CppArgumentList& args, CppVariant* result); | |
74 | |
75 // These properties will also be exposed to JavaScript. | |
76 CppVariant my_value; | |
77 CppVariant my_other_value; | |
78 }; | |
79 | |
80 } // namespace webkit_glue | |
81 | |
82 #endif // CPP_BINDING_EXAMPLE_H__ | |
OLD | NEW |