Chromium Code Reviews| Index: Source/bindings/v8/ScriptPromiseResolver.h |
| diff --git a/Source/bindings/v8/ScriptPromiseResolver.h b/Source/bindings/v8/ScriptPromiseResolver.h |
| index a4131babaf2de8f58507e433b80d720fad8075a4..6ac30464ee89cc6417a2c84743c2f9258e051128 100644 |
| --- a/Source/bindings/v8/ScriptPromiseResolver.h |
| +++ b/Source/bindings/v8/ScriptPromiseResolver.h |
| @@ -85,63 +85,79 @@ public: |
| // is called. |
| ScriptPromise promise(); |
| - // To use following template methods, T must be a DOM class. |
| - template<typename T> |
| - void resolve(T* value, v8::Handle<v8::Object> creationContext) { resolve(toV8NoInline(value, creationContext, m_isolate)); } |
| - template<typename T> |
| - void reject(T* value, v8::Handle<v8::Object> creationContext) { reject(toV8NoInline(value, creationContext, m_isolate)); } |
| - |
| - template<typename T> |
| - void resolve(PassRefPtr<T> value, v8::Handle<v8::Object> creationContext) { resolve(value.get(), creationContext); } |
| - template<typename T> |
| - void resolve(RawPtr<T> value, v8::Handle<v8::Object> creationContext) { resolve(value.get(), creationContext); } |
| - template<typename T> |
| - void reject(PassRefPtr<T> value, v8::Handle<v8::Object> creationContext) { reject(value.get(), creationContext); } |
| - template<typename T> |
| - void reject(RawPtr<T> value, v8::Handle<v8::Object> creationContext) { reject(value.get(), creationContext); } |
| - |
| - template<typename T> |
| - inline void resolve(T* value, ExecutionContext*); |
| - template<typename T> |
| - inline void reject(T* value, ExecutionContext*); |
| - |
| - template<typename T> |
| - void resolve(PassRefPtr<T> value, ExecutionContext* context) { resolve(value.get(), context); } |
| - template<typename T> |
| - void resolve(RawPtr<T> value, ExecutionContext* context) { resolve(value.get(), context); } |
| - template<typename T> |
| - void reject(PassRefPtr<T> value, ExecutionContext* context) { reject(value.get(), context); } |
| - template<typename T> |
| - void reject(RawPtr<T> value, ExecutionContext* context) { reject(value.get(), context); } |
| - |
| - template<typename T> |
| - inline void resolve(T* value); |
| - template<typename T> |
| - inline void reject(T* value); |
| - |
| - template<typename T, size_t inlineCapacity> |
| - void resolve(const Vector<T, inlineCapacity>& iterator) { resolve(v8ArrayNoInline(iterator, m_isolate)); } |
| - template<typename T, size_t inlineCapacity> |
| - void reject(const Vector<T, inlineCapacity>& iterator) { reject(v8ArrayNoInline(iterator, m_isolate)); } |
| - |
| - template<typename T> |
| - void resolve(PassRefPtr<T> value) { resolve(value.get()); } |
| - template<typename T> |
| - void resolve(RawPtr<T> value) { resolve(value.get()); } |
| - template<typename T> |
| - void reject(PassRefPtr<T> value) { reject(value.get()); } |
| - template<typename T> |
| - void reject(RawPtr<T> value) { reject(value.get()); } |
| - |
| - void resolve(ScriptValue); |
| - void reject(ScriptValue); |
| - |
| - v8::Isolate* isolate() const { return m_isolate; } |
| + template <typename T> |
| + void resolve(T value) |
| + { |
| + ASSERT(m_isolate->InContext()); |
| + resolve(value, v8::Object::New(m_isolate)); |
|
haraken
2014/04/18 03:59:58
Do you want to create a new object just for gettin
|
| + } |
| + template <typename T> |
| + inline void reject(T value) |
| + { |
| + ASSERT(m_isolate->InContext()); |
| + reject(value, v8::Object::New(m_isolate)); |
|
haraken
2014/04/18 03:59:58
Ditto.
|
| + } |
| + |
| + template <typename T> |
| + inline void resolve(T value, ExecutionContext* context) |
| + { |
| + ASSERT(m_isolate->InContext()); |
| + resolve(toV8Value(value, context)); |
| + } |
| + template <typename T> |
| + inline void reject(T value, ExecutionContext* context) |
| + { |
| + ASSERT(m_isolate->InContext()); |
| + reject(toV8Value(value, context)); |
| + } |
| + template <typename T> |
| + inline void resolve(T value, v8::Handle<v8::Object> creationContext) |
| + { |
| + ASSERT(m_isolate->InContext()); |
| + resolve(toV8Value(value, creationContext)); |
| + } |
| + template <typename T> |
| + inline void reject(T value, v8::Handle<v8::Object> creationContext) |
| + { |
| + ASSERT(m_isolate->InContext()); |
| + reject(toV8Value(value, creationContext)); |
| + } |
| void resolve(v8::Handle<v8::Value>); |
| void reject(v8::Handle<v8::Value>); |
| + v8::Isolate* isolate() const { return m_isolate; } |
| + |
| private: |
| + |
| + template <typename T> |
| + struct ToV8ValueHelper { |
| + static v8::Handle<v8::Value> toV8Value(const T& value, ExecutionContext* context, v8::Isolate* isolate) |
| + { |
| + v8::Handle<v8::Context> v8Context = toV8Context(context, DOMWrapperWorld::current(isolate)); |
|
haraken
2014/04/18 03:59:58
Not related to this CL, I think it's wrong to use
|
| + return V8ValueTraits<T>::toV8Value(value, v8Context->Global(), isolate); |
| + } |
| + static v8::Handle<v8::Value> toV8Value(const T& value, v8::Handle<v8::Object> creationContext, v8::Isolate* isolate) |
| + { |
| + return V8ValueTraits<T>::toV8Value(value, creationContext, isolate); |
| + } |
| + static v8::Handle<v8::Value> toV8Value(const T& value, v8::Isolate* isolate) |
| + { |
| + return V8ValueTraits<T>::toV8Value(value, isolate); |
| + } |
| + }; |
| + |
| + template <typename T> |
| + v8::Handle<v8::Value> toV8Value(const T& value, ExecutionContext* context) |
| + { |
| + return WebCore::ToV8ValueHelper<ExecutionContext*, ToV8ValueHelper<T> >::toV8Value(value, context, m_isolate); |
| + } |
| + template <typename T> |
| + v8::Handle<v8::Value> toV8Value(const T& value, v8::Handle<v8::Object> creationContext) |
| + { |
| + return WebCore::ToV8ValueHelper<v8::Handle<v8::Object>, ToV8ValueHelper<T> >::toV8Value(value, creationContext, m_isolate); |
| + } |
| + |
| ScriptPromiseResolver(ExecutionContext*); |
| ScriptPromiseResolver(v8::Isolate*); |
| @@ -152,36 +168,6 @@ private: |
| ScriptValue m_resolver; |
| }; |
| -template<typename T> |
| -void ScriptPromiseResolver::resolve(T* value, ExecutionContext* context) |
| -{ |
| - ASSERT(m_isolate->InContext()); |
| - v8::Handle<v8::Context> v8Context = toV8Context(context, DOMWrapperWorld::current(m_isolate)); |
| - resolve(value, v8Context->Global()); |
| -} |
| - |
| -template<typename T> |
| -void ScriptPromiseResolver::reject(T* value, ExecutionContext* context) |
| -{ |
| - ASSERT(m_isolate->InContext()); |
| - v8::Handle<v8::Context> v8Context = toV8Context(context, DOMWrapperWorld::current(m_isolate)); |
| - reject(value, v8Context->Global()); |
| -} |
| - |
| -template<typename T> |
| -void ScriptPromiseResolver::resolve(T* value) |
| -{ |
| - ASSERT(m_isolate->InContext()); |
| - resolve(value, v8::Object::New(m_isolate)); |
| -} |
| - |
| -template<typename T> |
| -void ScriptPromiseResolver::reject(T* value) |
| -{ |
| - ASSERT(m_isolate->InContext()); |
| - reject(value, v8::Object::New(m_isolate)); |
| -} |
| - |
| } // namespace WebCore |