style: Skip matching :nth-child if element is the root of anonymous subtree

This implement the logic in Gecko's nsNthIndexCache::GetNthIndex().

MozReview-Commit-ID: 8lzK9iIbfzo
This commit is contained in:
Ting-Yu Lin 2017-08-15 20:35:08 +08:00
parent dc654c9912
commit 0e82ca1d3a
3 changed files with 21 additions and 2 deletions

View file

@ -776,6 +776,10 @@ fn matches_generic_nth_child<E, F>(element: &E,
where E: Element,
F: FnMut(&E, ElementSelectorFlags),
{
if element.ignores_nth_child_selectors() {
return false;
}
flags_setter(element, if is_from_end {
HAS_SLOW_SELECTOR
} else {

View file

@ -86,6 +86,12 @@ pub trait Element: Sized + Debug {
/// if the parent node is a `DocumentFragment`.
fn is_root(&self) -> bool;
/// Returns whether this element should ignore matching nth child
/// selector.
fn ignores_nth_child_selectors(&self) -> bool {
false
}
/// Return true if we want to stop lookup ancestor of the current
/// element while matching complex selectors with descendant/child
/// combinator.