Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(406)

Unified Diff: Source/bindings/v8/ScriptPromiseResolver.cpp

Issue 23479016: Introduce Promise mapping to the IDL generator (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Created 7 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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);

Powered by Google App Engine
This is Rietveld 408576698