Chromium Code Reviews| 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 148 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 159 features.attributes.append(selector.attribute().localName()); | 159 features.attributes.append(selector.attribute().localName()); |
| 160 else if (selector.isCustomPseudoElement()) | 160 else if (selector.isCustomPseudoElement()) |
| 161 features.customPseudoElement = true; | 161 features.customPseudoElement = true; |
| 162 } | 162 } |
| 163 | 163 |
| 164 RuleFeatureSet::RuleFeatureSet() | 164 RuleFeatureSet::RuleFeatureSet() |
| 165 : m_targetedStyleRecalcEnabled(RuntimeEnabledFeatures::targetedStyleRecalcEn abled()) | 165 : m_targetedStyleRecalcEnabled(RuntimeEnabledFeatures::targetedStyleRecalcEn abled()) |
| 166 { | 166 { |
| 167 } | 167 } |
| 168 | 168 |
| 169 DescendantInvalidationSet* RuleFeatureSet::invalidationSetForSelector(const CSSS elector& selector) | 169 DescendantInvalidationSet* RuleFeatureSet::invalidationSetForSelector(const CSSS elector& selector, bool seenCombinator) |
| 170 { | 170 { |
| 171 if (selector.m_match == CSSSelector::Class) | 171 if (selector.m_match == CSSSelector::Class) |
| 172 return &ensureClassInvalidationSet(selector.value()); | 172 return &ensureClassInvalidationSet(selector.value()); |
| 173 if (selector.isAttributeSelector()) | 173 if (selector.isAttributeSelector()) |
| 174 return &ensureAttributeInvalidationSet(selector.attribute().localName()) ; | 174 return &ensureAttributeInvalidationSet(selector.attribute().localName()) ; |
| 175 if (selector.m_match == CSSSelector::Id) | 175 if (selector.m_match == CSSSelector::Id) |
| 176 return &ensureIdInvalidationSet(selector.value()); | 176 return &ensureIdInvalidationSet(selector.value()); |
| 177 if (seenCombinator && selector.m_match == CSSSelector::PseudoClass) { | |
| 178 CSSSelector::PseudoType pseudo = selector.pseudoType(); | |
| 179 if (pseudo == CSSSelector::PseudoHover || pseudo == CSSSelector::PseudoA ctive || pseudo == CSSSelector::PseudoFocus) | |
| 180 return &ensurePseudoInvalidationSet(pseudo); | |
| 181 } | |
| 177 return 0; | 182 return 0; |
| 178 } | 183 } |
| 179 | 184 |
| 180 RuleFeatureSet::InvalidationSetMode RuleFeatureSet::updateInvalidationSets(const CSSSelector& selector) | 185 RuleFeatureSet::InvalidationSetMode RuleFeatureSet::updateInvalidationSets(const CSSSelector& selector) |
| 181 { | 186 { |
| 182 InvalidationSetMode mode = invalidationSetModeForSelector(selector); | 187 InvalidationSetMode mode = invalidationSetModeForSelector(selector); |
| 183 if (mode != AddFeatures) | 188 if (mode != AddFeatures) |
| 184 return mode; | 189 return mode; |
| 185 | 190 |
| 186 InvalidationSetFeatures features; | 191 InvalidationSetFeatures features; |
| 187 const CSSSelector* current = extractInvalidationSetFeatures(selector, featur es); | 192 const CSSSelector* current = extractInvalidationSetFeatures(selector, featur es); |
| 188 if (current) { | 193 if (current) { |
| 189 bool wholeSubtree = current->relation() == CSSSelector::DirectAdjacent | | current->relation() == CSSSelector::IndirectAdjacent; | 194 bool wholeSubtree = current->relation() == CSSSelector::DirectAdjacent | | current->relation() == CSSSelector::IndirectAdjacent; |
| 190 current = current->tagHistory(); | 195 current = current->tagHistory(); |
| 191 if (current) | 196 if (current) |
| 192 addFeaturesToInvalidationSets(*current, features, wholeSubtree); | 197 addFeaturesToInvalidationSets(*current, features, wholeSubtree); |
| 193 } | 198 } |
| 194 return AddFeatures; | 199 return AddFeatures; |
| 195 } | 200 } |
| 196 | 201 |
| 197 const CSSSelector* RuleFeatureSet::extractInvalidationSetFeatures(const CSSSelec tor& selector, InvalidationSetFeatures& features) | 202 const CSSSelector* RuleFeatureSet::extractInvalidationSetFeatures(const CSSSelec tor& selector, InvalidationSetFeatures& features) |
| 198 { | 203 { |
| 199 const CSSSelector* lastSelector = &selector; | 204 const CSSSelector* lastSelector = &selector; |
| 200 for (; lastSelector; lastSelector = lastSelector->tagHistory()) { | 205 for (; lastSelector; lastSelector = lastSelector->tagHistory()) { |
| 201 extractInvalidationSetFeature(*lastSelector, features); | 206 extractInvalidationSetFeature(*lastSelector, features); |
| 202 // Initialize the entry in the invalidation set map, if supported. | 207 // Initialize the entry in the invalidation set map, if supported. |
| 203 invalidationSetForSelector(*lastSelector); | 208 invalidationSetForSelector(*lastSelector, false); |
| 204 if (lastSelector->pseudoType() == CSSSelector::PseudoHost || lastSelecto r->pseudoType() == CSSSelector::PseudoAny) { | 209 if (lastSelector->pseudoType() == CSSSelector::PseudoHost || lastSelecto r->pseudoType() == CSSSelector::PseudoAny) { |
| 205 if (const CSSSelectorList* selectorList = lastSelector->selectorList ()) { | 210 if (const CSSSelectorList* selectorList = lastSelector->selectorList ()) { |
| 206 for (const CSSSelector* selector = selectorList->first(); select or; selector = CSSSelectorList::next(*selector)) | 211 for (const CSSSelector* selector = selectorList->first(); select or; selector = CSSSelectorList::next(*selector)) |
| 207 extractInvalidationSetFeatures(*selector, features); | 212 extractInvalidationSetFeatures(*selector, features); |
| 208 } | 213 } |
| 209 } | 214 } |
| 210 | 215 |
| 211 if (lastSelector->relation() != CSSSelector::SubSelector) | 216 if (lastSelector->relation() != CSSSelector::SubSelector) |
| 212 break; | 217 break; |
| 213 } | 218 } |
| 214 return lastSelector; | 219 return lastSelector; |
| 215 } | 220 } |
| 216 | 221 |
| 217 void RuleFeatureSet::addFeaturesToInvalidationSets(const CSSSelector& selector, const InvalidationSetFeatures& features, bool wholeSubtree) | 222 void RuleFeatureSet::addFeaturesToInvalidationSets(const CSSSelector& selector, const InvalidationSetFeatures& features, bool wholeSubtree) |
| 218 { | 223 { |
| 219 for (const CSSSelector* current = &selector; current; current = current->tag History()) { | 224 for (const CSSSelector* current = &selector; current; current = current->tag History()) { |
| 220 if (DescendantInvalidationSet* invalidationSet = invalidationSetForSelec tor(*current)) { | 225 if (DescendantInvalidationSet* invalidationSet = invalidationSetForSelec tor(*current, true)) { |
| 221 if (wholeSubtree) { | 226 if (wholeSubtree) { |
| 222 invalidationSet->setWholeSubtreeInvalid(); | 227 invalidationSet->setWholeSubtreeInvalid(); |
| 223 } else { | 228 } else { |
| 224 if (!features.id.isEmpty()) | 229 if (!features.id.isEmpty()) |
| 225 invalidationSet->addId(features.id); | 230 invalidationSet->addId(features.id); |
| 226 if (!features.tagName.isEmpty()) | 231 if (!features.tagName.isEmpty()) |
| 227 invalidationSet->addTagName(features.tagName); | 232 invalidationSet->addTagName(features.tagName); |
| 228 for (Vector<AtomicString>::const_iterator it = features.classes. begin(); it != features.classes.end(); ++it) | 233 for (Vector<AtomicString>::const_iterator it = features.classes. begin(); it != features.classes.end(); ++it) |
| 229 invalidationSet->addClass(*it); | 234 invalidationSet->addClass(*it); |
| 230 for (Vector<AtomicString>::const_iterator it = features.attribut es.begin(); it != features.attributes.end(); ++it) | 235 for (Vector<AtomicString>::const_iterator it = features.attribut es.begin(); it != features.attributes.end(); ++it) |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 265 invalidationSet.setWholeSubtreeInvalid(); | 270 invalidationSet.setWholeSubtreeInvalid(); |
| 266 } | 271 } |
| 267 | 272 |
| 268 void RuleFeatureSet::collectFeaturesFromRuleData(const RuleData& ruleData) | 273 void RuleFeatureSet::collectFeaturesFromRuleData(const RuleData& ruleData) |
| 269 { | 274 { |
| 270 FeatureMetadata metadata; | 275 FeatureMetadata metadata; |
| 271 InvalidationSetMode mode = UseSubtreeStyleChange; | 276 InvalidationSetMode mode = UseSubtreeStyleChange; |
| 272 if (m_targetedStyleRecalcEnabled) | 277 if (m_targetedStyleRecalcEnabled) |
| 273 mode = updateInvalidationSets(ruleData.selector()); | 278 mode = updateInvalidationSets(ruleData.selector()); |
| 274 | 279 |
| 275 collectFeaturesFromSelector(ruleData.selector(), metadata, mode); | 280 collectFeaturesFromSelector(ruleData.selector(), metadata, mode, false); |
| 276 m_metadata.add(metadata); | 281 m_metadata.add(metadata); |
| 277 | 282 |
| 278 if (metadata.foundSiblingSelector) | 283 if (metadata.foundSiblingSelector) |
| 279 siblingRules.append(RuleFeature(ruleData.rule(), ruleData.selectorIndex( ), ruleData.hasDocumentSecurityOrigin())); | 284 siblingRules.append(RuleFeature(ruleData.rule(), ruleData.selectorIndex( ), ruleData.hasDocumentSecurityOrigin())); |
| 280 if (ruleData.containsUncommonAttributeSelector()) | 285 if (ruleData.containsUncommonAttributeSelector()) |
| 281 uncommonAttributeRules.append(RuleFeature(ruleData.rule(), ruleData.sele ctorIndex(), ruleData.hasDocumentSecurityOrigin())); | 286 uncommonAttributeRules.append(RuleFeature(ruleData.rule(), ruleData.sele ctorIndex(), ruleData.hasDocumentSecurityOrigin())); |
| 282 } | 287 } |
| 283 | 288 |
| 284 DescendantInvalidationSet& RuleFeatureSet::ensureClassInvalidationSet(const Atom icString& className) | 289 DescendantInvalidationSet& RuleFeatureSet::ensureClassInvalidationSet(const Atom icString& className) |
| 285 { | 290 { |
| (...skipping 12 matching lines...) Expand all Loading... | |
| 298 } | 303 } |
| 299 | 304 |
| 300 DescendantInvalidationSet& RuleFeatureSet::ensureIdInvalidationSet(const AtomicS tring& id) | 305 DescendantInvalidationSet& RuleFeatureSet::ensureIdInvalidationSet(const AtomicS tring& id) |
| 301 { | 306 { |
| 302 InvalidationSetMap::AddResult addResult = m_idInvalidationSets.add(id, nullp tr); | 307 InvalidationSetMap::AddResult addResult = m_idInvalidationSets.add(id, nullp tr); |
| 303 if (addResult.isNewEntry) | 308 if (addResult.isNewEntry) |
| 304 addResult.storedValue->value = DescendantInvalidationSet::create(); | 309 addResult.storedValue->value = DescendantInvalidationSet::create(); |
| 305 return *addResult.storedValue->value; | 310 return *addResult.storedValue->value; |
| 306 } | 311 } |
| 307 | 312 |
| 313 DescendantInvalidationSet& RuleFeatureSet::ensurePseudoInvalidationSet(CSSSelect or::PseudoType pseudoType) | |
| 314 { | |
| 315 PseudoTypeInvalidationSetMap::AddResult addResult = m_pseudoInvalidationSets .add(pseudoType, nullptr); | |
| 316 if (addResult.isNewEntry) | |
| 317 addResult.storedValue->value = DescendantInvalidationSet::create(); | |
| 318 return *addResult.storedValue->value; | |
| 319 } | |
| 320 | |
| 308 void RuleFeatureSet::collectFeaturesFromSelector(const CSSSelector& selector) | 321 void RuleFeatureSet::collectFeaturesFromSelector(const CSSSelector& selector) |
| 309 { | 322 { |
| 310 collectFeaturesFromSelector(selector, m_metadata, UseSubtreeStyleChange); | 323 collectFeaturesFromSelector(selector, m_metadata, UseSubtreeStyleChange, fal se); |
| 311 } | 324 } |
| 312 | 325 |
| 313 void RuleFeatureSet::collectFeaturesFromSelector(const CSSSelector& selector, Ru leFeatureSet::FeatureMetadata& metadata, InvalidationSetMode mode) | 326 void RuleFeatureSet::collectFeaturesFromSelector(const CSSSelector& selector, Ru leFeatureSet::FeatureMetadata& metadata, InvalidationSetMode mode, bool seenComb inator) |
| 314 { | 327 { |
| 315 unsigned maxDirectAdjacentSelectors = 0; | 328 unsigned maxDirectAdjacentSelectors = 0; |
| 316 | 329 |
| 317 for (const CSSSelector* current = &selector; current; current = current->tag History()) { | 330 for (const CSSSelector* current = &selector; current; current = current->tag History()) { |
| 318 if (mode != AddFeatures && (current->m_match == CSSSelector::Class || cu rrent->m_match == CSSSelector::Id || current->isAttributeSelector())) { | 331 if (mode != AddFeatures) { |
| 319 DescendantInvalidationSet* invalidationSet = invalidationSetForSelec tor(*current); | 332 if (DescendantInvalidationSet* invalidationSet = invalidationSetForS elector(*current, seenCombinator)) { |
| 320 ASSERT(invalidationSet); | 333 if (mode == UseSubtreeStyleChange) |
| 321 if (mode == UseSubtreeStyleChange) | 334 invalidationSet->setWholeSubtreeInvalid(); |
| 322 invalidationSet->setWholeSubtreeInvalid(); | 335 } |
| 323 } | 336 } |
| 324 if (current->pseudoType() == CSSSelector::PseudoFirstLine) | 337 if (current->pseudoType() == CSSSelector::PseudoFirstLine) |
| 325 metadata.usesFirstLineRules = true; | 338 metadata.usesFirstLineRules = true; |
| 326 if (current->isDirectAdjacentSelector()) { | 339 if (current->isDirectAdjacentSelector()) { |
| 327 maxDirectAdjacentSelectors++; | 340 maxDirectAdjacentSelectors++; |
| 328 } else if (maxDirectAdjacentSelectors) { | 341 } else if (maxDirectAdjacentSelectors) { |
| 329 if (maxDirectAdjacentSelectors > metadata.maxDirectAdjacentSelectors ) | 342 if (maxDirectAdjacentSelectors > metadata.maxDirectAdjacentSelectors ) |
| 330 metadata.maxDirectAdjacentSelectors = maxDirectAdjacentSelectors ; | 343 metadata.maxDirectAdjacentSelectors = maxDirectAdjacentSelectors ; |
| 331 maxDirectAdjacentSelectors = 0; | 344 maxDirectAdjacentSelectors = 0; |
| 332 } | 345 } |
| 333 if (current->isSiblingSelector()) | 346 if (current->isSiblingSelector()) |
| 334 metadata.foundSiblingSelector = true; | 347 metadata.foundSiblingSelector = true; |
| 335 | 348 |
| 336 collectFeaturesFromSelectorList(current->selectorList(), metadata, mode) ; | 349 collectFeaturesFromSelectorList(current->selectorList(), metadata, mode, seenCombinator); |
| 337 | 350 |
| 338 if (mode == UseLocalStyleChange && current->relation() != CSSSelector::S ubSelector) | 351 if (mode == UseLocalStyleChange && current->relation() != CSSSelector::S ubSelector) { |
| 352 seenCombinator = true; | |
| 339 mode = UseSubtreeStyleChange; | 353 mode = UseSubtreeStyleChange; |
| 354 } | |
| 340 } | 355 } |
| 341 | 356 |
| 342 ASSERT(!maxDirectAdjacentSelectors); | 357 ASSERT(!maxDirectAdjacentSelectors); |
| 343 } | 358 } |
| 344 | 359 |
| 345 void RuleFeatureSet::collectFeaturesFromSelectorList(const CSSSelectorList* sele ctorList, RuleFeatureSet::FeatureMetadata& metadata, InvalidationSetMode mode) | 360 void RuleFeatureSet::collectFeaturesFromSelectorList(const CSSSelectorList* sele ctorList, RuleFeatureSet::FeatureMetadata& metadata, InvalidationSetMode mode, b ool seenCombinator) |
| 346 { | 361 { |
| 347 if (!selectorList) | 362 if (!selectorList) |
| 348 return; | 363 return; |
| 349 | 364 |
| 350 for (const CSSSelector* selector = selectorList->first(); selector; selector = CSSSelectorList::next(*selector)) | 365 for (const CSSSelector* selector = selectorList->first(); selector; selector = CSSSelectorList::next(*selector)) |
| 351 collectFeaturesFromSelector(*selector, metadata, mode); | 366 collectFeaturesFromSelector(*selector, metadata, mode, seenCombinator); |
| 352 } | 367 } |
| 353 | 368 |
| 354 void RuleFeatureSet::FeatureMetadata::add(const FeatureMetadata& other) | 369 void RuleFeatureSet::FeatureMetadata::add(const FeatureMetadata& other) |
| 355 { | 370 { |
| 356 usesFirstLineRules = usesFirstLineRules || other.usesFirstLineRules; | 371 usesFirstLineRules = usesFirstLineRules || other.usesFirstLineRules; |
| 357 maxDirectAdjacentSelectors = std::max(maxDirectAdjacentSelectors, other.maxD irectAdjacentSelectors); | 372 maxDirectAdjacentSelectors = std::max(maxDirectAdjacentSelectors, other.maxD irectAdjacentSelectors); |
| 358 } | 373 } |
| 359 | 374 |
| 360 void RuleFeatureSet::FeatureMetadata::clear() | 375 void RuleFeatureSet::FeatureMetadata::clear() |
| 361 { | 376 { |
| 362 usesFirstLineRules = false; | 377 usesFirstLineRules = false; |
| 363 foundSiblingSelector = false; | 378 foundSiblingSelector = false; |
| 364 maxDirectAdjacentSelectors = 0; | 379 maxDirectAdjacentSelectors = 0; |
| 365 } | 380 } |
| 366 | 381 |
| 367 void RuleFeatureSet::add(const RuleFeatureSet& other) | 382 void RuleFeatureSet::add(const RuleFeatureSet& other) |
| 368 { | 383 { |
| 369 for (InvalidationSetMap::const_iterator it = other.m_classInvalidationSets.b egin(); it != other.m_classInvalidationSets.end(); ++it) | 384 for (InvalidationSetMap::const_iterator it = other.m_classInvalidationSets.b egin(); it != other.m_classInvalidationSets.end(); ++it) |
| 370 ensureClassInvalidationSet(it->key).combine(*it->value); | 385 ensureClassInvalidationSet(it->key).combine(*it->value); |
| 371 for (InvalidationSetMap::const_iterator it = other.m_attributeInvalidationSe ts.begin(); it != other.m_attributeInvalidationSets.end(); ++it) | 386 for (InvalidationSetMap::const_iterator it = other.m_attributeInvalidationSe ts.begin(); it != other.m_attributeInvalidationSets.end(); ++it) |
| 372 ensureAttributeInvalidationSet(it->key).combine(*it->value); | 387 ensureAttributeInvalidationSet(it->key).combine(*it->value); |
| 373 for (InvalidationSetMap::const_iterator it = other.m_idInvalidationSets.begi n(); it != other.m_idInvalidationSets.end(); ++it) | 388 for (InvalidationSetMap::const_iterator it = other.m_idInvalidationSets.begi n(); it != other.m_idInvalidationSets.end(); ++it) |
| 374 ensureIdInvalidationSet(it->key).combine(*it->value); | 389 ensureIdInvalidationSet(it->key).combine(*it->value); |
| 390 for (PseudoTypeInvalidationSetMap::const_iterator it = other.m_pseudoInvalid ationSets.begin(); it != other.m_pseudoInvalidationSets.end(); ++it) | |
| 391 ensurePseudoInvalidationSet(static_cast<CSSSelector::PseudoType>(it->key )).combine(*it->value); | |
|
esprehn
2014/04/11 20:23:01
Why do you need the cast?
rune
2014/04/11 22:34:36
It's because of the use of IntHash:
typedef Has
| |
| 375 | 392 |
| 376 m_metadata.add(other.m_metadata); | 393 m_metadata.add(other.m_metadata); |
| 377 | 394 |
| 378 siblingRules.appendVector(other.siblingRules); | 395 siblingRules.appendVector(other.siblingRules); |
| 379 uncommonAttributeRules.appendVector(other.uncommonAttributeRules); | 396 uncommonAttributeRules.appendVector(other.uncommonAttributeRules); |
| 380 } | 397 } |
| 381 | 398 |
| 382 void RuleFeatureSet::clear() | 399 void RuleFeatureSet::clear() |
| 383 { | 400 { |
| 384 siblingRules.clear(); | 401 siblingRules.clear(); |
| (...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 445 if (!oldId.isEmpty()) { | 462 if (!oldId.isEmpty()) { |
| 446 if (RefPtr<DescendantInvalidationSet> invalidationSet = m_idInvalidation Sets.get(oldId)) | 463 if (RefPtr<DescendantInvalidationSet> invalidationSet = m_idInvalidation Sets.get(oldId)) |
| 447 m_styleInvalidator.scheduleInvalidation(invalidationSet, element); | 464 m_styleInvalidator.scheduleInvalidation(invalidationSet, element); |
| 448 } | 465 } |
| 449 if (!newId.isEmpty()) { | 466 if (!newId.isEmpty()) { |
| 450 if (RefPtr<DescendantInvalidationSet> invalidationSet = m_idInvalidation Sets.get(newId)) | 467 if (RefPtr<DescendantInvalidationSet> invalidationSet = m_idInvalidation Sets.get(newId)) |
| 451 m_styleInvalidator.scheduleInvalidation(invalidationSet, element); | 468 m_styleInvalidator.scheduleInvalidation(invalidationSet, element); |
| 452 } | 469 } |
| 453 } | 470 } |
| 454 | 471 |
| 472 void RuleFeatureSet::scheduleStyleInvalidationForPseudoChange(CSSSelector::Pseud oType pseudo, Element& element) | |
| 473 { | |
| 474 if (RefPtr<DescendantInvalidationSet> invalidationSet = m_pseudoInvalidation Sets.get(pseudo)) | |
| 475 m_styleInvalidator.scheduleInvalidation(invalidationSet, element); | |
| 476 } | |
| 477 | |
| 455 void RuleFeatureSet::addClassToInvalidationSet(const AtomicString& className, El ement& element) | 478 void RuleFeatureSet::addClassToInvalidationSet(const AtomicString& className, El ement& element) |
| 456 { | 479 { |
| 457 if (RefPtr<DescendantInvalidationSet> invalidationSet = m_classInvalidationS ets.get(className)) | 480 if (RefPtr<DescendantInvalidationSet> invalidationSet = m_classInvalidationS ets.get(className)) |
| 458 m_styleInvalidator.scheduleInvalidation(invalidationSet, element); | 481 m_styleInvalidator.scheduleInvalidation(invalidationSet, element); |
| 459 } | 482 } |
| 460 | 483 |
| 461 StyleInvalidator& RuleFeatureSet::styleInvalidator() | 484 StyleInvalidator& RuleFeatureSet::styleInvalidator() |
| 462 { | 485 { |
| 463 return m_styleInvalidator; | 486 return m_styleInvalidator; |
| 464 } | 487 } |
| 465 | 488 |
| 466 } // namespace WebCore | 489 } // namespace WebCore |
| OLD | NEW |