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

Side by Side Diff: third_party/WebKit/Source/core/css/CSSFontSelector.cpp

Issue 2624893003: Move the FontFaceCache stored in CSSFontSelector to be stored in Document. (Closed)
Patch Set: Rebase Created 3 years, 10 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 unified diff | Download patch
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2007, 2008, 2011 Apple Inc. All rights reserved. 2 * Copyright (C) 2007, 2008, 2011 Apple Inc. All rights reserved.
3 * (C) 2007, 2008 Nikolas Zimmermann <zimmermann@kde.org> 3 * (C) 2007, 2008 Nikolas Zimmermann <zimmermann@kde.org>
4 * 4 *
5 * Redistribution and use in source and binary forms, with or without 5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions 6 * modification, are permitted provided that the following conditions
7 * are met: 7 * are met:
8 * 1. Redistributions of source code must retain the above copyright 8 * 1. Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer. 9 * notice, this list of conditions and the following disclaimer.
10 * 2. Redistributions in binary form must reproduce the above copyright 10 * 2. Redistributions in binary form must reproduce the above copyright
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
45 CSSFontSelector::CSSFontSelector(Document* document) 45 CSSFontSelector::CSSFontSelector(Document* document)
46 : m_document(document), 46 : m_document(document),
47 m_genericFontFamilySettings( 47 m_genericFontFamilySettings(
48 document->frame()->settings()->genericFontFamilySettings()) { 48 document->frame()->settings()->genericFontFamilySettings()) {
49 // FIXME: An old comment used to say there was no need to hold a reference to 49 // FIXME: An old comment used to say there was no need to hold a reference to
50 // m_document because "we are guaranteed to be destroyed before the document". 50 // m_document because "we are guaranteed to be destroyed before the document".
51 // But there does not seem to be any such guarantee. 51 // But there does not seem to be any such guarantee.
52 ASSERT(m_document); 52 ASSERT(m_document);
53 DCHECK(m_document->frame()); 53 DCHECK(m_document->frame());
54 FontCache::fontCache()->addClient(this); 54 FontCache::fontCache()->addClient(this);
55 FontFaceSet::from(*document)->addFontFacesToFontFaceCache(&m_fontFaceCache, 55 FontFaceSet::from(*document)->addFontFacesToFontFaceCache(this);
56 this);
57 } 56 }
58 57
59 CSSFontSelector::~CSSFontSelector() {} 58 CSSFontSelector::~CSSFontSelector() {}
60 59
61 void CSSFontSelector::registerForInvalidationCallbacks( 60 void CSSFontSelector::registerForInvalidationCallbacks(
62 CSSFontSelectorClient* client) { 61 CSSFontSelectorClient* client) {
63 m_clients.insert(client); 62 m_clients.insert(client);
64 } 63 }
65 64
66 void CSSFontSelector::unregisterForInvalidationCallbacks( 65 void CSSFontSelector::unregisterForInvalidationCallbacks(
67 CSSFontSelectorClient* client) { 66 CSSFontSelectorClient* client) {
68 m_clients.remove(client); 67 m_clients.remove(client);
69 } 68 }
70 69
71 void CSSFontSelector::dispatchInvalidationCallbacks() { 70 void CSSFontSelector::dispatchInvalidationCallbacks() {
72 m_fontFaceCache.incrementVersion(); 71 m_document->incrementFontFaceVersion();
73 72
74 HeapVector<Member<CSSFontSelectorClient>> clients; 73 HeapVector<Member<CSSFontSelectorClient>> clients;
75 copyToVector(m_clients, clients); 74 copyToVector(m_clients, clients);
76 for (auto& client : clients) 75 for (auto& client : clients)
77 client->fontsNeedUpdate(this); 76 client->fontsNeedUpdate(this);
78 } 77 }
79 78
80 void CSSFontSelector::fontFaceInvalidated() { 79 void CSSFontSelector::fontFaceInvalidated() {
81 dispatchInvalidationCallbacks(); 80 dispatchInvalidationCallbacks();
82 } 81 }
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
114 if (genericFamilyName == FontFamilyNames::webkit_pictograph) 113 if (genericFamilyName == FontFamilyNames::webkit_pictograph)
115 return settings.pictograph(script); 114 return settings.pictograph(script);
116 if (genericFamilyName == FontFamilyNames::webkit_standard) 115 if (genericFamilyName == FontFamilyNames::webkit_standard)
117 return settings.standard(script); 116 return settings.standard(script);
118 #endif 117 #endif
119 return emptyAtom; 118 return emptyAtom;
120 } 119 }
121 120
122 PassRefPtr<FontData> CSSFontSelector::getFontData( 121 PassRefPtr<FontData> CSSFontSelector::getFontData(
123 const FontDescription& fontDescription, 122 const FontDescription& fontDescription,
124 const AtomicString& familyName) { 123 const AtomicString& family) {
125 if (CSSSegmentedFontFace* face = 124 CSSSegmentedFontFace* face = getFontFaceFromCache(fontDescription, family);
126 m_fontFaceCache.get(fontDescription, familyName)) 125 if (face)
127 return face->getFontData(fontDescription); 126 return face->getFontData(fontDescription);
128 127
129 // Try to return the correct font based off our settings, in case we were 128 // Try to return the correct font based off our settings, in case we were
130 // handed the generic font family name. 129 // handed the generic font family name.
131 AtomicString settingsFamilyName = familyNameFromSettings( 130 AtomicString settingsFamilyName = familyNameFromSettings(
132 m_genericFontFamilySettings, fontDescription, familyName); 131 m_genericFontFamilySettings, fontDescription, family);
133 if (settingsFamilyName.isEmpty()) 132 if (settingsFamilyName.isEmpty())
134 return nullptr; 133 return nullptr;
135 134
136 return FontCache::fontCache()->getFontData(fontDescription, 135 return FontCache::fontCache()->getFontData(fontDescription,
137 settingsFamilyName); 136 settingsFamilyName);
138 } 137 }
139 138
140 void CSSFontSelector::willUseFontData(const FontDescription& fontDescription, 139 void CSSFontSelector::willUseFontData(const FontDescription& fontDescription,
141 const AtomicString& family, 140 const AtomicString& family,
142 const String& text) { 141 const String& text) {
143 CSSSegmentedFontFace* face = m_fontFaceCache.get(fontDescription, family); 142 CSSSegmentedFontFace* face = getFontFaceFromCache(fontDescription, family);
144 if (face) 143 if (face)
145 face->willUseFontData(fontDescription, text); 144 face->willUseFontData(fontDescription, text);
146 } 145 }
147 146
148 void CSSFontSelector::willUseRange(const FontDescription& fontDescription, 147 void CSSFontSelector::willUseRange(const FontDescription& fontDescription,
149 const AtomicString& family, 148 const AtomicString& family,
150 const FontDataForRangeSet& rangeSet) { 149 const FontDataForRangeSet& rangeSet) {
151 CSSSegmentedFontFace* face = m_fontFaceCache.get(fontDescription, family); 150 CSSSegmentedFontFace* face = getFontFaceFromCache(fontDescription, family);
152 if (face) 151 if (face)
153 face->willUseRange(fontDescription, rangeSet); 152 face->willUseRange(fontDescription, rangeSet);
154 } 153 }
155 154
156 bool CSSFontSelector::isPlatformFontAvailable( 155 bool CSSFontSelector::isPlatformFontAvailable(
157 const FontDescription& fontDescription, 156 const FontDescription& fontDescription,
158 const AtomicString& passedFamily) { 157 const AtomicString& passedFamily) {
159 AtomicString family = familyNameFromSettings(m_genericFontFamilySettings, 158 AtomicString family = familyNameFromSettings(m_genericFontFamilySettings,
160 fontDescription, passedFamily); 159 fontDescription, passedFamily);
161 if (family.isEmpty()) 160 if (family.isEmpty())
162 family = passedFamily; 161 family = passedFamily;
163 return FontCache::fontCache()->isPlatformFontAvailable(fontDescription, 162 return FontCache::fontCache()->isPlatformFontAvailable(fontDescription,
164 family); 163 family);
165 } 164 }
166 165
167 void CSSFontSelector::updateGenericFontFamilySettings(Document& document) { 166 void CSSFontSelector::updateGenericFontFamilySettings(Document& document) {
168 if (!document.settings()) 167 if (!document.settings())
169 return; 168 return;
170 m_genericFontFamilySettings = 169 m_genericFontFamilySettings =
171 document.settings()->genericFontFamilySettings(); 170 document.settings()->genericFontFamilySettings();
172 fontCacheInvalidated(); 171 fontCacheInvalidated();
173 } 172 }
174 173
175 DEFINE_TRACE(CSSFontSelector) { 174 DEFINE_TRACE(CSSFontSelector) {
176 visitor->trace(m_document); 175 visitor->trace(m_document);
177 visitor->trace(m_fontFaceCache);
178 visitor->trace(m_clients); 176 visitor->trace(m_clients);
179 FontSelector::trace(visitor); 177 FontSelector::trace(visitor);
180 } 178 }
181 179
182 } // namespace blink 180 } // namespace blink
OLDNEW
« no previous file with comments | « third_party/WebKit/Source/core/css/CSSFontSelector.h ('k') | third_party/WebKit/Source/core/css/FontFaceSet.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698