aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--components/style/gecko/selector_parser.rs28
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,