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 |