| Index: gin/wrappable.h
|
| diff --git a/gin/wrappable.h b/gin/wrappable.h
|
| index bad7958adab4cae788e9b257545e99e0ade4f812..333a31cedf4a24aa2ccc31b8efdd4f18bcf2dad4 100644
|
| --- a/gin/wrappable.h
|
| +++ b/gin/wrappable.h
|
| @@ -5,25 +5,15 @@
|
| #ifndef GIN_WRAPPABLE_H_
|
| #define GIN_WRAPPABLE_H_
|
|
|
| -#include "base/memory/ref_counted.h"
|
| #include "gin/converter.h"
|
| #include "gin/public/wrapper_info.h"
|
|
|
| namespace gin {
|
|
|
| // Wrappable is an abstract base class for C++ objects that have cooresponding
|
| -// v8 wrapper objects. Wrappable are RefCounted, which means they can be
|
| -// retained either by V8's garbage collector or by a scoped_refptr.
|
| -//
|
| -// WARNING: If you retain a Wrappable object with a scoped_refptr, it's possible
|
| -// that the v8 wrapper can "fall off" if the wrapper object is not
|
| -// referenced elsewhere in the V8 heap. Although Wrappable opens a
|
| -// handle to the wrapper object, we make that handle as weak, which
|
| -// means V8 is free to reclaim the wrapper. (We can't make the handle
|
| -// strong without risking introducing a memory leak if an object that
|
| -// holds a scoped_refptr is reachable from the wrapper.)
|
| -//
|
| -class Wrappable : public base::RefCounted<Wrappable> {
|
| +// v8 wrapper objects. To retain a Wrappable object on the stack, use a
|
| +// gin::Handle.
|
| +class Wrappable {
|
| public:
|
| // Subclasses must return the WrapperInfo object associated with the
|
| // v8::ObjectTemplate for their subclass. When creating a v8 wrapper for
|
| @@ -51,12 +41,18 @@ class Wrappable : public base::RefCounted<Wrappable> {
|
| // instead of overriding this function.
|
| v8::Handle<v8::Object> GetWrapper(v8::Isolate* isolate);
|
|
|
| + // Subclasses should have private constructors and expose a static Create
|
| + // function that returns a gin::Handle. Forcing creators through this static
|
| + // Create function will enforce that clients actually create a wrapper for
|
| + // the object. If clients fail to create a wrapper for a wrappable object,
|
| + // the object will leak because we use the weak callback from the wrapper
|
| + // as the signal to delete the wrapped object.
|
| +
|
| protected:
|
| Wrappable();
|
| virtual ~Wrappable();
|
|
|
| private:
|
| - friend class base::RefCounted<Wrappable>;
|
| friend struct Converter<Wrappable*>;
|
|
|
| static void WeakCallback(
|
|
|