| Index: Source/bindings/v8/ScriptPromiseResolver.h
|
| diff --git a/Source/bindings/v8/ScriptPromiseResolver.h b/Source/bindings/v8/ScriptPromiseResolver.h
|
| index a4131babaf2de8f58507e433b80d720fad8075a4..1b01b92121277c21b7b001670950b42bf8ab6834 100644
|
| --- a/Source/bindings/v8/ScriptPromiseResolver.h
|
| +++ b/Source/bindings/v8/ScriptPromiseResolver.h
|
| @@ -31,11 +31,8 @@
|
| #ifndef ScriptPromiseResolver_h
|
| #define ScriptPromiseResolver_h
|
|
|
| -#include "bindings/v8/DOMWrapperWorld.h"
|
| -#include "bindings/v8/ScopedPersistent.h"
|
| -#include "bindings/v8/ScriptObject.h"
|
| +#include "bindings/v8/NewScriptState.h"
|
| #include "bindings/v8/ScriptPromise.h"
|
| -#include "bindings/v8/ScriptState.h"
|
| #include "bindings/v8/ScriptValue.h"
|
| #include "bindings/v8/V8Binding.h"
|
| #include "wtf/RefPtr.h"
|
| @@ -58,8 +55,8 @@ class ExecutionContext;
|
| //
|
| // Most methods including constructors must be called within a v8 context.
|
| // To use ScriptPromiseResolver out of a v8 context the caller must
|
| -// enter a v8 context. ScriptPromiseResolverWithContext provides such
|
| -// functionality.
|
| +// enter a v8 context. Please use ScriptPromiseResolverWithContext
|
| +// in such cases.
|
| //
|
| // To prevent memory leaks, you should release the reference manually
|
| // by calling resolve or reject.
|
| @@ -85,63 +82,100 @@ 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)); }
|
| + void resolve(const T& value, ExecutionContext* executionContext)
|
| + {
|
| + ASSERT(m_isolate->InContext());
|
| + // You should use ScriptPromiseResolverWithContext when you want
|
| + // to resolve a Promise in a non-original V8 context.
|
| + return resolve(value);
|
| + }
|
| + template<typename T>
|
| + void reject(const T& value, ExecutionContext* executionContext)
|
| + {
|
| + ASSERT(m_isolate->InContext());
|
| + // You should use ScriptPromiseResolverWithContext when you want
|
| + // to reject a Promise in a non-original V8 context.
|
| + return reject(value);
|
| + }
|
| + template<typename T>
|
| + void resolve(const T& value)
|
| + {
|
| + ASSERT(m_isolate->InContext());
|
| + resolve(toV8Value(value));
|
| + }
|
| + template<typename T>
|
| + void reject(const T& value)
|
| + {
|
| + ASSERT(m_isolate->InContext());
|
| + reject(toV8Value(value));
|
| + }
|
| + template<typename T> void resolve(const T& value, v8::Handle<v8::Object> creationContext)
|
| + {
|
| + ASSERT(m_isolate->InContext());
|
| + resolve(toV8Value(value, creationContext));
|
| + }
|
| + template<typename T> void reject(const T& value, v8::Handle<v8::Object> creationContext)
|
| + {
|
| + ASSERT(m_isolate->InContext());
|
| + reject(toV8Value(value, creationContext));
|
| + }
|
|
|
| - 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); }
|
| + v8::Isolate* isolate() const { return m_isolate; }
|
|
|
| - template<typename T>
|
| - inline void resolve(T* value, ExecutionContext*);
|
| - template<typename T>
|
| - inline void reject(T* value, ExecutionContext*);
|
| + void resolve(v8::Handle<v8::Value>);
|
| + void reject(v8::Handle<v8::Value>);
|
|
|
| +private:
|
| 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); }
|
| + v8::Handle<v8::Value> toV8Value(const T& value, v8::Handle<v8::Object>)
|
| + {
|
| + // Default implementaion: for types that don't need the
|
| + // creation context.
|
| + return toV8Value(value);
|
| + }
|
| template<typename T>
|
| - void reject(RawPtr<T> value, ExecutionContext* context) { reject(value.get(), context); }
|
| + v8::Handle<v8::Value> toV8Value(const T& value)
|
| + {
|
| + return V8ValueTraits<T>::toV8Value(value, m_isolate);
|
| + }
|
|
|
| + // Pointer specializations.
|
| template<typename T>
|
| - inline void resolve(T* value);
|
| + v8::Handle<v8::Value> toV8Value(T* value, v8::Handle<v8::Object> creationContext)
|
| + {
|
| + return toV8NoInline(value, creationContext, m_isolate);
|
| + }
|
| 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)); }
|
| -
|
| + v8::Handle<v8::Value> toV8Value(T* value)
|
| + {
|
| + return toV8Value(value, NewScriptState::current(m_isolate)->context()->Global());
|
| + }
|
| template<typename T>
|
| - void resolve(PassRefPtr<T> value) { resolve(value.get()); }
|
| + v8::Handle<v8::Value> toV8Value(RefPtr<T> value, v8::Handle<v8::Object> creationContext) { return toV8Value(value.get(), creationContext); }
|
| template<typename T>
|
| - void resolve(RawPtr<T> value) { resolve(value.get()); }
|
| + v8::Handle<v8::Value> toV8Value(PassRefPtr<T> value, v8::Handle<v8::Object> creationContext) { return toV8Value(value.get(), creationContext); }
|
| template<typename T>
|
| - void reject(PassRefPtr<T> value) { reject(value.get()); }
|
| + v8::Handle<v8::Value> toV8Value(OwnPtr<T> value, v8::Handle<v8::Object> creationContext) { return toV8Value(value.get(), creationContext); }
|
| template<typename T>
|
| - void reject(RawPtr<T> value) { reject(value.get()); }
|
| -
|
| - void resolve(ScriptValue);
|
| - void reject(ScriptValue);
|
| -
|
| - v8::Isolate* isolate() const { return m_isolate; }
|
| + v8::Handle<v8::Value> toV8Value(PassOwnPtr<T> value, v8::Handle<v8::Object> creationContext) { return toV8Value(value.get(), creationContext); }
|
| + template<typename T>
|
| + v8::Handle<v8::Value> toV8Value(RawPtr<T> value, v8::Handle<v8::Object> creationContext) { return toV8Value(value.get(), creationContext); }
|
| + template<typename T> v8::Handle<v8::Value> toV8Value(RefPtr<T> value) { return toV8Value(value.get()); }
|
| + template<typename T> v8::Handle<v8::Value> toV8Value(PassRefPtr<T> value) { return toV8Value(value.get()); }
|
| + template<typename T> v8::Handle<v8::Value> toV8Value(OwnPtr<T> value) { return toV8Value(value.get()); }
|
| + template<typename T> v8::Handle<v8::Value> toV8Value(PassOwnPtr<T> value) { return toV8Value(value.get()); }
|
| + template<typename T> v8::Handle<v8::Value> toV8Value(RawPtr<T> value) { return toV8Value(value.get()); }
|
|
|
| - void resolve(v8::Handle<v8::Value>);
|
| - void reject(v8::Handle<v8::Value>);
|
| + // const char* should use V8ValueTraits.
|
| + v8::Handle<v8::Value> toV8Value(const char* value, v8::Handle<v8::Object>) { return toV8Value(value); }
|
| + v8::Handle<v8::Value> toV8Value(const char* value) { return V8ValueTraits<const char*>::toV8Value(value, m_isolate); }
|
|
|
| -private:
|
| + template<typename T, size_t inlineCapacity>
|
| + v8::Handle<v8::Value> toV8Value(const Vector<T, inlineCapacity>& value)
|
| + {
|
| + return v8ArrayNoInline(value, m_isolate);
|
| + }
|
| ScriptPromiseResolver(ExecutionContext*);
|
| ScriptPromiseResolver(v8::Isolate*);
|
|
|
| @@ -152,36 +186,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
|
|
|
|
|
|
|