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) { | |
| 178 if (selector.pseudoType() == CSSSelector::PseudoHover) | |
| 179 return &ensureHoverInvalidationSet(); | |
|
esprehn
2014/04/04 22:48:27
Lets use a HashMap<CSSSelector::PseudoType, Descen
rune
2014/04/08 16:28:25
Done.
| |
| 180 if (selector.pseudoType() == CSSSelector::PseudoActive) | |
| 181 return &ensureActiveInvalidationSet(); | |
| 182 if (selector.pseudoType() == CSSSelector::PseudoFocus) | |
| 183 return &ensureFocusInvalidationSet(); | |
| 184 } | |
| 177 return 0; | 185 return 0; |
| 178 } | 186 } |
| 179 | 187 |
| 180 RuleFeatureSet::InvalidationSetMode RuleFeatureSet::updateInvalidationSets(const CSSSelector& selector) | 188 RuleFeatureSet::InvalidationSetMode RuleFeatureSet::updateInvalidationSets(const CSSSelector& selector) |
| 181 { | 189 { |
| 182 InvalidationSetMode mode = invalidationSetModeForSelector(selector); | 190 InvalidationSetMode mode = invalidationSetModeForSelector(selector); |
| 183 if (mode != AddFeatures) | 191 if (mode != AddFeatures) |
| 184 return mode; | 192 return mode; |
| 185 | 193 |
| 186 InvalidationSetFeatures features; | 194 InvalidationSetFeatures features; |
| 187 const CSSSelector* current = extractInvalidationSetFeatures(selector, featur es); | 195 const CSSSelector* current = extractInvalidationSetFeatures(selector, featur es); |
| 188 if (current) { | 196 if (current) { |
| 189 bool wholeSubtree = current->relation() == CSSSelector::DirectAdjacent | | current->relation() == CSSSelector::IndirectAdjacent; | 197 bool wholeSubtree = current->relation() == CSSSelector::DirectAdjacent | | current->relation() == CSSSelector::IndirectAdjacent; |
| 190 current = current->tagHistory(); | 198 current = current->tagHistory(); |
| 191 if (current) | 199 if (current) |
| 192 addFeaturesToInvalidationSets(*current, features, wholeSubtree); | 200 addFeaturesToInvalidationSets(*current, features, wholeSubtree); |
| 193 } | 201 } |
| 194 return AddFeatures; | 202 return AddFeatures; |
| 195 } | 203 } |
| 196 | 204 |
| 197 const CSSSelector* RuleFeatureSet::extractInvalidationSetFeatures(const CSSSelec tor& selector, InvalidationSetFeatures& features) | 205 const CSSSelector* RuleFeatureSet::extractInvalidationSetFeatures(const CSSSelec tor& selector, InvalidationSetFeatures& features) |
| 198 { | 206 { |
| 199 const CSSSelector* lastSelector = &selector; | 207 const CSSSelector* lastSelector = &selector; |
| 200 for (; lastSelector; lastSelector = lastSelector->tagHistory()) { | 208 for (; lastSelector; lastSelector = lastSelector->tagHistory()) { |
| 201 extractInvalidationSetFeature(*lastSelector, features); | 209 extractInvalidationSetFeature(*lastSelector, features); |
| 202 // Initialize the entry in the invalidation set map, if supported. | 210 // Initialize the entry in the invalidation set map, if supported. |
| 203 invalidationSetForSelector(*lastSelector); | 211 invalidationSetForSelector(*lastSelector, false); |
| 204 if (lastSelector->pseudoType() == CSSSelector::PseudoHost || lastSelecto r->pseudoType() == CSSSelector::PseudoAny) { | 212 if (lastSelector->pseudoType() == CSSSelector::PseudoHost || lastSelecto r->pseudoType() == CSSSelector::PseudoAny) { |
| 205 if (const CSSSelectorList* selectorList = lastSelector->selectorList ()) { | 213 if (const CSSSelectorList* selectorList = lastSelector->selectorList ()) { |
| 206 for (const CSSSelector* selector = selectorList->first(); select or; selector = CSSSelectorList::next(*selector)) | 214 for (const CSSSelector* selector = selectorList->first(); select or; selector = CSSSelectorList::next(*selector)) |
| 207 extractInvalidationSetFeatures(*selector, features); | 215 extractInvalidationSetFeatures(*selector, features); |
| 208 } | 216 } |
| 209 } | 217 } |
| 210 | 218 |
| 211 if (lastSelector->relation() != CSSSelector::SubSelector) | 219 if (lastSelector->relation() != CSSSelector::SubSelector) |
| 212 break; | 220 break; |
| 213 } | 221 } |
| 214 return lastSelector; | 222 return lastSelector; |
| 215 } | 223 } |
| 216 | 224 |
| 217 void RuleFeatureSet::addFeaturesToInvalidationSets(const CSSSelector& selector, const InvalidationSetFeatures& features, bool wholeSubtree) | 225 void RuleFeatureSet::addFeaturesToInvalidationSets(const CSSSelector& selector, const InvalidationSetFeatures& features, bool wholeSubtree) |
| 218 { | 226 { |
| 219 for (const CSSSelector* current = &selector; current; current = current->tag History()) { | 227 for (const CSSSelector* current = &selector; current; current = current->tag History()) { |
| 220 if (DescendantInvalidationSet* invalidationSet = invalidationSetForSelec tor(*current)) { | 228 if (DescendantInvalidationSet* invalidationSet = invalidationSetForSelec tor(*current, true)) { |
| 221 if (wholeSubtree) { | 229 if (wholeSubtree) { |
| 222 invalidationSet->setWholeSubtreeInvalid(); | 230 invalidationSet->setWholeSubtreeInvalid(); |
| 223 } else { | 231 } else { |
| 224 if (!features.id.isEmpty()) | 232 if (!features.id.isEmpty()) |
| 225 invalidationSet->addId(features.id); | 233 invalidationSet->addId(features.id); |
| 226 if (!features.tagName.isEmpty()) | 234 if (!features.tagName.isEmpty()) |
| 227 invalidationSet->addTagName(features.tagName); | 235 invalidationSet->addTagName(features.tagName); |
| 228 for (Vector<AtomicString>::const_iterator it = features.classes. begin(); it != features.classes.end(); ++it) | 236 for (Vector<AtomicString>::const_iterator it = features.classes. begin(); it != features.classes.end(); ++it) |
| 229 invalidationSet->addClass(*it); | 237 invalidationSet->addClass(*it); |
| 230 for (Vector<AtomicString>::const_iterator it = features.attribut es.begin(); it != features.attributes.end(); ++it) | 238 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(); | 273 invalidationSet.setWholeSubtreeInvalid(); |
| 266 } | 274 } |
| 267 | 275 |
| 268 void RuleFeatureSet::collectFeaturesFromRuleData(const RuleData& ruleData) | 276 void RuleFeatureSet::collectFeaturesFromRuleData(const RuleData& ruleData) |
| 269 { | 277 { |
| 270 FeatureMetadata metadata; | 278 FeatureMetadata metadata; |
| 271 InvalidationSetMode mode = UseSubtreeStyleChange; | 279 InvalidationSetMode mode = UseSubtreeStyleChange; |
| 272 if (m_targetedStyleRecalcEnabled) | 280 if (m_targetedStyleRecalcEnabled) |
| 273 mode = updateInvalidationSets(ruleData.selector()); | 281 mode = updateInvalidationSets(ruleData.selector()); |
| 274 | 282 |
| 275 collectFeaturesFromSelector(ruleData.selector(), metadata, mode); | 283 collectFeaturesFromSelector(ruleData.selector(), metadata, mode, false); |
| 276 m_metadata.add(metadata); | 284 m_metadata.add(metadata); |
| 277 | 285 |
| 278 if (metadata.foundSiblingSelector) | 286 if (metadata.foundSiblingSelector) |
| 279 siblingRules.append(RuleFeature(ruleData.rule(), ruleData.selectorIndex( ), ruleData.hasDocumentSecurityOrigin())); | 287 siblingRules.append(RuleFeature(ruleData.rule(), ruleData.selectorIndex( ), ruleData.hasDocumentSecurityOrigin())); |
| 280 if (ruleData.containsUncommonAttributeSelector()) | 288 if (ruleData.containsUncommonAttributeSelector()) |
| 281 uncommonAttributeRules.append(RuleFeature(ruleData.rule(), ruleData.sele ctorIndex(), ruleData.hasDocumentSecurityOrigin())); | 289 uncommonAttributeRules.append(RuleFeature(ruleData.rule(), ruleData.sele ctorIndex(), ruleData.hasDocumentSecurityOrigin())); |
| 282 } | 290 } |
| 283 | 291 |
| 284 DescendantInvalidationSet& RuleFeatureSet::ensureClassInvalidationSet(const Atom icString& className) | 292 DescendantInvalidationSet& RuleFeatureSet::ensureClassInvalidationSet(const Atom icString& className) |
| 285 { | 293 { |
| (...skipping 12 matching lines...) Expand all Loading... | |
| 298 } | 306 } |
| 299 | 307 |
| 300 DescendantInvalidationSet& RuleFeatureSet::ensureIdInvalidationSet(const AtomicS tring& id) | 308 DescendantInvalidationSet& RuleFeatureSet::ensureIdInvalidationSet(const AtomicS tring& id) |
| 301 { | 309 { |
| 302 InvalidationSetMap::AddResult addResult = m_idInvalidationSets.add(id, nullp tr); | 310 InvalidationSetMap::AddResult addResult = m_idInvalidationSets.add(id, nullp tr); |
| 303 if (addResult.isNewEntry) | 311 if (addResult.isNewEntry) |
| 304 addResult.storedValue->value = DescendantInvalidationSet::create(); | 312 addResult.storedValue->value = DescendantInvalidationSet::create(); |
| 305 return *addResult.storedValue->value; | 313 return *addResult.storedValue->value; |
| 306 } | 314 } |
| 307 | 315 |
| 316 DescendantInvalidationSet& RuleFeatureSet::ensureHoverInvalidationSet() | |
| 317 { | |
| 318 if (!m_hoverInvalidationSet) | |
| 319 m_hoverInvalidationSet = DescendantInvalidationSet::create(); | |
| 320 return *m_hoverInvalidationSet; | |
| 321 } | |
| 322 | |
| 323 DescendantInvalidationSet& RuleFeatureSet::ensureActiveInvalidationSet() | |
| 324 { | |
| 325 if (!m_activeInvalidationSet) | |
| 326 m_activeInvalidationSet = DescendantInvalidationSet::create(); | |
| 327 return *m_activeInvalidationSet; | |
| 328 } | |
| 329 | |
| 330 DescendantInvalidationSet& RuleFeatureSet::ensureFocusInvalidationSet() | |
| 331 { | |
| 332 if (!m_focusInvalidationSet) | |
| 333 m_focusInvalidationSet = DescendantInvalidationSet::create(); | |
| 334 return *m_focusInvalidationSet; | |
| 335 } | |
| 336 | |
| 308 void RuleFeatureSet::collectFeaturesFromSelector(const CSSSelector& selector) | 337 void RuleFeatureSet::collectFeaturesFromSelector(const CSSSelector& selector) |
| 309 { | 338 { |
| 310 collectFeaturesFromSelector(selector, m_metadata, UseSubtreeStyleChange); | 339 collectFeaturesFromSelector(selector, m_metadata, UseSubtreeStyleChange, fal se); |
| 311 } | 340 } |
| 312 | 341 |
| 313 void RuleFeatureSet::collectFeaturesFromSelector(const CSSSelector& selector, Ru leFeatureSet::FeatureMetadata& metadata, InvalidationSetMode mode) | 342 void RuleFeatureSet::collectFeaturesFromSelector(const CSSSelector& selector, Ru leFeatureSet::FeatureMetadata& metadata, InvalidationSetMode mode, bool seenComb inator) |
| 314 { | 343 { |
| 315 unsigned maxDirectAdjacentSelectors = 0; | 344 unsigned maxDirectAdjacentSelectors = 0; |
| 316 | 345 |
| 317 for (const CSSSelector* current = &selector; current; current = current->tag History()) { | 346 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())) { | 347 if (mode != AddFeatures) { |
| 319 DescendantInvalidationSet* invalidationSet = invalidationSetForSelec tor(*current); | 348 if (DescendantInvalidationSet* invalidationSet = invalidationSetForS elector(*current, seenCombinator)) { |
| 320 ASSERT(invalidationSet); | 349 if (mode == UseSubtreeStyleChange) |
| 321 if (mode == UseSubtreeStyleChange) | 350 invalidationSet->setWholeSubtreeInvalid(); |
| 322 invalidationSet->setWholeSubtreeInvalid(); | 351 } |
| 323 } | 352 } |
| 324 if (current->pseudoType() == CSSSelector::PseudoFirstLine) | 353 if (current->pseudoType() == CSSSelector::PseudoFirstLine) |
| 325 metadata.usesFirstLineRules = true; | 354 metadata.usesFirstLineRules = true; |
| 326 if (current->isDirectAdjacentSelector()) { | 355 if (current->isDirectAdjacentSelector()) { |
| 327 maxDirectAdjacentSelectors++; | 356 maxDirectAdjacentSelectors++; |
| 328 } else if (maxDirectAdjacentSelectors) { | 357 } else if (maxDirectAdjacentSelectors) { |
| 329 if (maxDirectAdjacentSelectors > metadata.maxDirectAdjacentSelectors ) | 358 if (maxDirectAdjacentSelectors > metadata.maxDirectAdjacentSelectors ) |
| 330 metadata.maxDirectAdjacentSelectors = maxDirectAdjacentSelectors ; | 359 metadata.maxDirectAdjacentSelectors = maxDirectAdjacentSelectors ; |
| 331 maxDirectAdjacentSelectors = 0; | 360 maxDirectAdjacentSelectors = 0; |
| 332 } | 361 } |
| 333 if (current->isSiblingSelector()) | 362 if (current->isSiblingSelector()) |
| 334 metadata.foundSiblingSelector = true; | 363 metadata.foundSiblingSelector = true; |
| 335 | 364 |
| 336 collectFeaturesFromSelectorList(current->selectorList(), metadata, mode) ; | 365 collectFeaturesFromSelectorList(current->selectorList(), metadata, mode, seenCombinator); |
| 337 | 366 |
| 338 if (mode == UseLocalStyleChange && current->relation() != CSSSelector::S ubSelector) | 367 if (mode == UseLocalStyleChange && current->relation() != CSSSelector::S ubSelector) { |
| 368 seenCombinator = true; | |
| 339 mode = UseSubtreeStyleChange; | 369 mode = UseSubtreeStyleChange; |
| 370 } | |
| 340 } | 371 } |
| 341 | 372 |
| 342 ASSERT(!maxDirectAdjacentSelectors); | 373 ASSERT(!maxDirectAdjacentSelectors); |
| 343 } | 374 } |
| 344 | 375 |
| 345 void RuleFeatureSet::collectFeaturesFromSelectorList(const CSSSelectorList* sele ctorList, RuleFeatureSet::FeatureMetadata& metadata, InvalidationSetMode mode) | 376 void RuleFeatureSet::collectFeaturesFromSelectorList(const CSSSelectorList* sele ctorList, RuleFeatureSet::FeatureMetadata& metadata, InvalidationSetMode mode, b ool seenCombinator) |
| 346 { | 377 { |
| 347 if (!selectorList) | 378 if (!selectorList) |
| 348 return; | 379 return; |
| 349 | 380 |
| 350 for (const CSSSelector* selector = selectorList->first(); selector; selector = CSSSelectorList::next(*selector)) | 381 for (const CSSSelector* selector = selectorList->first(); selector; selector = CSSSelectorList::next(*selector)) |
| 351 collectFeaturesFromSelector(*selector, metadata, mode); | 382 collectFeaturesFromSelector(*selector, metadata, mode, seenCombinator); |
| 352 } | 383 } |
| 353 | 384 |
| 354 void RuleFeatureSet::FeatureMetadata::add(const FeatureMetadata& other) | 385 void RuleFeatureSet::FeatureMetadata::add(const FeatureMetadata& other) |
| 355 { | 386 { |
| 356 usesFirstLineRules = usesFirstLineRules || other.usesFirstLineRules; | 387 usesFirstLineRules = usesFirstLineRules || other.usesFirstLineRules; |
| 357 maxDirectAdjacentSelectors = std::max(maxDirectAdjacentSelectors, other.maxD irectAdjacentSelectors); | 388 maxDirectAdjacentSelectors = std::max(maxDirectAdjacentSelectors, other.maxD irectAdjacentSelectors); |
| 358 } | 389 } |
| 359 | 390 |
| 360 void RuleFeatureSet::FeatureMetadata::clear() | 391 void RuleFeatureSet::FeatureMetadata::clear() |
| 361 { | 392 { |
| 362 usesFirstLineRules = false; | 393 usesFirstLineRules = false; |
| 363 foundSiblingSelector = false; | 394 foundSiblingSelector = false; |
| 364 maxDirectAdjacentSelectors = 0; | 395 maxDirectAdjacentSelectors = 0; |
| 365 } | 396 } |
| 366 | 397 |
| 367 void RuleFeatureSet::add(const RuleFeatureSet& other) | 398 void RuleFeatureSet::add(const RuleFeatureSet& other) |
| 368 { | 399 { |
| 369 for (InvalidationSetMap::const_iterator it = other.m_classInvalidationSets.b egin(); it != other.m_classInvalidationSets.end(); ++it) | 400 for (InvalidationSetMap::const_iterator it = other.m_classInvalidationSets.b egin(); it != other.m_classInvalidationSets.end(); ++it) |
| 370 ensureClassInvalidationSet(it->key).combine(*it->value); | 401 ensureClassInvalidationSet(it->key).combine(*it->value); |
| 371 for (InvalidationSetMap::const_iterator it = other.m_attributeInvalidationSe ts.begin(); it != other.m_attributeInvalidationSets.end(); ++it) | 402 for (InvalidationSetMap::const_iterator it = other.m_attributeInvalidationSe ts.begin(); it != other.m_attributeInvalidationSets.end(); ++it) |
| 372 ensureAttributeInvalidationSet(it->key).combine(*it->value); | 403 ensureAttributeInvalidationSet(it->key).combine(*it->value); |
| 373 for (InvalidationSetMap::const_iterator it = other.m_idInvalidationSets.begi n(); it != other.m_idInvalidationSets.end(); ++it) | 404 for (InvalidationSetMap::const_iterator it = other.m_idInvalidationSets.begi n(); it != other.m_idInvalidationSets.end(); ++it) |
| 374 ensureIdInvalidationSet(it->key).combine(*it->value); | 405 ensureIdInvalidationSet(it->key).combine(*it->value); |
| 375 | 406 |
| 407 if (other.m_hoverInvalidationSet) | |
| 408 ensureHoverInvalidationSet().combine(*other.m_hoverInvalidationSet); | |
| 409 if (other.m_activeInvalidationSet) | |
| 410 ensureActiveInvalidationSet().combine(*other.m_activeInvalidationSet); | |
| 411 if (other.m_focusInvalidationSet) | |
| 412 ensureFocusInvalidationSet().combine(*other.m_focusInvalidationSet); | |
| 413 | |
| 376 m_metadata.add(other.m_metadata); | 414 m_metadata.add(other.m_metadata); |
| 377 | 415 |
| 378 siblingRules.appendVector(other.siblingRules); | 416 siblingRules.appendVector(other.siblingRules); |
| 379 uncommonAttributeRules.appendVector(other.uncommonAttributeRules); | 417 uncommonAttributeRules.appendVector(other.uncommonAttributeRules); |
| 380 } | 418 } |
| 381 | 419 |
| 382 void RuleFeatureSet::clear() | 420 void RuleFeatureSet::clear() |
| 383 { | 421 { |
| 384 siblingRules.clear(); | 422 siblingRules.clear(); |
| 385 uncommonAttributeRules.clear(); | 423 uncommonAttributeRules.clear(); |
| (...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 442 if (!oldId.isEmpty()) { | 480 if (!oldId.isEmpty()) { |
| 443 if (RefPtr<DescendantInvalidationSet> invalidationSet = m_idInvalidation Sets.get(oldId)) | 481 if (RefPtr<DescendantInvalidationSet> invalidationSet = m_idInvalidation Sets.get(oldId)) |
| 444 m_styleInvalidator.scheduleInvalidation(invalidationSet, element); | 482 m_styleInvalidator.scheduleInvalidation(invalidationSet, element); |
| 445 } | 483 } |
| 446 if (!newId.isEmpty()) { | 484 if (!newId.isEmpty()) { |
| 447 if (RefPtr<DescendantInvalidationSet> invalidationSet = m_idInvalidation Sets.get(newId)) | 485 if (RefPtr<DescendantInvalidationSet> invalidationSet = m_idInvalidation Sets.get(newId)) |
| 448 m_styleInvalidator.scheduleInvalidation(invalidationSet, element); | 486 m_styleInvalidator.scheduleInvalidation(invalidationSet, element); |
| 449 } | 487 } |
| 450 } | 488 } |
| 451 | 489 |
| 490 void RuleFeatureSet::scheduleStyleInvalidationForHoverChange(Element& element) | |
| 491 { | |
| 492 if (m_hoverInvalidationSet) | |
| 493 m_styleInvalidator.scheduleInvalidation(m_hoverInvalidationSet, element) ; | |
| 494 } | |
| 495 | |
| 496 void RuleFeatureSet::scheduleStyleInvalidationForActiveChange(Element& element) | |
| 497 { | |
| 498 if (m_activeInvalidationSet) | |
| 499 m_styleInvalidator.scheduleInvalidation(m_activeInvalidationSet, element ); | |
| 500 } | |
| 501 | |
| 502 void RuleFeatureSet::scheduleStyleInvalidationForFocusChange(Element& element) | |
| 503 { | |
| 504 if (m_focusInvalidationSet) | |
| 505 m_styleInvalidator.scheduleInvalidation(m_focusInvalidationSet, element) ; | |
| 506 } | |
| 507 | |
| 452 void RuleFeatureSet::addClassToInvalidationSet(const AtomicString& className, El ement& element) | 508 void RuleFeatureSet::addClassToInvalidationSet(const AtomicString& className, El ement& element) |
| 453 { | 509 { |
| 454 if (RefPtr<DescendantInvalidationSet> invalidationSet = m_classInvalidationS ets.get(className)) | 510 if (RefPtr<DescendantInvalidationSet> invalidationSet = m_classInvalidationS ets.get(className)) |
| 455 m_styleInvalidator.scheduleInvalidation(invalidationSet, element); | 511 m_styleInvalidator.scheduleInvalidation(invalidationSet, element); |
| 456 } | 512 } |
| 457 | 513 |
| 458 StyleInvalidator& RuleFeatureSet::styleInvalidator() | 514 StyleInvalidator& RuleFeatureSet::styleInvalidator() |
| 459 { | 515 { |
| 460 return m_styleInvalidator; | 516 return m_styleInvalidator; |
| 461 } | 517 } |
| 462 | 518 |
| 463 } // namespace WebCore | 519 } // namespace WebCore |
| OLD | NEW |