| Index: Source/bindings/v8/ScriptPromiseResolver.cpp
|
| diff --git a/Source/bindings/v8/ScriptPromiseResolver.cpp b/Source/bindings/v8/ScriptPromiseResolver.cpp
|
| index 6d51b49b3b17b58908f15409937f239e3a6e65fb..f21437e63a15f796a52b799ffb3fa9f9829996a7 100644
|
| --- a/Source/bindings/v8/ScriptPromiseResolver.cpp
|
| +++ b/Source/bindings/v8/ScriptPromiseResolver.cpp
|
| @@ -42,14 +42,37 @@
|
|
|
| namespace WebCore {
|
|
|
| -ScriptPromiseResolver::ScriptPromiseResolver(v8::Handle<v8::Object> creationContext, v8::Isolate* isolate)
|
| +ScriptPromiseResolver::ScriptPromiseResolver()
|
| +{
|
| + ASSERT(RuntimeEnabledFeatures::promiseEnabled());
|
| + v8::Isolate* isolate = v8::Isolate::GetCurrent();
|
| + m_isolate = isolate;
|
| +}
|
| +
|
| +ScriptPromiseResolver::ScriptPromiseResolver(ScriptValue resolver)
|
| + : m_resolver(resolver)
|
| +{
|
| + ASSERT(RuntimeEnabledFeatures::promiseEnabled());
|
| + ASSERT(!m_resolver.hasNoValue());
|
| + v8::Isolate* isolate = v8::Isolate::GetCurrent();
|
| + m_isolate = isolate;
|
| +}
|
| +
|
| +ScriptPromiseResolver::ScriptPromiseResolver(v8::Handle<v8::Value> resolver, v8::Isolate* isolate)
|
| : m_isolate(isolate)
|
| + , m_resolver(resolver)
|
| {
|
| ASSERT(RuntimeEnabledFeatures::promiseEnabled());
|
| - v8::Local<v8::Object> promise, resolver;
|
| - V8PromiseCustom::createPromise(creationContext, &promise, &resolver, isolate);
|
| - m_promise.set(isolate, promise);
|
| - m_resolver.set(isolate, resolver);
|
| + ASSERT(!m_resolver.hasNoValue());
|
| +}
|
| +
|
| +ScriptPromiseResolver::ScriptPromiseResolver(v8::Handle<v8::Value> resolver, v8::Handle<v8::Value> promise, v8::Isolate* isolate)
|
| + : m_isolate(isolate)
|
| + , m_resolver(resolver)
|
| + , m_promise(promise)
|
| +{
|
| + ASSERT(RuntimeEnabledFeatures::promiseEnabled());
|
| + ASSERT(!m_resolver.hasNoValue());
|
| }
|
|
|
| ScriptPromiseResolver::~ScriptPromiseResolver()
|
| @@ -61,19 +84,23 @@ ScriptPromiseResolver::~ScriptPromiseResolver()
|
| m_resolver.clear();
|
| }
|
|
|
| -PassRefPtr<ScriptPromiseResolver> ScriptPromiseResolver::create(ScriptExecutionContext* context)
|
| +ScriptPromiseResolver ScriptPromiseResolver::create(ScriptExecutionContext* context)
|
| {
|
| ASSERT(v8::Context::InContext());
|
| ASSERT(context);
|
| v8::Isolate* isolate = v8::Isolate::GetCurrent();
|
| - return adoptRef(new ScriptPromiseResolver(toV8Context(context, DOMWrapperWorld::current())->Global(), isolate));
|
| + v8::Local<v8::Object> promise, resolver;
|
| + V8PromiseCustom::createPromise(v8::Handle<v8::Object>(), &promise, &resolver, isolate);
|
| + return ScriptPromiseResolver(resolver, promise, isolate);
|
| }
|
|
|
| -PassRefPtr<ScriptPromiseResolver> ScriptPromiseResolver::create()
|
| +ScriptPromiseResolver ScriptPromiseResolver::create()
|
| {
|
| ASSERT(v8::Context::InContext());
|
| v8::Isolate* isolate = v8::Isolate::GetCurrent();
|
| - return adoptRef(new ScriptPromiseResolver(v8::Object::New(), isolate));
|
| + v8::Local<v8::Object> promise, resolver;
|
| + V8PromiseCustom::createPromise(v8::Handle<v8::Object>(), &promise, &resolver, isolate);
|
| + return ScriptPromiseResolver(resolver, promise, isolate);
|
| }
|
|
|
| bool ScriptPromiseResolver::isPending() const
|
| @@ -95,7 +122,7 @@ void ScriptPromiseResolver::fulfill(v8::Handle<v8::Value> value)
|
| ASSERT(v8::Context::InContext());
|
| if (!isPendingInternal())
|
| return;
|
| - V8PromiseCustom::fulfillResolver(m_resolver.newLocal(m_isolate), value, V8PromiseCustom::Asynchronous, m_isolate);
|
| + V8PromiseCustom::fulfillResolver(m_resolver.v8Value().As<v8::Object>(), value, V8PromiseCustom::Asynchronous, m_isolate);
|
| m_resolver.clear();
|
| }
|
|
|
| @@ -104,7 +131,7 @@ void ScriptPromiseResolver::resolve(v8::Handle<v8::Value> value)
|
| ASSERT(v8::Context::InContext());
|
| if (!isPendingInternal())
|
| return;
|
| - V8PromiseCustom::resolveResolver(m_resolver.newLocal(m_isolate), value, V8PromiseCustom::Asynchronous, m_isolate);
|
| + V8PromiseCustom::resolveResolver(m_resolver.v8Value().As<v8::Object>(), value, V8PromiseCustom::Asynchronous, m_isolate);
|
| m_resolver.clear();
|
| }
|
|
|
| @@ -113,7 +140,7 @@ void ScriptPromiseResolver::reject(v8::Handle<v8::Value> value)
|
| ASSERT(v8::Context::InContext());
|
| if (!isPendingInternal())
|
| return;
|
| - V8PromiseCustom::rejectResolver(m_resolver.newLocal(m_isolate), value, V8PromiseCustom::Asynchronous, m_isolate);
|
| + V8PromiseCustom::rejectResolver(m_resolver.v8Value().As<v8::Object>(), value, V8PromiseCustom::Asynchronous, m_isolate);
|
| m_resolver.clear();
|
| }
|
|
|
| @@ -138,9 +165,11 @@ void ScriptPromiseResolver::reject(ScriptValue value)
|
| bool ScriptPromiseResolver::isPendingInternal() const
|
| {
|
| ASSERT(v8::Context::InContext());
|
| - if (m_resolver.isEmpty())
|
| + if (m_resolver.hasNoValue())
|
| + return false;
|
| + if (!m_resolver.isObject())
|
| return false;
|
| - v8::Local<v8::Object> resolver = m_resolver.newLocal(m_isolate);
|
| + v8::Local<v8::Object> resolver = m_resolver.v8Value().As<v8::Object>();
|
| if (V8PromiseCustom::isInternalDetached(resolver))
|
| return false;
|
| v8::Local<v8::Object> internal = V8PromiseCustom::getInternal(resolver);
|
|
|