Chromium Code Reviews| Index: gin/wrappable.h |
| diff --git a/gin/wrappable.h b/gin/wrappable.h |
| index 755707166bb3c39fa19e4365eda69239d860f07c..41cf38de4055b048a3eacf78acd9a27df75865b5 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).Build(); |
|
Aaron Boodman
2013/12/17 17:58:21
Can you add a few example calls to SetMethod and S
|
| +// } |
| // |
| // 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: |