diff options
author | tc@google.com <tc@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2008-10-01 22:31:35 +0000 |
---|---|---|
committer | tc@google.com <tc@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2008-10-01 22:31:35 +0000 |
commit | de56f378336660dcc848763c80267a5e063ae47d (patch) | |
tree | 7f551b88923b35bc4022ce6ab3a3f602fb60d91c /webkit/port/bindings/v8/v8_proxy.h | |
parent | dc4f63c80cb90efe594131030aad6776e5945fcc (diff) | |
download | chromium_src-de56f378336660dcc848763c80267a5e063ae47d.zip chromium_src-de56f378336660dcc848763c80267a5e063ae47d.tar.gz chromium_src-de56f378336660dcc848763c80267a5e063ae47d.tar.bz2 |
Merge the chrome_webkit_merge_branch back on to trunk. This brings us
up to webkit@36102.
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@2778 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'webkit/port/bindings/v8/v8_proxy.h')
-rw-r--r-- | webkit/port/bindings/v8/v8_proxy.h | 18 |
1 files changed, 14 insertions, 4 deletions
diff --git a/webkit/port/bindings/v8/v8_proxy.h b/webkit/port/bindings/v8/v8_proxy.h index 94f0450..784d763 100644 --- a/webkit/port/bindings/v8/v8_proxy.h +++ b/webkit/port/bindings/v8/v8_proxy.h @@ -13,6 +13,7 @@ #include "NodeFilter.h" #include "PlatformString.h" // for WebCore::String #include <wtf/HashMap.h> // for HashMap +#include <wtf/PassRefPtr.h> // so generated bindings don't have to #include <wtf/Assertions.h> #include <iterator> @@ -331,6 +332,11 @@ class V8Proxy { return static_cast<C*>(ExtractCPointer<Node>(wrapper)); } + template<typename T> + static v8::Handle<v8::Value> ToV8Object(V8ClassIndex::V8WrapperType type, PassRefPtr<T> imp) + { + return ToV8Object(type, imp.get()); + } static v8::Handle<v8::Value> ToV8Object(V8ClassIndex::V8WrapperType type, void* imp); // Fast-path for Node objects. @@ -378,7 +384,7 @@ class V8Proxy { DOMImplementation* impl); // Wrap JS node filter in C++ - static NodeFilter* ToNativeNodeFilter(v8::Handle<v8::Value> filter); + static PassRefPtr<NodeFilter> ToNativeNodeFilter(v8::Handle<v8::Value> filter); static v8::Persistent<v8::FunctionTemplate> GetTemplate( V8ClassIndex::V8WrapperType type); @@ -518,10 +524,14 @@ v8::Handle<v8::Value> V8Proxy::ConstructDOMObject(const v8::Arguments& args) { "DOM object constructor cannot be called as a function."); return v8::Undefined(); } - T* obj = new T(); - V8Proxy::SetDOMWrapper(args.Holder(), tag, obj); + + + // Note: it's OK to let this RefPtr go out of scope because we also call + // SetDOMWrapper(), which effectively holds a reference to obj. + RefPtr<T> obj = T::create(); + V8Proxy::SetDOMWrapper(args.Holder(), tag, obj.get()); V8Proxy::SetJSWrapperForDOMObject( - obj, v8::Persistent<v8::Object>::New(args.Holder())); + obj.get(), v8::Persistent<v8::Object>::New(args.Holder())); return args.Holder(); } |