OLD | NEW |
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 Loading... |
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 Loading... |
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 |
OLD | NEW |