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

Side by Side Diff: Source/core/dom/StyleSheetCollection.cpp

Issue 82583005: Use removeFontFace to avoid resetting fontSelector. (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Fix fast/text/international/ regression Created 6 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 | Annotate | Revision Log
OLDNEW
1 /* 1 /*
2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) 2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org)
3 * (C) 1999 Antti Koivisto (koivisto@kde.org) 3 * (C) 1999 Antti Koivisto (koivisto@kde.org)
4 * (C) 2001 Dirk Mueller (mueller@kde.org) 4 * (C) 2001 Dirk Mueller (mueller@kde.org)
5 * (C) 2006 Alexey Proskuryakov (ap@webkit.org) 5 * (C) 2006 Alexey Proskuryakov (ap@webkit.org)
6 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2012 Apple Inc. All r ights reserved. 6 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2012 Apple Inc. All r ights reserved.
7 * Copyright (C) 2008, 2009 Torch Mobile Inc. All rights reserved. (http://www.t orchmobile.com/) 7 * Copyright (C) 2008, 2009 Torch Mobile Inc. All rights reserved. (http://www.t orchmobile.com/)
8 * Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies) 8 * Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies)
9 * Copyright (C) 2013 Google Inc. All rights reserved. 9 * Copyright (C) 2013 Google Inc. All rights reserved.
10 * 10 *
(...skipping 140 matching lines...) Expand 10 before | Expand all | Expand 10 after
151 hasActiveLoadingStylesheet = true; 151 hasActiveLoadingStylesheet = true;
152 } 152 }
153 if (m_hadActiveLoadingStylesheet && !hasActiveLoadingStylesheet) { 153 if (m_hadActiveLoadingStylesheet && !hasActiveLoadingStylesheet) {
154 m_hadActiveLoadingStylesheet = false; 154 m_hadActiveLoadingStylesheet = false;
155 return true; 155 return true;
156 } 156 }
157 m_hadActiveLoadingStylesheet = hasActiveLoadingStylesheet; 157 m_hadActiveLoadingStylesheet = hasActiveLoadingStylesheet;
158 return false; 158 return false;
159 } 159 }
160 160
161 static bool styleSheetContentsHasFontFaceRule(Vector<StyleSheetContents*> sheets ) 161 static bool findFontFaceRulesFromStyleSheetContents(Vector<StyleSheetContents*> sheets, Vector<const StyleRuleFontFace*>& fontFaceRules)
162 { 162 {
163 bool hasFontFaceRule = false;
164
163 for (unsigned i = 0; i < sheets.size(); ++i) { 165 for (unsigned i = 0; i < sheets.size(); ++i) {
164 ASSERT(sheets[i]); 166 ASSERT(sheets[i]);
165 if (sheets[i]->hasFontFaceRule()) 167 if (sheets[i]->hasFontFaceRule()) {
166 return true; 168 // FIXME: We don't need this for styles in shadow tree.
169 sheets[i]->findFontFaceRules(fontFaceRules);
170 hasFontFaceRule = true;
171 }
167 } 172 }
168 return false; 173 return hasFontFaceRule;
169 }
170
171 static bool cssStyleSheetHasFontFaceRule(const Vector<RefPtr<CSSStyleSheet> > sh eets)
172 {
173 for (unsigned i = 0; i < sheets.size(); ++i) {
174 ASSERT(sheets[i]);
175 if (sheets[i]->contents()->hasFontFaceRule())
176 return true;
177 }
178 return false;
179 } 174 }
180 175
181 void StyleSheetCollection::analyzeStyleSheetChange(StyleResolverUpdateMode updat eMode, const StyleSheetCollectionBase& newCollection, StyleSheetChange& change) 176 void StyleSheetCollection::analyzeStyleSheetChange(StyleResolverUpdateMode updat eMode, const StyleSheetCollectionBase& newCollection, StyleSheetChange& change)
182 { 177 {
183 if (activeLoadingStyleSheetLoaded(newCollection.activeAuthorStyleSheets())) 178 if (activeLoadingStyleSheetLoaded(newCollection.activeAuthorStyleSheets()))
184 return; 179 return;
185 180
186 if (updateMode != AnalyzedStyleUpdate) 181 if (updateMode != AnalyzedStyleUpdate)
187 return; 182 return;
188 183
189 // Find out which stylesheets are new. 184 // Find out which stylesheets are new.
190 Vector<StyleSheetContents*> addedSheets; 185 Vector<StyleSheetContents*> addedSheets;
191 if (m_activeAuthorStyleSheets.size() <= newCollection.activeAuthorStyleSheet s().size()) { 186 if (m_activeAuthorStyleSheets.size() <= newCollection.activeAuthorStyleSheet s().size()) {
192 change.styleResolverUpdateType = compareStyleSheets(m_activeAuthorStyleS heets, newCollection.activeAuthorStyleSheets(), addedSheets); 187 change.styleResolverUpdateType = compareStyleSheets(m_activeAuthorStyleS heets, newCollection.activeAuthorStyleSheets(), addedSheets);
193 } else { 188 } else {
194 StyleResolverUpdateType updateType = compareStyleSheets(newCollection.ac tiveAuthorStyleSheets(), m_activeAuthorStyleSheets, addedSheets); 189 StyleResolverUpdateType updateType = compareStyleSheets(newCollection.ac tiveAuthorStyleSheets(), m_activeAuthorStyleSheets, addedSheets);
195 if (updateType != Additive) { 190 if (updateType != Additive) {
196 change.styleResolverUpdateType = updateType; 191 change.styleResolverUpdateType = updateType;
197 } else { 192 } else {
198 if (styleSheetContentsHasFontFaceRule(addedSheets)) { 193 change.styleResolverUpdateType = Reset;
199 change.styleResolverUpdateType = ResetStyleResolverAndFontSelect or; 194 // If @font-face is removed, needs full style recalc.
195 if (findFontFaceRulesFromStyleSheetContents(addedSheets, change.font FaceRulesToRemove))
200 return; 196 return;
201 }
202 // FIXME: since currently all stylesheets are re-added after resetin g styleresolver,
203 // fontSelector should be always reset. After creating RuleSet for e ach StyleSheetContents,
204 // we can avoid appending all stylesheetcontents in reset case.
205 // So we can remove "styleSheetContentsHasFontFaceRule(newSheets)".
206 if (cssStyleSheetHasFontFaceRule(newCollection.activeAuthorStyleShee ts()))
207 change.styleResolverUpdateType = ResetStyleResolverAndFontSelect or;
208 else
209 change.styleResolverUpdateType = Reset;
210 } 197 }
211 } 198 }
212 199
213 // FIXME: If styleResolverUpdateType is Reconstruct, we should return early here since 200 // FIXME: If styleResolverUpdateType is Reconstruct, we should return early here since
214 // we need to recalc the whole document. It's wrong to use StyleInvalidation Analysis since 201 // we need to recalc the whole document. It's wrong to use StyleInvalidation Analysis since
215 // it only looks at the addedSheets. 202 // it only looks at the addedSheets.
216 203
217 // No point in doing the analysis work if we're just going to recalc the who le document anyways. 204 // No point in doing the analysis work if we're just going to recalc the who le document anyways.
218 // This needs to be done after the compareStyleSheets calls above to ensure we don't throw away 205 // This needs to be done after the compareStyleSheets calls above to ensure we don't throw away
219 // the StyleResolver if we don't need to. 206 // the StyleResolver if we don't need to.
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
262 } 249 }
263 return false; 250 return false;
264 } 251 }
265 252
266 void StyleSheetCollection::updateUsesRemUnits() 253 void StyleSheetCollection::updateUsesRemUnits()
267 { 254 {
268 m_usesRemUnits = styleSheetsUseRemUnits(m_activeAuthorStyleSheets); 255 m_usesRemUnits = styleSheetsUseRemUnits(m_activeAuthorStyleSheets);
269 } 256 }
270 257
271 } 258 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698