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