summaryrefslogtreecommitdiffstats
path: root/webkit/port/bindings/v8/v8_proxy.h
diff options
context:
space:
mode:
authortc@google.com <tc@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2008-10-01 22:31:35 +0000
committertc@google.com <tc@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2008-10-01 22:31:35 +0000
commitde56f378336660dcc848763c80267a5e063ae47d (patch)
tree7f551b88923b35bc4022ce6ab3a3f602fb60d91c /webkit/port/bindings/v8/v8_proxy.h
parentdc4f63c80cb90efe594131030aad6776e5945fcc (diff)
downloadchromium_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.h18
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();
}