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

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

Issue 29633003: Avoid style sharing with mis-matched descendant selectors (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: 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 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) 2004-2005 Allan Sandfeld Jensen (kde@carewolf.com) 3 * (C) 2004-2005 Allan Sandfeld Jensen (kde@carewolf.com)
4 * Copyright (C) 2006, 2007 Nicholas Shanks (webkit@nickshanks.com) 4 * Copyright (C) 2006, 2007 Nicholas Shanks (webkit@nickshanks.com)
5 * Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 Apple Inc. All r ights reserved. 5 * Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 Apple Inc. All r ights reserved.
6 * Copyright (C) 2007 Alexey Proskuryakov <ap@webkit.org> 6 * Copyright (C) 2007 Alexey Proskuryakov <ap@webkit.org>
7 * Copyright (C) 2007, 2008 Eric Seidel <eric@webkit.org> 7 * Copyright (C) 2007, 2008 Eric Seidel <eric@webkit.org>
8 * Copyright (C) 2008, 2009 Torch Mobile Inc. All rights reserved. (http://www.t orchmobile.com/) 8 * Copyright (C) 2008, 2009 Torch Mobile Inc. All rights reserved. (http://www.t orchmobile.com/)
9 * Copyright (c) 2011, Code Aurora Forum. All rights reserved. 9 * Copyright (c) 2011, Code Aurora Forum. All rights reserved.
10 * Copyright (C) Research In Motion Limited 2011. All rights reserved. 10 * Copyright (C) Research In Motion Limited 2011. All rights reserved.
(...skipping 206 matching lines...) Expand 10 before | Expand all | Expand 10 after
217 , m_propertyWhitelistType(determinePropertyWhitelistType(addRuleFlags, selec tor())) 217 , m_propertyWhitelistType(determinePropertyWhitelistType(addRuleFlags, selec tor()))
218 { 218 {
219 ASSERT(m_position == position); 219 ASSERT(m_position == position);
220 ASSERT(m_selectorIndex == selectorIndex); 220 ASSERT(m_selectorIndex == selectorIndex);
221 SelectorFilter::collectIdentifierHashes(selector(), m_descendantSelectorIden tifierHashes, maximumIdentifierCount); 221 SelectorFilter::collectIdentifierHashes(selector(), m_descendantSelectorIden tifierHashes, maximumIdentifierCount);
222 } 222 }
223 223
224 static void collectFeaturesFromRuleData(RuleFeatureSet& features, const RuleData & ruleData) 224 static void collectFeaturesFromRuleData(RuleFeatureSet& features, const RuleData & ruleData)
225 { 225 {
226 bool foundSiblingSelector = false; 226 bool foundSiblingSelector = false;
227 bool foundDescendantSelector = false;
227 for (const CSSSelector* selector = ruleData.selector(); selector; selector = selector->tagHistory()) { 228 for (const CSSSelector* selector = ruleData.selector(); selector; selector = selector->tagHistory()) {
228 features.collectFeaturesFromSelector(selector); 229 features.collectFeaturesFromSelector(selector);
229 230
230 if (const CSSSelectorList* selectorList = selector->selectorList()) { 231 if (const CSSSelectorList* selectorList = selector->selectorList()) {
231 for (const CSSSelector* subSelector = selectorList->first(); subSele ctor; subSelector = CSSSelectorList::next(subSelector)) { 232 for (const CSSSelector* subSelector = selectorList->first(); subSele ctor; subSelector = CSSSelectorList::next(subSelector)) {
232 if (!foundSiblingSelector && selector->isSiblingSelector()) 233 if (!foundSiblingSelector && selector->isSiblingSelector())
233 foundSiblingSelector = true; 234 foundSiblingSelector = true;
234 features.collectFeaturesFromSelector(subSelector); 235 features.collectFeaturesFromSelector(subSelector);
235 } 236 }
236 } else if (!foundSiblingSelector && selector->isSiblingSelector()) 237 } else if (!foundSiblingSelector && selector->isSiblingSelector()) {
237 foundSiblingSelector = true; 238 foundSiblingSelector = true;
239 } else if (!foundDescendantSelector && selector->relation() == CSSSelect or::Descendant) {
240 foundDescendantSelector = true;
241 }
238 } 242 }
239 if (foundSiblingSelector) 243 if (foundSiblingSelector)
240 features.siblingRules.append(RuleFeature(ruleData.rule(), ruleData.selec torIndex(), ruleData.hasDocumentSecurityOrigin())); 244 features.siblingRules.append(RuleFeature(ruleData.rule(), ruleData.selec torIndex(), ruleData.hasDocumentSecurityOrigin()));
245 if (foundDescendantSelector)
246 features.descendantRules.append(RuleFeature(ruleData.rule(), ruleData.se lectorIndex(), ruleData.hasDocumentSecurityOrigin()));
241 if (ruleData.containsUncommonAttributeSelector()) 247 if (ruleData.containsUncommonAttributeSelector())
242 features.uncommonAttributeRules.append(RuleFeature(ruleData.rule(), rule Data.selectorIndex(), ruleData.hasDocumentSecurityOrigin())); 248 features.uncommonAttributeRules.append(RuleFeature(ruleData.rule(), rule Data.selectorIndex(), ruleData.hasDocumentSecurityOrigin()));
243 } 249 }
244 250
245 void RuleSet::addToRuleSet(StringImpl* key, PendingRuleMap& map, const RuleData& ruleData) 251 void RuleSet::addToRuleSet(StringImpl* key, PendingRuleMap& map, const RuleData& ruleData)
246 { 252 {
247 if (!key) 253 if (!key)
248 return; 254 return;
249 OwnPtr<LinkedStack<RuleData> >& rules = map.add(key, nullptr).iterator->valu e; 255 OwnPtr<LinkedStack<RuleData> >& rules = map.add(key, nullptr).iterator->valu e;
250 if (!rules) 256 if (!rules)
(...skipping 204 matching lines...) Expand 10 before | Expand all | Expand 10 after
455 compactPendingRules(pendingRules->shadowPseudoElementRules, m_shadowPseudoEl ementRules); 461 compactPendingRules(pendingRules->shadowPseudoElementRules, m_shadowPseudoEl ementRules);
456 m_linkPseudoClassRules.shrinkToFit(); 462 m_linkPseudoClassRules.shrinkToFit();
457 m_cuePseudoRules.shrinkToFit(); 463 m_cuePseudoRules.shrinkToFit();
458 m_focusPseudoClassRules.shrinkToFit(); 464 m_focusPseudoClassRules.shrinkToFit();
459 m_universalRules.shrinkToFit(); 465 m_universalRules.shrinkToFit();
460 m_pageRules.shrinkToFit(); 466 m_pageRules.shrinkToFit();
461 m_viewportRules.shrinkToFit(); 467 m_viewportRules.shrinkToFit();
462 } 468 }
463 469
464 } // namespace WebCore 470 } // namespace WebCore
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698