diff --git a/components/style/dom.rs b/components/style/dom.rs index f8157f3c844..2b3ce58c74f 100644 --- a/components/style/dom.rs +++ b/components/style/dom.rs @@ -26,7 +26,6 @@ use selectors::matching::{ElementSelectorFlags, VisitedHandlingMode}; use selectors::sink::Push; use servo_arc::{Arc, ArcBorrow}; use shared_lock::Locked; -use smallvec::VecLike; use std::fmt; #[cfg(feature = "gecko")] use hash::HashMap; use std::fmt::Debug; @@ -648,24 +647,6 @@ pub trait TElement : Eq + PartialEq + Debug + Hash + Sized + Copy + Clone + false } - /// Gets declarations from XBL bindings from the element. - fn get_declarations_from_xbl_bindings( - &self, - pseudo_element: Option<&PseudoElement>, - applicable_declarations: &mut V - ) -> bool - where - V: Push + VecLike - { - self.each_xbl_stylist(|stylist| { - stylist.push_applicable_declarations_as_xbl_only_stylist( - self, - pseudo_element, - applicable_declarations - ); - }) - } - /// Gets the current existing CSS transitions, by |property, end value| pairs in a HashMap. #[cfg(feature = "gecko")] fn get_css_transitions_info(&self) diff --git a/components/style/stylist.rs b/components/style/stylist.rs index 7e89db40957..7bf735955b9 100644 --- a/components/style/stylist.rs +++ b/components/style/stylist.rs @@ -964,12 +964,6 @@ impl Stylist { ) } - fn has_rules_for_pseudo(&self, pseudo: &PseudoElement) -> bool { - self.cascade_data - .iter_origins() - .any(|(d, _)| d.has_rules_for_pseudo(pseudo)) - } - /// Computes the cascade inputs for a lazily-cascaded pseudo-element. /// /// See the documentation on lazy pseudo-elements in @@ -988,10 +982,6 @@ impl Stylist { let pseudo = pseudo.canonical(); debug_assert!(pseudo.is_lazy()); - if !self.has_rules_for_pseudo(&pseudo) { - return CascadeInputs::default() - } - // Apply the selector flags. We should be in sequential mode // already, so we can directly apply the parent flags. let mut set_selector_flags = |element: &E, flags: ElementSelectorFlags| { @@ -1025,10 +1015,12 @@ impl Stylist { let mut inputs = CascadeInputs::default(); let mut declarations = ApplicableDeclarationList::new(); let mut matching_context = - MatchingContext::new(MatchingMode::ForStatelessPseudoElement, - None, - None, - self.quirks_mode); + MatchingContext::new( + MatchingMode::ForStatelessPseudoElement, + None, + None, + self.quirks_mode, + ); self.push_applicable_declarations( element, @@ -1191,39 +1183,6 @@ impl Stylist { self.quirks_mode = quirks_mode; } - /// Returns the applicable CSS declarations for the given element by - /// treating us as an XBL stylesheet-only stylist. - pub fn push_applicable_declarations_as_xbl_only_stylist( - &self, - element: &E, - pseudo_element: Option<&PseudoElement>, - applicable_declarations: &mut V - ) - where - E: TElement, - V: Push + VecLike, - { - let mut matching_context = - MatchingContext::new(MatchingMode::Normal, None, None, self.quirks_mode); - let mut dummy_flag_setter = |_: &E, _: ElementSelectorFlags| {}; - - let rule_hash_target = element.rule_hash_target(); - - // nsXBLPrototypeResources::LoadResources() loads Chrome XBL style - // sheets under eAuthorSheetFeatures level. - if let Some(map) = self.cascade_data.author.borrow_for_pseudo(pseudo_element) { - map.get_all_matching_rules( - element, - &rule_hash_target, - applicable_declarations, - &mut matching_context, - self.quirks_mode, - &mut dummy_flag_setter, - CascadeLevel::XBL, - ); - } - } - /// Returns the applicable CSS declarations for the given element. /// /// This corresponds to `ElementRuleCollector` in WebKit. @@ -1313,11 +1272,21 @@ impl Stylist { } // Step 3b: XBL rules. - let cut_off_inheritance = - element.get_declarations_from_xbl_bindings( - pseudo_element, - applicable_declarations, - ); + let cut_off_inheritance = element.each_xbl_stylist(|stylist| { + // ServoStyleSet::CreateXBLServoStyleSet() loads XBL style sheets + // under eAuthorSheetFeatures level. + if let Some(map) = stylist.cascade_data.author.borrow_for_pseudo(pseudo_element) { + map.get_all_matching_rules( + element, + &rule_hash_target, + applicable_declarations, + context, + self.quirks_mode, + flags_setter, + CascadeLevel::XBL, + ); + } + }); if rule_hash_target.matches_user_and_author_rules() && !only_default_rules { // Gecko skips author normal rules if cutting off inheritance. @@ -2195,10 +2164,6 @@ impl CascadeData { } } - fn has_rules_for_pseudo(&self, pseudo: &PseudoElement) -> bool { - self.pseudos_map.get(pseudo).is_some() - } - /// Clears the cascade data, but not the invalidation data. fn clear_cascade_data(&mut self) { self.element_map.clear();