| Index: gin/wrappable.h
|
| diff --git a/gin/wrappable.h b/gin/wrappable.h
|
| index 755707166bb3c39fa19e4365eda69239d860f07c..fccca1ac4aa46d03a228fac26d05ce2da116209e 100644
|
| --- a/gin/wrappable.h
|
| +++ b/gin/wrappable.h
|
| @@ -27,11 +27,22 @@ GIN_EXPORT void* FromV8Impl(v8::Isolate* isolate,
|
| // USAGE:
|
| // // my_class.h
|
| // class MyClass : Wrappable<MyClass> {
|
| +// public:
|
| +// static WrapperInfo kWrapperInfo;
|
| +//
|
| +// // Optional, only required if non-empty template should be used.
|
| +// static v8::Local<v8::ObjectTemplate> GetObjectTemplate(
|
| +// v8::Isolate* isolate);
|
| // ...
|
| // };
|
| //
|
| // // my_class.cc
|
| -// INIT_WRAPABLE(MyClass);
|
| +// WrapperInfo MyClass::kWrapperInfo = { kEmbedderNativeGin };
|
| +//
|
| +// v8::Local<v8::ObjectTemplate> MyClass::GetObjectTemplate(
|
| +// v8::Isolate* isolate) {
|
| +// return ObjectTemplateBuilder(isolate).SetValue("foobar", 42).Build();
|
| +// }
|
| //
|
| // Subclasses should also typically have private constructors and expose a
|
| // static Create function that returns a gin::Handle. Forcing creators through
|
| @@ -46,18 +57,30 @@ class Wrappable;
|
| // Non-template base class to share code between templates instances.
|
| class GIN_EXPORT WrappableBase {
|
| protected:
|
| + typedef v8::Local<v8::ObjectTemplate>(*GetObjectTemplateFunction)(
|
| + v8::Isolate*);
|
| +
|
| WrappableBase();
|
| virtual ~WrappableBase();
|
| - v8::Handle<v8::Object> GetWrapperImpl(v8::Isolate* isolate,
|
| - WrapperInfo* wrapper_info);
|
| - v8::Handle<v8::Object> CreateWrapper(v8::Isolate* isolate,
|
| - WrapperInfo* wrapper_info);
|
| - v8::Persistent<v8::Object> wrapper_; // Weak
|
| +
|
| + v8::Handle<v8::Object> GetWrapperImpl(
|
| + v8::Isolate* isolate,
|
| + WrapperInfo* wrapper_info,
|
| + GetObjectTemplateFunction template_getter);
|
| +
|
| + static v8::Local<v8::ObjectTemplate> GetObjectTemplate(v8::Isolate* isolate);
|
|
|
| private:
|
| static void WeakCallback(
|
| const v8::WeakCallbackData<v8::Object, WrappableBase>& data);
|
|
|
| + v8::Handle<v8::Object> CreateWrapper(
|
| + v8::Isolate* isolate,
|
| + WrapperInfo* wrapper_info,
|
| + GetObjectTemplateFunction template_getter);
|
| +
|
| + v8::Persistent<v8::Object> wrapper_; // Weak
|
| +
|
| DISALLOW_COPY_AND_ASSIGN(WrappableBase);
|
| };
|
|
|
| @@ -69,7 +92,7 @@ class Wrappable : public WrappableBase {
|
| // To customize the wrapper created for a subclass, override GetWrapperInfo()
|
| // instead of overriding this function.
|
| v8::Handle<v8::Object> GetWrapper(v8::Isolate* isolate) {
|
| - return GetWrapperImpl(isolate, &T::kWrapperInfo);
|
| + return GetWrapperImpl(isolate, &T::kWrapperInfo, &T::GetObjectTemplate);
|
| }
|
|
|
| protected:
|
|
|