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); |