This source file includes following definitions.
- promise
- create
- create
- resolve
- reject
- resolve
- reject
#include "config.h"
#include "bindings/v8/ScriptPromiseResolver.h"
#include "RuntimeEnabledFeatures.h"
#include "bindings/v8/ScriptState.h"
#include "bindings/v8/ScriptValue.h"
#include "bindings/v8/V8Binding.h"
#include "bindings/v8/V8DOMWrapper.h"
#include "bindings/v8/custom/V8PromiseCustom.h"
#include <v8.h>
namespace WebCore {
ScriptPromiseResolver::ScriptPromiseResolver(ExecutionContext* context)
: m_isolate(toIsolate(context))
{
ASSERT(context);
v8::Isolate* isolate = toIsolate(context);
ASSERT(isolate->InContext());
if (RuntimeEnabledFeatures::scriptPromiseOnV8PromiseEnabled()) {
m_resolver = ScriptValue(v8::Promise::Resolver::New(isolate), isolate);
} else {
v8::Handle<v8::Context> v8Context = toV8Context(context, DOMWrapperWorld::current(isolate));
v8::Handle<v8::Object> creationContext = v8Context.IsEmpty() ? v8::Object::New(isolate) : v8Context->Global();
m_promise = ScriptPromise(V8PromiseCustom::createPromise(creationContext, isolate), isolate);
}
}
ScriptPromiseResolver::ScriptPromiseResolver(v8::Isolate* isolate)
: m_isolate(isolate)
{
ASSERT(isolate->InContext());
if (RuntimeEnabledFeatures::scriptPromiseOnV8PromiseEnabled()) {
m_resolver = ScriptValue(v8::Promise::Resolver::New(isolate), isolate);
} else {
m_promise = ScriptPromise(V8PromiseCustom::createPromise(v8::Object::New(isolate), isolate), isolate);
}
}
ScriptPromiseResolver::~ScriptPromiseResolver()
{
m_promise.clear();
m_resolver.clear();
}
ScriptPromise ScriptPromiseResolver::promise()
{
ASSERT(m_isolate->InContext());
if (!m_resolver.hasNoValue()) {
v8::Local<v8::Promise::Resolver> v8Resolver = m_resolver.v8Value().As<v8::Promise::Resolver>();
return ScriptPromise(v8Resolver->GetPromise(), m_isolate);
}
return m_promise;
}
PassRefPtr<ScriptPromiseResolver> ScriptPromiseResolver::create(ExecutionContext* context)
{
ASSERT(context);
ASSERT(toIsolate(context)->InContext());
return adoptRef(new ScriptPromiseResolver(context));
}
PassRefPtr<ScriptPromiseResolver> ScriptPromiseResolver::create(v8::Isolate* isolate)
{
ASSERT(isolate->InContext());
return adoptRef(new ScriptPromiseResolver(isolate));
}
void ScriptPromiseResolver::resolve(v8::Handle<v8::Value> value)
{
ASSERT(m_isolate->InContext());
if (!m_resolver.hasNoValue()) {
m_resolver.v8Value().As<v8::Promise::Resolver>()->Resolve(value);
} else if (!m_promise.hasNoValue()) {
v8::Local<v8::Object> promise = m_promise.v8Value().As<v8::Object>();
ASSERT(V8PromiseCustom::isPromise(promise, m_isolate));
V8PromiseCustom::resolve(promise, value, m_isolate);
}
m_promise.clear();
m_resolver.clear();
}
void ScriptPromiseResolver::reject(v8::Handle<v8::Value> value)
{
ASSERT(m_isolate->InContext());
if (!m_resolver.hasNoValue()) {
m_resolver.v8Value().As<v8::Promise::Resolver>()->Reject(value);
} else if (!m_promise.hasNoValue()) {
v8::Local<v8::Object> promise = m_promise.v8Value().As<v8::Object>();
ASSERT(V8PromiseCustom::isPromise(promise, m_isolate));
V8PromiseCustom::reject(promise, value, m_isolate);
}
m_promise.clear();
m_resolver.clear();
}
void ScriptPromiseResolver::resolve(ScriptValue value)
{
ASSERT(m_isolate->InContext());
resolve(value.v8Value());
}
void ScriptPromiseResolver::reject(ScriptValue value)
{
ASSERT(m_isolate->InContext());
reject(value.v8Value());
}
}