From b68e4c2352045ac3303d60e03231d8e420ab2b13 Mon Sep 17 00:00:00 2001 From: Olli Pettay Date: Thu, 28 Jun 2018 14:55:45 +0300 Subject: [PATCH] style: Implement :defined pseudo-class for custom elements. Bug: 1331334 Reviewed-by: emilio --- components/style/element_state.rs | 3 ++- components/style/gecko/non_ts_pseudo_class_list.rs | 1 + components/style/gecko/selector_parser.rs | 3 +++ components/style/gecko/wrapper.rs | 1 + 4 files changed, 7 insertions(+), 1 deletion(-) diff --git a/components/style/element_state.rs b/components/style/element_state.rs index 0960ca3d4e11..c57cf4febe6a 100644 --- a/components/style/element_state.rs +++ b/components/style/element_state.rs @@ -71,7 +71,8 @@ bitflags! { const IN_OPTIONAL_STATE = 1 << 22; /// const IN_READ_WRITE_STATE = 1 << 22; - /// There is a free bit at 23. + /// + const IN_DEFINED_STATE = 1 << 23; /// const IN_VISITED_STATE = 1 << 24; /// diff --git a/components/style/gecko/non_ts_pseudo_class_list.rs b/components/style/gecko/non_ts_pseudo_class_list.rs index b02e21fbf8a8..56e62b6de4bc 100644 --- a/components/style/gecko/non_ts_pseudo_class_list.rs +++ b/components/style/gecko/non_ts_pseudo_class_list.rs @@ -47,6 +47,7 @@ macro_rules! apply_non_ts_list { ("visited", Visited, visited, IN_VISITED_STATE, _), ("active", Active, active, IN_ACTIVE_STATE, _), ("checked", Checked, checked, IN_CHECKED_STATE, _), + ("defined", Defined, defined, IN_DEFINED_STATE, _), ("disabled", Disabled, disabled, IN_DISABLED_STATE, _), ("enabled", Enabled, enabled, IN_ENABLED_STATE, _), ("focus", Focus, focus, IN_FOCUS_STATE, _), diff --git a/components/style/gecko/selector_parser.rs b/components/style/gecko/selector_parser.rs index 57a98a89238b..7dfc9aa1bbc0 100644 --- a/components/style/gecko/selector_parser.rs +++ b/components/style/gecko/selector_parser.rs @@ -187,6 +187,9 @@ impl NonTSPseudoClass { NonTSPseudoClass::Fullscreen => unsafe { mozilla::StaticPrefs_sVarCache_full_screen_api_unprefix_enabled }, + NonTSPseudoClass::Defined => unsafe { + structs::nsContentUtils_sIsCustomElementsEnabled + }, // Otherwise, a pseudo-class is enabled in content when it // doesn't have any enabled flag. _ => !self.has_any_flag( diff --git a/components/style/gecko/wrapper.rs b/components/style/gecko/wrapper.rs index ffac86e974f7..47205f7378bb 100644 --- a/components/style/gecko/wrapper.rs +++ b/components/style/gecko/wrapper.rs @@ -2124,6 +2124,7 @@ impl<'le> ::selectors::Element for GeckoElement<'le> { { use selectors::matching::*; match *pseudo_class { + NonTSPseudoClass::Defined | NonTSPseudoClass::Focus | NonTSPseudoClass::Enabled | NonTSPseudoClass::Disabled |