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

Unified Diff: Source/core/inspector/InspectorCSSAgent.cpp

Issue 697773004: DevTools: [CSS] report matched selectors for pseudoId matches (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Created 6 years, 1 month 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/inspector/InspectorCSSAgent.cpp
diff --git a/Source/core/inspector/InspectorCSSAgent.cpp b/Source/core/inspector/InspectorCSSAgent.cpp
index 08a9f1bf77b733a359b595b0237f8fa51b43e9f7..d23cb3dc9d11a0a0b031837be86c96b80c808972 100644
--- a/Source/core/inspector/InspectorCSSAgent.cpp
+++ b/Source/core/inspector/InspectorCSSAgent.cpp
@@ -683,7 +683,7 @@ void InspectorCSSAgent::getMatchedStylesForNode(ErrorString* errorString, int no
StyleResolver& styleResolver = ownerDocument->ensureStyleResolver();
RefPtrWillBeRawPtr<CSSRuleList> matchedRules = styleResolver.pseudoCSSRulesForElement(element, elementPseudoId, StyleResolver::AllCSSRules);
- matchedCSSRules = buildArrayForMatchedRuleList(matchedRules.get(), originalElement);
+ matchedCSSRules = buildArrayForMatchedRuleList(matchedRules.get(), originalElement, NOPSEUDO);
// Pseudo elements.
if (!elementPseudoId && !asBool(excludePseudo)) {
@@ -693,7 +693,7 @@ void InspectorCSSAgent::getMatchedStylesForNode(ErrorString* errorString, int no
if (matchedRules && matchedRules->length()) {
RefPtr<TypeBuilder::CSS::PseudoIdMatches> matches = TypeBuilder::CSS::PseudoIdMatches::create()
.setPseudoId(static_cast<int>(pseudoId))
- .setMatches(buildArrayForMatchedRuleList(matchedRules.get(), element));
+ .setMatches(buildArrayForMatchedRuleList(matchedRules.get(), element, pseudoId));
pseudoElements->addItem(matches.release());
}
}
@@ -709,7 +709,7 @@ void InspectorCSSAgent::getMatchedStylesForNode(ErrorString* errorString, int no
StyleResolver& parentStyleResolver = parentElement->ownerDocument()->ensureStyleResolver();
RefPtrWillBeRawPtr<CSSRuleList> parentMatchedRules = parentStyleResolver.cssRulesForElement(parentElement, StyleResolver::AllCSSRules);
RefPtr<TypeBuilder::CSS::InheritedStyleEntry> entry = TypeBuilder::CSS::InheritedStyleEntry::create()
- .setMatchedCSSRules(buildArrayForMatchedRuleList(parentMatchedRules.get(), parentElement));
+ .setMatchedCSSRules(buildArrayForMatchedRuleList(parentMatchedRules.get(), parentElement, NOPSEUDO));
if (parentElement->style() && parentElement->style()->length()) {
InspectorStyleSheetForInlineStyle* styleSheet = asInspectorStyleSheet(parentElement);
if (styleSheet)
@@ -1346,7 +1346,7 @@ static inline bool matchesPseudoElement(const CSSSelector* selector, PseudoId el
return selectorPseudoId == elementPseudoId;
}
-PassRefPtr<TypeBuilder::Array<TypeBuilder::CSS::RuleMatch> > InspectorCSSAgent::buildArrayForMatchedRuleList(CSSRuleList* ruleList, Element* element)
+PassRefPtr<TypeBuilder::Array<TypeBuilder::CSS::RuleMatch> > InspectorCSSAgent::buildArrayForMatchedRuleList(CSSRuleList* ruleList, Element* element, PseudoId matchesForPseudoId)
{
RefPtr<TypeBuilder::Array<TypeBuilder::CSS::RuleMatch> > result = TypeBuilder::Array<TypeBuilder::CSS::RuleMatch>::create();
if (!ruleList)
@@ -1360,13 +1360,14 @@ PassRefPtr<TypeBuilder::Array<TypeBuilder::CSS::RuleMatch> > InspectorCSSAgent::
RefPtr<TypeBuilder::Array<int> > matchingSelectors = TypeBuilder::Array<int>::create();
const CSSSelectorList& selectorList = rule->styleRule()->selectorList();
long index = 0;
- PseudoId elementPseudoId = element->pseudoId();
+ PseudoId elementPseudoId = matchesForPseudoId != NOPSEUDO ? matchesForPseudoId : element->pseudoId();
for (const CSSSelector* selector = selectorList.first(); selector; selector = CSSSelectorList::next(*selector)) {
const CSSSelector* firstTagHistorySelector = selector;
bool matched = false;
if (elementPseudoId)
vsevik 2014/11/05 07:09:26 Why do we do elementPseudoId != NOPSEUDO above? L
lushnikov 2014/11/05 07:41:13 Done.
matched = matchesPseudoElement(selector, elementPseudoId); // Modifies |selector|.
- matched |= element->matches(firstTagHistorySelector->selectorText(), IGNORE_EXCEPTION);
+ else
+ matched |= element->matches(firstTagHistorySelector->selectorText(), IGNORE_EXCEPTION);
vsevik 2014/11/05 07:09:26 |= -> =
lushnikov 2014/11/05 07:41:13 Done.
if (matched)
matchingSelectors->addItem(index);
++index;

Powered by Google App Engine
This is Rietveld 408576698