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

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

Issue 26004002: Decouple ScriptPromise creation from ScriptPromiseResolver. (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: rebase Created 7 years, 2 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 78824907e1136b5d2a72f72c337afb9446e7c0a6..80306c2590e0de9beb54da4f2fc895068dc5af5b 100644
--- a/Source/bindings/v8/ScriptPromiseResolver.cpp
+++ b/Source/bindings/v8/ScriptPromiseResolver.cpp
@@ -42,90 +42,53 @@
namespace WebCore {
-ScriptPromiseResolver::ScriptPromiseResolver(v8::Handle<v8::Object> creationContext, v8::Isolate* isolate)
+ScriptPromiseResolver::ScriptPromiseResolver(ScriptPromise promise, v8::Isolate* isolate)
: m_isolate(isolate)
- , m_promiseForExposeDetached(false)
- , m_promiseForResolveDetached(false)
+ , m_promise(promise)
{
ASSERT(RuntimeEnabledFeatures::promiseEnabled());
- v8::Local<v8::Object> promise = V8PromiseCustom::createPromise(creationContext, isolate);
- m_promise = ScriptPromise(promise, isolate);
}
ScriptPromiseResolver::~ScriptPromiseResolver()
{
- // We don't call "detach" here because it requires a caller
+ // We don't call "reject" here because it requires a caller
// to be in a v8 context.
- detachPromiseForExpose();
- detachPromiseForResolve();
+ m_promise.clear();
}
-void ScriptPromiseResolver::detachPromise()
-{
- detachPromiseForExpose();
-}
-
-void ScriptPromiseResolver::detachPromiseForExpose()
-{
- m_promiseForExposeDetached = true;
- if (m_promiseForResolveDetached)
- m_promise.clear();
-}
-
-void ScriptPromiseResolver::detachPromiseForResolve()
-{
- m_promiseForResolveDetached = true;
- if (m_promiseForExposeDetached)
- m_promise.clear();
-}
-
-PassRefPtr<ScriptPromiseResolver> ScriptPromiseResolver::create(ExecutionContext* context)
+PassRefPtr<ScriptPromiseResolver> ScriptPromiseResolver::create(ScriptPromise promise, ExecutionContext* context)
{
ASSERT(v8::Context::InContext());
ASSERT(context);
- return adoptRef(new ScriptPromiseResolver(toV8Context(context, DOMWrapperWorld::current())->Global(), toIsolate(context)));
+ return adoptRef(new ScriptPromiseResolver(promise, toIsolate(context)));
}
-PassRefPtr<ScriptPromiseResolver> ScriptPromiseResolver::create()
+PassRefPtr<ScriptPromiseResolver> ScriptPromiseResolver::create(ScriptPromise promise)
{
ASSERT(v8::Context::InContext());
v8::Isolate* isolate = v8::Isolate::GetCurrent();
- return adoptRef(new ScriptPromiseResolver(v8::Object::New(), isolate));
+ return adoptRef(new ScriptPromiseResolver(promise, isolate));
}
bool ScriptPromiseResolver::isPending() const
{
ASSERT(v8::Context::InContext());
- if (m_promiseForResolveDetached)
+ if (m_promise.hasNoValue())
return false;
- ASSERT(!m_promise.hasNoValue());
v8::Local<v8::Object> promise = m_promise.v8Value().As<v8::Object>();
v8::Local<v8::Object> internal = V8PromiseCustom::getInternal(promise);
V8PromiseCustom::PromiseState state = V8PromiseCustom::getState(internal);
return state == V8PromiseCustom::Pending;
}
-void ScriptPromiseResolver::detach()
-{
- ASSERT(v8::Context::InContext());
- detachPromiseForExpose();
- reject(v8::Undefined(m_isolate));
- detachPromiseForResolve();
-}
-
-void ScriptPromiseResolver::fulfill(v8::Handle<v8::Value> value)
-{
- resolve(value);
-}
-
void ScriptPromiseResolver::resolve(v8::Handle<v8::Value> value)
{
ASSERT(v8::Context::InContext());
if (!isPending())
return;
V8PromiseCustom::resolve(m_promise.v8Value().As<v8::Object>(), value, m_isolate);
- detachPromiseForResolve();
+ m_promise.clear();
}
void ScriptPromiseResolver::reject(v8::Handle<v8::Value> value)
@@ -134,12 +97,7 @@ void ScriptPromiseResolver::reject(v8::Handle<v8::Value> value)
if (!isPending())
return;
V8PromiseCustom::reject(m_promise.v8Value().As<v8::Object>(), value, m_isolate);
- detachPromiseForResolve();
-}
-
-void ScriptPromiseResolver::fulfill(ScriptValue value)
-{
- resolve(value);
+ m_promise.clear();
}
void ScriptPromiseResolver::resolve(ScriptValue value)

Powered by Google App Engine
This is Rietveld 408576698