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

Unified Diff: Source/core/css/RuleFeature.cpp

Issue 772103002: Collect content:attr(...)-features in RuleFeatureSet. (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Added TCs. Created 6 years 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 side-by-side diff with in-line comments
Download patch
Index: Source/core/css/RuleFeature.cpp
diff --git a/Source/core/css/RuleFeature.cpp b/Source/core/css/RuleFeature.cpp
index 6867a79efa45b493905d8b8eb4201b38b3456d54..c7da88e148d484e4371fc2ae4b9973c40229ff84 100644
--- a/Source/core/css/RuleFeature.cpp
+++ b/Source/core/css/RuleFeature.cpp
@@ -32,7 +32,9 @@
#include "core/HTMLNames.h"
#include "core/css/CSSSelector.h"
#include "core/css/CSSSelectorList.h"
+#include "core/css/CSSValueList.h"
#include "core/css/RuleSet.h"
+#include "core/css/StylePropertySet.h"
#include "core/css/StyleRule.h"
#include "core/css/invalidation/DescendantInvalidationSet.h"
#include "core/dom/Element.h"
@@ -286,6 +288,32 @@ void RuleFeatureSet::updateInvalidationSets(const CSSSelector& selector)
}
}
+void RuleFeatureSet::updateInvalidationSetsForContentAttribute(StyleRule* styleRule)
+{
+ const StylePropertySet& propertySet = styleRule->properties();
+
+ int propertyIndex = propertySet.findPropertyIndex(CSSPropertyContent);
+
+ if (propertyIndex == -1)
+ return;
+
+ StylePropertySet::PropertyReference contentProperty = propertySet.propertyAt(propertyIndex);
+ CSSValue* contentValue = contentProperty.value();
+
+ if (!contentValue->isValueList())
+ return;
+
+ for (CSSValueListIterator i = contentValue; i.hasMore(); i.advance()) {
+ CSSValue* item = i.value();
+ if (!item->isPrimitiveValue())
+ continue;
+ CSSPrimitiveValue* primitiveItem = toCSSPrimitiveValue(item);
+ if (!primitiveItem->isAttr())
+ continue;
+ ensureAttributeInvalidationSet(AtomicString(primitiveItem->getStringValue()));
+ }
+}
+
std::pair<const CSSSelector*, RuleFeatureSet::UseFeaturesType>
RuleFeatureSet::extractInvalidationSetFeatures(const CSSSelector& selector, InvalidationSetFeatures& features, bool negated)
{
@@ -392,14 +420,10 @@ void RuleFeatureSet::addFeaturesToInvalidationSets(const CSSSelector& selector,
}
}
-void RuleFeatureSet::addContentAttr(const AtomicString& attributeName)
-{
- ensureAttributeInvalidationSet(attributeName);
-}
-
void RuleFeatureSet::collectFeaturesFromRuleData(const RuleData& ruleData)
{
updateInvalidationSets(ruleData.selector());
+ updateInvalidationSetsForContentAttribute(ruleData.rule());
rune 2014/12/10 13:03:55 There's one RuleData per selector in the selector
FeatureMetadata metadata;
collectFeaturesFromSelector(ruleData.selector(), metadata);

Powered by Google App Engine
This is Rietveld 408576698