Index: Source/core/css/FontFaceSet.cpp |
diff --git a/Source/core/css/FontFaceSet.cpp b/Source/core/css/FontFaceSet.cpp |
index 7710bf5b6bb1b1013d27b950bede27c539924017..9bf639092d140a3afdc915581b3e911850924c54 100644 |
--- a/Source/core/css/FontFaceSet.cpp |
+++ b/Source/core/css/FontFaceSet.cpp |
@@ -75,7 +75,7 @@ private: |
WillBeHeapVector<RefPtrWillBeMember<FontFace> > m_fontFaces; |
int m_numLoading; |
bool m_errorOccured; |
- RefPtr<ScriptPromiseResolver> m_resolver; |
+ RefPtrWillBeMember<ScriptPromiseResolver> m_resolver; |
}; |
void LoadFontPromiseResolver::loadFonts(ExecutionContext* context) |
@@ -110,14 +110,15 @@ void LoadFontPromiseResolver::notifyError(FontFace* fontFace) |
void LoadFontPromiseResolver::trace(Visitor* visitor) |
{ |
visitor->trace(m_fontFaces); |
+ visitor->trace(m_resolver); |
LoadFontCallback::trace(visitor); |
} |
-class FontsReadyPromiseResolver { |
+class FontsReadyPromiseResolver final : public NoBaseWillBeGarbageCollected<FontsReadyPromiseResolver> { |
public: |
- static PassOwnPtr<FontsReadyPromiseResolver> create(ScriptState* scriptState) |
+ static PassOwnPtrWillBeRawPtr<FontsReadyPromiseResolver> create(ScriptState* scriptState) |
{ |
- return adoptPtr(new FontsReadyPromiseResolver(scriptState)); |
+ return adoptPtrWillBeNoop(new FontsReadyPromiseResolver(scriptState)); |
} |
void resolve(PassRefPtrWillBeRawPtr<FontFaceSet> fontFaceSet) |
@@ -127,13 +128,18 @@ public: |
ScriptPromise promise() { return m_resolver->promise(); } |
+ void trace(Visitor* visitor) |
+ { |
+ visitor->trace(m_resolver); |
+ } |
+ |
private: |
explicit FontsReadyPromiseResolver(ScriptState* scriptState) |
: m_resolver(ScriptPromiseResolver::create(scriptState)) |
{ |
} |
- RefPtr<ScriptPromiseResolver> m_resolver; |
+ RefPtrWillBeMember<ScriptPromiseResolver> m_resolver; |
}; |
FontFaceSet::FontFaceSet(Document& document) |
@@ -266,7 +272,7 @@ ScriptPromise FontFaceSet::ready(ScriptState* scriptState) |
{ |
if (!inActiveDocumentContext()) |
return ScriptPromise(); |
- OwnPtr<FontsReadyPromiseResolver> resolver = FontsReadyPromiseResolver::create(scriptState); |
+ OwnPtrWillBeRawPtr<FontsReadyPromiseResolver> resolver = FontsReadyPromiseResolver::create(scriptState); |
ScriptPromise promise = resolver->promise(); |
m_readyResolvers.append(resolver.release()); |
handlePendingEventsAndPromisesSoon(); |
@@ -423,7 +429,7 @@ void FontFaceSet::fireDoneEventIfPossible() |
} |
if (!m_readyResolvers.isEmpty()) { |
- Vector<OwnPtr<FontsReadyPromiseResolver> > resolvers; |
+ WillBeHeapVector<OwnPtrWillBeMember<FontsReadyPromiseResolver> > resolvers; |
m_readyResolvers.swap(resolvers); |
for (size_t index = 0; index < resolvers.size(); ++index) |
resolvers[index]->resolve(this); |
@@ -437,7 +443,7 @@ ScriptPromise FontFaceSet::load(ScriptState* scriptState, const String& fontStri |
Font font; |
if (!resolveFontStyle(fontString, font)) { |
- RefPtr<ScriptPromiseResolver> resolver = ScriptPromiseResolver::create(scriptState); |
+ RefPtrWillBeRawPtr<ScriptPromiseResolver> resolver = ScriptPromiseResolver::create(scriptState); |
ScriptPromise promise = resolver->promise(); |
resolver->reject(DOMException::create(SyntaxError, "Could not resolve '" + fontString + "' as a font.")); |
return promise; |
@@ -584,6 +590,7 @@ void FontFaceSet::didLayout(Document& document) |
void FontFaceSet::trace(Visitor* visitor) |
{ |
visitor->trace(m_loadingFonts); |
+ visitor->trace(m_readyResolvers); |
visitor->trace(m_loadedFonts); |
visitor->trace(m_failedFonts); |
visitor->trace(m_nonCSSConnectedFaces); |