diff --git a/layout/style/nsCSSRuleProcessor.cpp b/layout/style/nsCSSRuleProcessor.cpp index c8f888e7a1..3644e3e45b 100644 --- a/layout/style/nsCSSRuleProcessor.cpp +++ b/layout/style/nsCSSRuleProcessor.cpp @@ -1960,15 +1960,15 @@ static bool SelectorMatches(Element* aElement, // selector. // We match automatically if GetParent() and GetShadowRoot() have - // the same result. Without special casing this ahead of all other - // selector matching, it fails. Have not determined the cause. - - if (aElement->GetParent() == aElement->GetShadowRoot()) { + // the same result iff our selector list is empty. Without special + // casing this ahead of all other selector matching, it fails. + // Have not determined the cause. + if (!pseudoClass->u.mSelectorList && + aElement->GetParent() == aElement->GetShadowRoot()) { break; } // Match if any selector in the argument list matches. - NodeMatchContext nodeContext(EventStates(), nsCSSRuleProcessor::IsLink(aElement)); if (SelectorListMatches(aElement,