diff options
-rw-r--r-- | components/style/gecko/selector_parser.rs | 28 |
1 files changed, 16 insertions, 12 deletions
diff --git a/components/style/gecko/selector_parser.rs b/components/style/gecko/selector_parser.rs index 9c67c06d60a..64f135c73ae 100644 --- a/components/style/gecko/selector_parser.rs +++ b/components/style/gecko/selector_parser.rs @@ -319,22 +319,26 @@ impl<'a> ::selectors::Parser for SelectorParser<'a> { None => return Err(()), }; - let state = input.try(|input| { - let mut state = ElementState::empty(); + let state = if pseudo.supports_user_action_state() { + input.try(|input| { + let mut state = ElementState::empty(); - while !input.is_exhausted() { - input.expect_colon()?; - let ident = input.expect_ident()?; - let pseudo_class = self.parse_non_ts_pseudo_class(ident)?; + while !input.is_exhausted() { + input.expect_colon()?; + let ident = input.expect_ident()?; + let pseudo_class = self.parse_non_ts_pseudo_class(ident)?; - if !pseudo_class.is_safe_user_action_state() { - return Err(()) + if !pseudo_class.is_safe_user_action_state() { + return Err(()) + } + state.insert(pseudo_class.state_flag()); } - state.insert(pseudo_class.state_flag()); - } - Ok(state) - }); + Ok(state) + }).ok() + } else { + None + }; Ok(PseudoElementSelector { pseudo: pseudo, |