From 5ddf455235be2a31d10ef388572a35d2433361ae Mon Sep 17 00:00:00 2001 From: Boris Zbarsky Date: Mon, 15 May 2017 15:55:05 -0400 Subject: [PATCH 1/2] Fix style sharing cache lookups to compare ids of the two elements. Otherwise we can have a situation like this: and the style sharing cache lookup for the second would try to revalidate against the cached value for the first , but end up failing asserts about the two elements matching lists of revalidation selectors that have the same length. --- components/style/matching.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/components/style/matching.rs b/components/style/matching.rs index 530b3c1f591..4e336c25002 100644 --- a/components/style/matching.rs +++ b/components/style/matching.rs @@ -176,7 +176,7 @@ fn element_matches_candidate(element: &E, miss!(State) } - if element.get_id().is_some() { + if element.get_id() != candidate_element.get_id() { miss!(IdAttr) } From c5cd84392f980aef248e944af41df7d933e1dbd7 Mon Sep 17 00:00:00 2001 From: Boris Zbarsky Date: Mon, 15 May 2017 15:58:20 -0400 Subject: [PATCH 2/2] Implement :-moz-native-anonymous support in stylo. Fixes https://bugzilla.mozilla.org/show_bug.cgi?id=1364591 --- components/style/gecko/non_ts_pseudo_class_list.rs | 4 +--- components/style/gecko/wrapper.rs | 3 ++- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/components/style/gecko/non_ts_pseudo_class_list.rs b/components/style/gecko/non_ts_pseudo_class_list.rs index 145126656c2..5b1b056ba91 100644 --- a/components/style/gecko/non_ts_pseudo_class_list.rs +++ b/components/style/gecko/non_ts_pseudo_class_list.rs @@ -26,8 +26,6 @@ * Pending pseudo-classes: * * :-moz-is-html -> Used only in UA sheets, should be easy to support. - * :-moz-native-anonymous -> For devtools, seems easy-ish? - * :-moz-bound-element -> Seems unused, should be easy to remove. * * :-moz-lwtheme, :-moz-lwtheme-brighttext, :-moz-lwtheme-darktext, * :-moz-window-inactive. @@ -109,7 +107,7 @@ macro_rules! apply_non_ts_list { ("-moz-first-node", MozFirstNode, firstNode, _, _), ("-moz-last-node", MozLastNode, lastNode, _, _), ("-moz-only-whitespace", MozOnlyWhitespace, mozOnlyWhitespace, _, _), - + ("-moz-native-anonymous", MozNativeAnonymous, mozNativeAnonymous, _, PSEUDO_CLASS_INTERNAL), ], string: [ ("-moz-system-metric", MozSystemMetric, mozSystemMetric, _, PSEUDO_CLASS_INTERNAL), diff --git a/components/style/gecko/wrapper.rs b/components/style/gecko/wrapper.rs index 8643de9b87a..6558fbc38a1 100644 --- a/components/style/gecko/wrapper.rs +++ b/components/style/gecko/wrapper.rs @@ -1218,7 +1218,8 @@ impl<'le> ::selectors::Element for GeckoElement<'le> { true } NonTSPseudoClass::MozTableBorderNonzero | - NonTSPseudoClass::MozBrowserFrame => unsafe { + NonTSPseudoClass::MozBrowserFrame | + NonTSPseudoClass::MozNativeAnonymous => unsafe { Gecko_MatchesElement(pseudo_class.to_gecko_pseudoclasstype().unwrap(), self.0) }, NonTSPseudoClass::MozAny(ref sels) => {