OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #ifndef CHROME_RENDERER_EXTENSIONS_NATIVE_HANDLER_H_ | 5 #ifndef CHROME_RENDERER_EXTENSIONS_NATIVE_HANDLER_H_ |
6 #define CHROME_RENDERER_EXTENSIONS_NATIVE_HANDLER_H_ | 6 #define CHROME_RENDERER_EXTENSIONS_NATIVE_HANDLER_H_ |
7 | 7 |
8 #include "base/bind.h" | 8 #include "base/bind.h" |
9 #include "base/memory/linked_ptr.h" | 9 #include "base/memory/linked_ptr.h" |
10 #include "v8/include/v8.h" | 10 #include "v8/include/v8.h" |
11 | 11 |
12 #include <string> | 12 #include <string> |
13 #include <vector> | 13 #include <vector> |
14 | 14 |
15 namespace extensions { | 15 namespace extensions { |
16 | 16 |
17 // A NativeHandler is a factory for JS objects with functions on them that map | 17 // A NativeHandler is a factory for JS objects with functions on them that map |
18 // to native C++ functions. Subclasses should call RouteFunction() in their | 18 // to native C++ functions. Subclasses should call RouteFunction() in their |
19 // constructor to define functions on the created JS objects. | 19 // constructor to define functions on the created JS objects. |
20 // | 20 // |
21 // NativeHandlers are intended to be used with a ModuleSystem. The ModuleSystem | 21 // NativeHandlers are intended to be used with a ModuleSystem. The ModuleSystem |
22 // will assume ownership of the NativeHandler, and as a ModuleSystem is tied to | 22 // will assume ownership of the NativeHandler, and as a ModuleSystem is tied to |
23 // a single v8::Context, this implies that NativeHandlers will also be tied to | 23 // a single v8::Context, this implies that NativeHandlers will also be tied to |
24 // a single v8::context. | 24 // a single v8::context. |
25 // TODO(koz): Rename this to NativeJavaScriptModule. | 25 // TODO(koz): Rename this to NativeJavaScriptModule. |
26 class NativeHandler { | 26 class NativeHandler { |
27 public: | 27 public: |
28 explicit NativeHandler(); | 28 NativeHandler(); |
29 virtual ~NativeHandler(); | 29 virtual ~NativeHandler(); |
30 | 30 |
31 // Create an object with bindings to the native functions defined through | 31 // Create an object with bindings to the native functions defined through |
32 // RouteFunction(). | 32 // RouteFunction(). |
33 virtual v8::Handle<v8::Object> NewInstance(); | 33 virtual v8::Handle<v8::Object> NewInstance(); |
34 | 34 |
35 protected: | 35 protected: |
36 typedef v8::Handle<v8::Value> (*HandlerFunc)(const v8::Arguments&); | 36 typedef v8::Handle<v8::Value> (*HandlerFunc)(const v8::Arguments&); |
37 typedef base::Callback<v8::Handle<v8::Value>(const v8::Arguments&)> | 37 typedef base::Callback<v8::Handle<v8::Value>(const v8::Arguments&)> |
38 HandlerFunction; | 38 HandlerFunction; |
(...skipping 12 matching lines...) Expand all Loading... |
51 | 51 |
52 std::vector<linked_ptr<HandlerFunction> > handler_functions_; | 52 std::vector<linked_ptr<HandlerFunction> > handler_functions_; |
53 v8::Persistent<v8::ObjectTemplate> object_template_; | 53 v8::Persistent<v8::ObjectTemplate> object_template_; |
54 | 54 |
55 DISALLOW_COPY_AND_ASSIGN(NativeHandler); | 55 DISALLOW_COPY_AND_ASSIGN(NativeHandler); |
56 }; | 56 }; |
57 | 57 |
58 } // extensions | 58 } // extensions |
59 | 59 |
60 #endif // CHROME_RENDERER_EXTENSIONS_NATIVE_HANDLER_H_ | 60 #endif // CHROME_RENDERER_EXTENSIONS_NATIVE_HANDLER_H_ |
OLD | NEW |