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

Unified Diff: Source/core/css/FontFaceSet.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/core/css/FontFaceSet.cpp
diff --git a/Source/core/css/FontFaceSet.cpp b/Source/core/css/FontFaceSet.cpp
index b59389574d96bcefde42509b56b0e83e00fa1b4a..b0c6b33d3933ee3b0ada816640d3269d6f1c8f9f 100644
--- a/Source/core/css/FontFaceSet.cpp
+++ b/Source/core/css/FontFaceSet.cpp
@@ -50,12 +50,12 @@ static const char* const defaultFontFamily = "sans-serif";
class LoadFontPromiseResolver : public CSSSegmentedFontFace::LoadFontCallback {
public:
- static PassRefPtr<LoadFontPromiseResolver> create(const FontFamily& family, ExecutionContext* context)
+ static PassRefPtr<LoadFontPromiseResolver> create(const FontFamily& family, ScriptPromise promise, ExecutionContext* context)
{
int numFamilies = 0;
for (const FontFamily* f = &family; f; f = f->next())
numFamilies++;
- return adoptRef<LoadFontPromiseResolver>(new LoadFontPromiseResolver(numFamilies, context));
+ return adoptRef<LoadFontPromiseResolver>(new LoadFontPromiseResolver(numFamilies, promise, context));
}
virtual void notifyLoaded(CSSSegmentedFontFace*) OVERRIDE;
@@ -64,19 +64,12 @@ public:
void error(Document*);
void resolve();
- ScriptPromise promise()
- {
- ScriptPromise promise = m_resolver->promise();
- m_resolver->detachPromise();
- return promise;
- }
-
private:
- LoadFontPromiseResolver(int numLoading, ExecutionContext* context)
+ LoadFontPromiseResolver(int numLoading, ScriptPromise promise, ExecutionContext* context)
: m_numLoading(numLoading)
, m_errorOccured(false)
, m_scriptState(ScriptState::current())
- , m_resolver(ScriptPromiseResolver::create(context))
+ , m_resolver(ScriptPromiseResolver::create(promise, context))
{ }
int m_numLoading;
@@ -116,33 +109,26 @@ void LoadFontPromiseResolver::resolve()
if (m_errorOccured)
m_resolver->reject(ScriptValue::createNull());
else
- m_resolver->fulfill(ScriptValue::createNull());
+ m_resolver->resolve(ScriptValue::createNull());
}
class FontsReadyPromiseResolver {
public:
- static PassOwnPtr<FontsReadyPromiseResolver> create(ExecutionContext* context)
+ static PassOwnPtr<FontsReadyPromiseResolver> create(ScriptPromise promise, ExecutionContext* context)
{
- return adoptPtr(new FontsReadyPromiseResolver(context));
+ return adoptPtr(new FontsReadyPromiseResolver(promise, context));
}
void call(PassRefPtr<FontFaceSet> fontFaceSet)
{
ScriptScope scope(m_scriptState);
- m_resolver->fulfill(fontFaceSet);
- }
-
- ScriptPromise promise()
- {
- ScriptPromise promise = m_resolver->promise();
- m_resolver->detachPromise();
- return promise;
+ m_resolver->resolve(fontFaceSet);
}
private:
- FontsReadyPromiseResolver(ExecutionContext* context)
+ FontsReadyPromiseResolver(ScriptPromise promise, ExecutionContext* context)
: m_scriptState(ScriptState::current())
- , m_resolver(ScriptPromiseResolver::create(context))
+ , m_resolver(ScriptPromiseResolver::create(promise, context))
{ }
ScriptState* m_scriptState;
RefPtr<ScriptPromiseResolver> m_resolver;
@@ -281,8 +267,8 @@ void FontFaceSet::queueDoneEvent(FontFace* fontFace)
ScriptPromise FontFaceSet::ready()
{
- OwnPtr<FontsReadyPromiseResolver> resolver = FontsReadyPromiseResolver::create(executionContext());
- ScriptPromise promise = resolver->promise();
+ ScriptPromise promise = ScriptPromise::createPending(executionContext());
+ OwnPtr<FontsReadyPromiseResolver> resolver = FontsReadyPromiseResolver::create(promise, executionContext());
m_readyResolvers.append(resolver.release());
if (!m_timer.isActive())
m_timer.startOneShot(0);
@@ -359,7 +345,8 @@ ScriptPromise FontFaceSet::load(const String& fontString, const String& text, Ex
}
Document* d = document();
- RefPtr<LoadFontPromiseResolver> resolver = LoadFontPromiseResolver::create(font.family(), executionContext());
+ ScriptPromise promise = ScriptPromise::createPending(executionContext());
+ RefPtr<LoadFontPromiseResolver> resolver = LoadFontPromiseResolver::create(font.family(), promise, executionContext());
for (const FontFamily* f = &font.family(); f; f = f->next()) {
CSSSegmentedFontFace* face = d->styleResolver()->fontSelector()->getFontFace(font.fontDescription(), f->family());
if (!face) {
@@ -368,7 +355,7 @@ ScriptPromise FontFaceSet::load(const String& fontString, const String& text, Ex
}
face->loadFont(font.fontDescription(), nullToSpace(text), resolver);
}
- return resolver->promise();
+ return promise;
}
bool FontFaceSet::check(const String& fontString, const String& text, ExceptionState& es)

Powered by Google App Engine
This is Rietveld 408576698