diff --git a/components/style/gecko/selector_parser.rs b/components/style/gecko/selector_parser.rs index 9637b883f3c..53fec86f50e 100644 --- a/components/style/gecko/selector_parser.rs +++ b/components/style/gecko/selector_parser.rs @@ -7,11 +7,13 @@ use cssparser::ToCss; use element_state::ElementState; use gecko_bindings::structs::CSSPseudoClassType; +use gecko_bindings::structs::nsIAtom; use selector_parser::{SelectorParser, PseudoElementCascadeType}; use selector_parser::{attr_equals_selector_is_shareable, attr_exists_selector_is_shareable}; use selectors::parser::AttrSelector; use std::borrow::Cow; use std::fmt; +use std::ptr; use string_cache::{Atom, Namespace, WeakAtom, WeakNamespace}; /// A representation of a CSS pseudo-element. @@ -111,6 +113,12 @@ impl PseudoElement { None } + + /// Returns null or nsIAtom pointer corresponding to a given PseudoElement. + #[inline] + pub fn ns_atom_or_null_from_opt(pseudo: Option<&PseudoElement>) -> *mut nsIAtom { + pseudo.map(|p| p.as_atom().as_ptr()).unwrap_or(ptr::null_mut()) + } } impl ToCss for PseudoElement { diff --git a/components/style/gecko/wrapper.rs b/components/style/gecko/wrapper.rs index 09c1d1accd4..6744d742ab4 100644 --- a/components/style/gecko/wrapper.rs +++ b/components/style/gecko/wrapper.rs @@ -416,7 +416,7 @@ impl<'le> TElement for GeckoElement<'le> { } fn get_animation_rules(&self, pseudo: Option<&PseudoElement>) -> AnimationRules { - let atom_ptr = pseudo.map(|p| p.as_atom().as_ptr()).unwrap_or(ptr::null_mut()); + let atom_ptr = PseudoElement::ns_atom_or_null_from_opt(pseudo); unsafe { AnimationRules( Gecko_GetAnimationRule(self.0, atom_ptr, CascadeLevel::Animations).into_arc_opt(), @@ -454,9 +454,8 @@ impl<'le> TElement for GeckoElement<'le> { _existing_values: &'a Arc, pseudo: Option<&PseudoElement>) -> Option<&'a nsStyleContext> { + let atom_ptr = PseudoElement::ns_atom_or_null_from_opt(pseudo); unsafe { - let atom_ptr = pseudo.map(|p| p.as_atom().as_ptr()) - .unwrap_or(ptr::null_mut()); let context_ptr = Gecko_GetStyleContext(self.as_node().0, atom_ptr); context_ptr.as_ref() }