summaryrefslogtreecommitdiffstats
path: root/gin
diff options
context:
space:
mode:
authorjochen@chromium.org <jochen@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-12-11 19:41:01 +0000
committerjochen@chromium.org <jochen@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-12-11 19:41:01 +0000
commit695af7f53d8e321200c3370934b5a1b29a051df9 (patch)
treefbbb4d70d274b4e4474e55fd89ef7d856db8e838 /gin
parent2a77ba21711ec61237868404810ac665e6da52c7 (diff)
downloadchromium_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.h4
-rw-r--r--gin/wrappable.h17
-rw-r--r--gin/wrappable_unittest.cc2
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_;
};