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

Side by Side Diff: Source/core/css/FontFaceSet.cpp

Issue 783423003: Make ScriptPromiseResolver RefCountedWillBeRefCountedGarbageCollected. (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Created 6 years 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 unified diff | Download patch
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2013 Google Inc. All rights reserved. 2 * Copyright (C) 2013 Google Inc. All rights reserved.
3 * 3 *
4 * Redistribution and use in source and binary forms, with or without 4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions are met: 5 * modification, are permitted provided that the following conditions are met:
6 * 6 *
7 * 1. Redistributions of source code must retain the above copyright 7 * 1. Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer. 8 * notice, this list of conditions and the following disclaimer.
9 * 2. Redistributions in binary form must reproduce the above copyright 9 * 2. Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the 10 * notice, this list of conditions and the following disclaimer in the
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
68 : m_numLoading(faces.size()) 68 : m_numLoading(faces.size())
69 , m_errorOccured(false) 69 , m_errorOccured(false)
70 , m_resolver(ScriptPromiseResolver::create(scriptState)) 70 , m_resolver(ScriptPromiseResolver::create(scriptState))
71 { 71 {
72 m_fontFaces.swap(faces); 72 m_fontFaces.swap(faces);
73 } 73 }
74 74
75 WillBeHeapVector<RefPtrWillBeMember<FontFace> > m_fontFaces; 75 WillBeHeapVector<RefPtrWillBeMember<FontFace> > m_fontFaces;
76 int m_numLoading; 76 int m_numLoading;
77 bool m_errorOccured; 77 bool m_errorOccured;
78 RefPtr<ScriptPromiseResolver> m_resolver; 78 RefPtrWillBeMember<ScriptPromiseResolver> m_resolver;
79 }; 79 };
80 80
81 void LoadFontPromiseResolver::loadFonts(ExecutionContext* context) 81 void LoadFontPromiseResolver::loadFonts(ExecutionContext* context)
82 { 82 {
83 if (!m_numLoading) { 83 if (!m_numLoading) {
84 m_resolver->resolve(m_fontFaces); 84 m_resolver->resolve(m_fontFaces);
85 return; 85 return;
86 } 86 }
87 87
88 for (size_t i = 0; i < m_fontFaces.size(); i++) 88 for (size_t i = 0; i < m_fontFaces.size(); i++)
(...skipping 14 matching lines...) Expand all
103 m_numLoading--; 103 m_numLoading--;
104 if (!m_errorOccured) { 104 if (!m_errorOccured) {
105 m_errorOccured = true; 105 m_errorOccured = true;
106 m_resolver->reject(fontFace->error()); 106 m_resolver->reject(fontFace->error());
107 } 107 }
108 } 108 }
109 109
110 void LoadFontPromiseResolver::trace(Visitor* visitor) 110 void LoadFontPromiseResolver::trace(Visitor* visitor)
111 { 111 {
112 visitor->trace(m_fontFaces); 112 visitor->trace(m_fontFaces);
113 visitor->trace(m_resolver);
113 LoadFontCallback::trace(visitor); 114 LoadFontCallback::trace(visitor);
114 } 115 }
115 116
116 class FontsReadyPromiseResolver { 117 class FontsReadyPromiseResolver final : public NoBaseWillBeGarbageCollected<Font sReadyPromiseResolver> {
117 public: 118 public:
118 static PassOwnPtr<FontsReadyPromiseResolver> create(ScriptState* scriptState ) 119 static PassOwnPtrWillBeRawPtr<FontsReadyPromiseResolver> create(ScriptState* scriptState)
119 { 120 {
120 return adoptPtr(new FontsReadyPromiseResolver(scriptState)); 121 return adoptPtrWillBeNoop(new FontsReadyPromiseResolver(scriptState));
121 } 122 }
122 123
123 void resolve(PassRefPtrWillBeRawPtr<FontFaceSet> fontFaceSet) 124 void resolve(PassRefPtrWillBeRawPtr<FontFaceSet> fontFaceSet)
124 { 125 {
125 m_resolver->resolve(fontFaceSet); 126 m_resolver->resolve(fontFaceSet);
126 } 127 }
127 128
128 ScriptPromise promise() { return m_resolver->promise(); } 129 ScriptPromise promise() { return m_resolver->promise(); }
129 130
131 void trace(Visitor* visitor)
132 {
133 visitor->trace(m_resolver);
134 }
135
130 private: 136 private:
131 explicit FontsReadyPromiseResolver(ScriptState* scriptState) 137 explicit FontsReadyPromiseResolver(ScriptState* scriptState)
132 : m_resolver(ScriptPromiseResolver::create(scriptState)) 138 : m_resolver(ScriptPromiseResolver::create(scriptState))
133 { 139 {
134 } 140 }
135 141
136 RefPtr<ScriptPromiseResolver> m_resolver; 142 RefPtrWillBeMember<ScriptPromiseResolver> m_resolver;
137 }; 143 };
138 144
139 FontFaceSet::FontFaceSet(Document& document) 145 FontFaceSet::FontFaceSet(Document& document)
140 : ActiveDOMObject(&document) 146 : ActiveDOMObject(&document)
141 , m_shouldFireLoadingEvent(false) 147 , m_shouldFireLoadingEvent(false)
142 , m_asyncRunner(this, &FontFaceSet::handlePendingEventsAndPromises) 148 , m_asyncRunner(this, &FontFaceSet::handlePendingEventsAndPromises)
143 { 149 {
144 suspendIfNeeded(); 150 suspendIfNeeded();
145 } 151 }
146 152
(...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after
259 { 265 {
260 m_loadingFonts.remove(fontFace); 266 m_loadingFonts.remove(fontFace);
261 if (m_loadingFonts.isEmpty()) 267 if (m_loadingFonts.isEmpty())
262 handlePendingEventsAndPromisesSoon(); 268 handlePendingEventsAndPromisesSoon();
263 } 269 }
264 270
265 ScriptPromise FontFaceSet::ready(ScriptState* scriptState) 271 ScriptPromise FontFaceSet::ready(ScriptState* scriptState)
266 { 272 {
267 if (!inActiveDocumentContext()) 273 if (!inActiveDocumentContext())
268 return ScriptPromise(); 274 return ScriptPromise();
269 OwnPtr<FontsReadyPromiseResolver> resolver = FontsReadyPromiseResolver::crea te(scriptState); 275 OwnPtrWillBeRawPtr<FontsReadyPromiseResolver> resolver = FontsReadyPromiseRe solver::create(scriptState);
270 ScriptPromise promise = resolver->promise(); 276 ScriptPromise promise = resolver->promise();
271 m_readyResolvers.append(resolver.release()); 277 m_readyResolvers.append(resolver.release());
272 handlePendingEventsAndPromisesSoon(); 278 handlePendingEventsAndPromisesSoon();
273 return promise; 279 return promise;
274 } 280 }
275 281
276 void FontFaceSet::add(FontFace* fontFace, ExceptionState& exceptionState) 282 void FontFaceSet::add(FontFace* fontFace, ExceptionState& exceptionState)
277 { 283 {
278 if (!inActiveDocumentContext()) 284 if (!inActiveDocumentContext())
279 return; 285 return;
(...skipping 136 matching lines...) Expand 10 before | Expand all | Expand 10 after
416 if (!m_failedFonts.isEmpty()) { 422 if (!m_failedFonts.isEmpty()) {
417 errorEvent = FontFaceSetLoadEvent::createForFontFaces(EventTypeNames ::loadingerror, m_failedFonts); 423 errorEvent = FontFaceSetLoadEvent::createForFontFaces(EventTypeNames ::loadingerror, m_failedFonts);
418 m_failedFonts.clear(); 424 m_failedFonts.clear();
419 } 425 }
420 dispatchEvent(doneEvent); 426 dispatchEvent(doneEvent);
421 if (errorEvent) 427 if (errorEvent)
422 dispatchEvent(errorEvent); 428 dispatchEvent(errorEvent);
423 } 429 }
424 430
425 if (!m_readyResolvers.isEmpty()) { 431 if (!m_readyResolvers.isEmpty()) {
426 Vector<OwnPtr<FontsReadyPromiseResolver> > resolvers; 432 WillBeHeapVector<OwnPtrWillBeMember<FontsReadyPromiseResolver> > resolve rs;
427 m_readyResolvers.swap(resolvers); 433 m_readyResolvers.swap(resolvers);
428 for (size_t index = 0; index < resolvers.size(); ++index) 434 for (size_t index = 0; index < resolvers.size(); ++index)
429 resolvers[index]->resolve(this); 435 resolvers[index]->resolve(this);
430 } 436 }
431 } 437 }
432 438
433 ScriptPromise FontFaceSet::load(ScriptState* scriptState, const String& fontStri ng, const String& text) 439 ScriptPromise FontFaceSet::load(ScriptState* scriptState, const String& fontStri ng, const String& text)
434 { 440 {
435 if (!inActiveDocumentContext()) 441 if (!inActiveDocumentContext())
436 return ScriptPromise(); 442 return ScriptPromise();
437 443
438 Font font; 444 Font font;
439 if (!resolveFontStyle(fontString, font)) { 445 if (!resolveFontStyle(fontString, font)) {
440 RefPtr<ScriptPromiseResolver> resolver = ScriptPromiseResolver::create(s criptState); 446 RefPtrWillBeRawPtr<ScriptPromiseResolver> resolver = ScriptPromiseResolv er::create(scriptState);
441 ScriptPromise promise = resolver->promise(); 447 ScriptPromise promise = resolver->promise();
442 resolver->reject(DOMException::create(SyntaxError, "Could not resolve '" + fontString + "' as a font.")); 448 resolver->reject(DOMException::create(SyntaxError, "Could not resolve '" + fontString + "' as a font."));
443 return promise; 449 return promise;
444 } 450 }
445 451
446 FontFaceCache* fontFaceCache = document()->styleEngine()->fontSelector()->fo ntFaceCache(); 452 FontFaceCache* fontFaceCache = document()->styleEngine()->fontSelector()->fo ntFaceCache();
447 FontFaceArray faces; 453 FontFaceArray faces;
448 for (const FontFamily* f = &font.fontDescription().family(); f; f = f->next( )) { 454 for (const FontFamily* f = &font.fontDescription().family(); f; f = f->next( )) {
449 CSSSegmentedFontFace* segmentedFontFace = fontFaceCache->get(font.fontDe scription(), f->family()); 455 CSSSegmentedFontFace* segmentedFontFace = fontFaceCache->get(font.fontDe scription(), f->family());
450 if (segmentedFontFace) 456 if (segmentedFontFace)
(...skipping 126 matching lines...) Expand 10 before | Expand all | Expand 10 after
577 void FontFaceSet::didLayout(Document& document) 583 void FontFaceSet::didLayout(Document& document)
578 { 584 {
579 if (FontFaceSet* fonts = static_cast<FontFaceSet*>(SupplementType::from(docu ment, supplementName()))) 585 if (FontFaceSet* fonts = static_cast<FontFaceSet*>(SupplementType::from(docu ment, supplementName())))
580 fonts->didLayout(); 586 fonts->didLayout();
581 } 587 }
582 588
583 #if ENABLE(OILPAN) 589 #if ENABLE(OILPAN)
584 void FontFaceSet::trace(Visitor* visitor) 590 void FontFaceSet::trace(Visitor* visitor)
585 { 591 {
586 visitor->trace(m_loadingFonts); 592 visitor->trace(m_loadingFonts);
593 visitor->trace(m_readyResolvers);
587 visitor->trace(m_loadedFonts); 594 visitor->trace(m_loadedFonts);
588 visitor->trace(m_failedFonts); 595 visitor->trace(m_failedFonts);
589 visitor->trace(m_nonCSSConnectedFaces); 596 visitor->trace(m_nonCSSConnectedFaces);
590 DocumentSupplement::trace(visitor); 597 DocumentSupplement::trace(visitor);
591 EventTargetWithInlineData::trace(visitor); 598 EventTargetWithInlineData::trace(visitor);
592 } 599 }
593 #endif 600 #endif
594 601
595 } // namespace blink 602 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698