Index: chrome/renderer/extensions/native_handler.h |
diff --git a/chrome/renderer/extensions/native_handler.h b/chrome/renderer/extensions/native_handler.h |
index dbe6a636131a1cdd89e1af108aae0f7df05a4792..95b003250987988f4cca0f7d86598710a940f5b4 100644 |
--- a/chrome/renderer/extensions/native_handler.h |
+++ b/chrome/renderer/extensions/native_handler.h |
@@ -5,53 +5,38 @@ |
#ifndef CHROME_RENDERER_EXTENSIONS_NATIVE_HANDLER_H_ |
#define CHROME_RENDERER_EXTENSIONS_NATIVE_HANDLER_H_ |
-#include "base/bind.h" |
-#include "base/memory/linked_ptr.h" |
-#include "chrome/renderer/extensions/scoped_persistent.h" |
+#include "base/basictypes.h" |
#include "v8/include/v8.h" |
-#include <string> |
-#include <vector> |
- |
namespace extensions { |
-// A NativeHandler is a factory for JS objects with functions on them that map |
-// to native C++ functions. Subclasses should call RouteFunction() in their |
-// constructor to define functions on the created JS objects. |
-// |
// NativeHandlers are intended to be used with a ModuleSystem. The ModuleSystem |
// will assume ownership of the NativeHandler, and as a ModuleSystem is tied to |
// a single v8::Context, this implies that NativeHandlers will also be tied to |
-// a single v8::context. |
+// a single v8::Context. |
// TODO(koz): Rename this to NativeJavaScriptModule. |
class NativeHandler { |
public: |
- explicit NativeHandler(v8::Isolate* isolate); |
+ NativeHandler(); |
virtual ~NativeHandler(); |
- // Create an object with bindings to the native functions defined through |
- // RouteFunction(). |
- virtual v8::Handle<v8::Object> NewInstance(); |
- |
- protected: |
- typedef v8::Handle<v8::Value> (*HandlerFunc)(const v8::Arguments&); |
- typedef base::Callback<v8::Handle<v8::Value>(const v8::Arguments&)> |
- HandlerFunction; |
+ // Create a new instance of the object this handler specifies. |
+ virtual v8::Handle<v8::Object> NewInstance() = 0; |
- // Installs a new 'route' from |name| to |handler_function|. This means that |
- // NewInstance()s of this NativeHandler will have a property |name| which |
- // will be handled by |handler_function|. |
- void RouteFunction(const std::string& name, |
- const HandlerFunction& handler_function); |
+ // Invalidate this object so it cannot be used any more. This is needed |
+ // because it's possible for this to outlive its owner context. Invalidate |
+ // must be called before this happens. |
+ // |
+ // Subclasses should override to invalidate their own V8 state. If they do |
+ // they must call their superclass' Invalidate(). |
+ virtual void Invalidate(); |
- void RouteStaticFunction(const std::string& name, |
- const HandlerFunc handler_func); |
+ protected: |
+ // Allow subclasses to query valid state. |
+ bool is_valid() { return is_valid_; } |
private: |
- static v8::Handle<v8::Value> Router(const v8::Arguments& args); |
- |
- std::vector<linked_ptr<HandlerFunction> > handler_functions_; |
- ScopedPersistent<v8::ObjectTemplate> object_template_; |
+ bool is_valid_; |
DISALLOW_COPY_AND_ASSIGN(NativeHandler); |
}; |