Commit a79ef970 authored by rune@opera.com's avatar rune@opera.com

Separate method for adding features to an invalidation set.

Tried to improve readability. Also re-arranged the for-loop a bit.

This CL is part of splitting up [1].

[1] https://codereview.chromium.org/639433002

R=chrishtr@chromium.org

Review URL: https://codereview.chromium.org/652703002

git-svn-id: svn://svn.chromium.org/blink/trunk@183633 bbb929c8-8fbe-4397-9dbb-9b2b20218538
parent 04652652
......@@ -284,26 +284,31 @@ const CSSSelector* RuleFeatureSet::extractInvalidationSetFeatures(const CSSSelec
// against descendants in the same subtree only. features.adjacent is set to false, and
// we start adding features instead of calling setWholeSubtreeInvalid.
void RuleFeatureSet::addFeaturesToInvalidationSet(DescendantInvalidationSet& invalidationSet, const InvalidationSetFeatures& features)
{
if (features.treeBoundaryCrossing)
invalidationSet.setTreeBoundaryCrossing();
if (features.adjacent) {
invalidationSet.setWholeSubtreeInvalid();
return;
}
if (!features.id.isEmpty())
invalidationSet.addId(features.id);
if (!features.tagName.isEmpty())
invalidationSet.addTagName(features.tagName);
for (const auto& className : features.classes)
invalidationSet.addClass(className);
for (const auto& attribute : features.attributes)
invalidationSet.addAttribute(attribute);
if (features.customPseudoElement)
invalidationSet.setCustomPseudoInvalid();
}
void RuleFeatureSet::addFeaturesToInvalidationSets(const CSSSelector& selector, InvalidationSetFeatures& features)
{
for (const CSSSelector* current = &selector; current; current = current->tagHistory()) {
if (DescendantInvalidationSet* invalidationSet = invalidationSetForSelector(*current)) {
if (features.treeBoundaryCrossing)
invalidationSet->setTreeBoundaryCrossing();
if (features.adjacent) {
invalidationSet->setWholeSubtreeInvalid();
} else {
if (!features.id.isEmpty())
invalidationSet->addId(features.id);
if (!features.tagName.isEmpty())
invalidationSet->addTagName(features.tagName);
for (const auto& className : features.classes)
invalidationSet->addClass(className);
for (const auto& attribute : features.attributes)
invalidationSet->addAttribute(attribute);
if (features.customPseudoElement)
invalidationSet->setCustomPseudoInvalid();
}
addFeaturesToInvalidationSet(*invalidationSet, features);
} else {
if (current->pseudoType() == CSSSelector::PseudoHost)
features.treeBoundaryCrossing = true;
......@@ -314,11 +319,13 @@ void RuleFeatureSet::addFeaturesToInvalidationSets(const CSSSelector& selector,
}
}
if (current->relation() == CSSSelector::SubSelector)
continue;
if (current->isShadowSelector())
features.treeBoundaryCrossing = true;
if (current->relation() != CSSSelector::SubSelector)
features.adjacent = current->isAdjacentSelector();
features.adjacent = current->isAdjacentSelector();
}
}
......
......@@ -160,6 +160,8 @@ private:
static void extractInvalidationSetFeature(const CSSSelector&, InvalidationSetFeatures&);
const CSSSelector* extractInvalidationSetFeatures(const CSSSelector&, InvalidationSetFeatures&, bool negated);
void addFeaturesToInvalidationSet(DescendantInvalidationSet&, const InvalidationSetFeatures&);
void addFeaturesToInvalidationSets(const CSSSelector&, InvalidationSetFeatures&);
void addClassToInvalidationSet(const AtomicString& className, Element&);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment