diff options
author | jochen@chromium.org <jochen@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-12-11 19:41:01 +0000 |
---|---|---|
committer | jochen@chromium.org <jochen@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-12-11 19:41:01 +0000 |
commit | 695af7f53d8e321200c3370934b5a1b29a051df9 (patch) | |
tree | fbbb4d70d274b4e4474e55fd89ef7d856db8e838 /gin | |
parent | 2a77ba21711ec61237868404810ac665e6da52c7 (diff) | |
download | chromium_src-695af7f53d8e321200c3370934b5a1b29a051df9.zip chromium_src-695af7f53d8e321200c3370934b5a1b29a051df9.tar.gz chromium_src-695af7f53d8e321200c3370934b5a1b29a051df9.tar.bz2 |
[gin] WrappableBase's dtor needs to be virtual
Otherwise, the weak callback won't run the dtor of derived classes.
Also clarify that the INIT_WRAPPABLE() macro needs to be called in
namespace gin.
BUG=none
R=aa@chromium.org
Review URL: https://codereview.chromium.org/93903003
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@240154 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'gin')
-rw-r--r-- | gin/function_template.h | 4 | ||||
-rw-r--r-- | gin/wrappable.h | 17 | ||||
-rw-r--r-- | gin/wrappable_unittest.cc | 2 |
3 files changed, 13 insertions, 10 deletions
diff --git a/gin/function_template.h b/gin/function_template.h index 86ca1a62..37f4065 100644 --- a/gin/function_template.h +++ b/gin/function_template.h @@ -60,7 +60,7 @@ struct CallbackParamTraits<const T*> { // among every CallbackHolder instance. class CallbackHolderBase : public Wrappable<CallbackHolderBase> { protected: - ~CallbackHolderBase() {} + virtual ~CallbackHolderBase() {} }; template<typename Sig> @@ -71,7 +71,7 @@ class CallbackHolder : public CallbackHolderBase { base::Callback<Sig> callback; int flags; private: - ~CallbackHolder() {} + virtual ~CallbackHolder() {} }; diff --git a/gin/wrappable.h b/gin/wrappable.h index 3f9ebe3..5644591 100644 --- a/gin/wrappable.h +++ b/gin/wrappable.h @@ -45,7 +45,7 @@ class Wrappable; class WrappableBase { protected: WrappableBase(); - ~WrappableBase(); + virtual ~WrappableBase(); v8::Handle<v8::Object> GetWrapperImpl(v8::Isolate* isolate, WrapperInfo* wrapper_info); v8::Handle<v8::Object> CreateWrapper(v8::Isolate* isolate, @@ -74,17 +74,20 @@ class Wrappable : public WrappableBase { protected: Wrappable() {} - ~Wrappable() {} + virtual ~Wrappable() {} + + private: DISALLOW_COPY_AND_ASSIGN(Wrappable); }; // Subclasses of Wrappable must call this within a cc file to initialize their -// WrapperInfo. -#define INIT_WRAPPABLE(TYPE) \ -template<> \ -gin::WrapperInfo gin::Wrappable<TYPE>::kWrapperInfo = { kEmbedderNativeGin }; - +// WrapperInfo. This template must be used inside namespace gin. +#define INIT_WRAPPABLE(TYPE) \ + template <> \ + gin::WrapperInfo gin::Wrappable<TYPE>::kWrapperInfo = { \ + gin::kEmbedderNativeGin \ + } // This converter handles any subclass of Wrappable. template<typename T> diff --git a/gin/wrappable_unittest.cc b/gin/wrappable_unittest.cc index b2b859f..7ffc0ca 100644 --- a/gin/wrappable_unittest.cc +++ b/gin/wrappable_unittest.cc @@ -26,7 +26,7 @@ class MyObject : public Wrappable<MyObject> { private: MyObject() : value_(0) {} - ~MyObject() {} + virtual ~MyObject() {} int value_; }; |