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

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

Issue 652223002: Support style invalidation for ::content. (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Created 6 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
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 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
46 if (selector.match() == CSSSelector::Tag) { 46 if (selector.match() == CSSSelector::Tag) {
47 ASSERT(selector.tagQName().localName() == starAtom); 47 ASSERT(selector.tagQName().localName() == starAtom);
48 return true; 48 return true;
49 } 49 }
50 if (selector.match() == CSSSelector::PseudoElement) { 50 if (selector.match() == CSSSelector::PseudoElement) {
51 switch (selector.pseudoType()) { 51 switch (selector.pseudoType()) {
52 case CSSSelector::PseudoBefore: 52 case CSSSelector::PseudoBefore:
53 case CSSSelector::PseudoAfter: 53 case CSSSelector::PseudoAfter:
54 case CSSSelector::PseudoBackdrop: 54 case CSSSelector::PseudoBackdrop:
55 case CSSSelector::PseudoShadow: 55 case CSSSelector::PseudoShadow:
56 case CSSSelector::PseudoContent:
56 return true; 57 return true;
57 default: 58 default:
58 ASSERT(!selector.isCustomPseudoElement()); 59 ASSERT(!selector.isCustomPseudoElement());
59 return false; 60 return false;
60 } 61 }
61 } 62 }
62 if (selector.match() != CSSSelector::PseudoClass) 63 if (selector.match() != CSSSelector::PseudoClass)
63 return false; 64 return false;
64 switch (selector.pseudoType()) { 65 switch (selector.pseudoType()) {
65 case CSSSelector::PseudoEmpty: 66 case CSSSelector::PseudoEmpty:
(...skipping 215 matching lines...) Expand 10 before | Expand all | Expand 10 after
281 // ContainerNode::checkForChildrenAdjacentRuleChanges. 282 // ContainerNode::checkForChildrenAdjacentRuleChanges.
282 // 283 //
283 // As we encounter a descendant type of combinator, the features only need to be checked 284 // As we encounter a descendant type of combinator, the features only need to be checked
284 // against descendants in the same subtree only. features.adjacent is set to fal se, and 285 // against descendants in the same subtree only. features.adjacent is set to fal se, and
285 // we start adding features instead of calling setWholeSubtreeInvalid. 286 // we start adding features instead of calling setWholeSubtreeInvalid.
286 287
287 void RuleFeatureSet::addFeaturesToInvalidationSet(DescendantInvalidationSet& inv alidationSet, const InvalidationSetFeatures& features) 288 void RuleFeatureSet::addFeaturesToInvalidationSet(DescendantInvalidationSet& inv alidationSet, const InvalidationSetFeatures& features)
288 { 289 {
289 if (features.treeBoundaryCrossing) 290 if (features.treeBoundaryCrossing)
290 invalidationSet.setTreeBoundaryCrossing(); 291 invalidationSet.setTreeBoundaryCrossing();
292 if (features.insertionPointCrossing)
293 invalidationSet.setInsertionPointCrossing();
291 if (features.adjacent) { 294 if (features.adjacent) {
292 invalidationSet.setWholeSubtreeInvalid(); 295 invalidationSet.setWholeSubtreeInvalid();
293 return; 296 return;
294 } 297 }
295 if (!features.id.isEmpty()) 298 if (!features.id.isEmpty())
296 invalidationSet.addId(features.id); 299 invalidationSet.addId(features.id);
297 if (!features.tagName.isEmpty()) 300 if (!features.tagName.isEmpty())
298 invalidationSet.addTagName(features.tagName); 301 invalidationSet.addTagName(features.tagName);
299 for (const auto& className : features.classes) 302 for (const auto& className : features.classes)
300 invalidationSet.addClass(className); 303 invalidationSet.addClass(className);
301 for (const auto& attribute : features.attributes) 304 for (const auto& attribute : features.attributes)
302 invalidationSet.addAttribute(attribute); 305 invalidationSet.addAttribute(attribute);
303 if (features.customPseudoElement) 306 if (features.customPseudoElement)
304 invalidationSet.setCustomPseudoInvalid(); 307 invalidationSet.setCustomPseudoInvalid();
305 } 308 }
306 309
307 void RuleFeatureSet::addFeaturesToInvalidationSets(const CSSSelector& selector, InvalidationSetFeatures& features) 310 void RuleFeatureSet::addFeaturesToInvalidationSets(const CSSSelector& selector, InvalidationSetFeatures& features)
308 { 311 {
309 for (const CSSSelector* current = &selector; current; current = current->tag History()) { 312 for (const CSSSelector* current = &selector; current; current = current->tag History()) {
310 if (DescendantInvalidationSet* invalidationSet = invalidationSetForSelec tor(*current)) { 313 if (DescendantInvalidationSet* invalidationSet = invalidationSetForSelec tor(*current)) {
311 addFeaturesToInvalidationSet(*invalidationSet, features); 314 addFeaturesToInvalidationSet(*invalidationSet, features);
312 } else { 315 } else {
313 if (current->pseudoType() == CSSSelector::PseudoHost) 316 if (current->isTreeBoundaryCrossing())
314 features.treeBoundaryCrossing = true; 317 features.treeBoundaryCrossing = true;
318 if (current->isInsertionPointCrossing())
319 features.insertionPointCrossing = true;
315 if (const CSSSelectorList* selectorList = current->selectorList()) { 320 if (const CSSSelectorList* selectorList = current->selectorList()) {
316 ASSERT(current->pseudoType() == CSSSelector::PseudoHost || curre nt->pseudoType() == CSSSelector::PseudoAny || current->pseudoType() == CSSSelect or::PseudoNot); 321 ASSERT(current->pseudoType() == CSSSelector::PseudoHost || curre nt->pseudoType() == CSSSelector::PseudoAny || current->pseudoType() == CSSSelect or::PseudoNot);
317 for (const CSSSelector* selector = selectorList->first(); select or; selector = CSSSelectorList::next(*selector)) 322 for (const CSSSelector* selector = selectorList->first(); select or; selector = CSSSelectorList::next(*selector))
318 addFeaturesToInvalidationSets(*selector, features); 323 addFeaturesToInvalidationSets(*selector, features);
319 } 324 }
320 } 325 }
321 326
322 if (current->relation() == CSSSelector::SubSelector) 327 if (current->relation() == CSSSelector::SubSelector)
323 continue; 328 continue;
324 329
(...skipping 226 matching lines...) Expand 10 before | Expand all | Expand 10 after
551 visitor->trace(uncommonAttributeRules); 556 visitor->trace(uncommonAttributeRules);
552 visitor->trace(m_classInvalidationSets); 557 visitor->trace(m_classInvalidationSets);
553 visitor->trace(m_attributeInvalidationSets); 558 visitor->trace(m_attributeInvalidationSets);
554 visitor->trace(m_idInvalidationSets); 559 visitor->trace(m_idInvalidationSets);
555 visitor->trace(m_pseudoInvalidationSets); 560 visitor->trace(m_pseudoInvalidationSets);
556 visitor->trace(m_styleInvalidator); 561 visitor->trace(m_styleInvalidator);
557 #endif 562 #endif
558 } 563 }
559 564
560 } // namespace blink 565 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698