From 7582afebeca965f8d12a6594284969ee55f6742f Mon Sep 17 00:00:00 2001 From: Martin Robinson Date: Sat, 24 Aug 2024 01:43:54 -0700 Subject: [PATCH] script: Update list of non-TS pseudo classes supported by Servo (#33165) Also remove some code duplication by moving some of the code into the `Element` impl. Signed-off-by: Martin Robinson --- Cargo.lock | 28 ++++++++-------- components/script/dom/element.rs | 32 +++++++++++++------ components/script/layout_dom/element.rs | 30 +++++++++++------ .../selectors/focus-visible-017-2.html.ini | 3 -- .../css/selectors/focus-visible-017.html.ini | 4 --- .../css/selectors/focus-visible-023.html.ini | 3 -- .../focus-visible-script-focus-001.html.ini | 3 -- .../css/selectors/focus-within-009.html.ini | 9 ------ .../parsing/parse-focus-visible.html.ini | 10 ------ .../pseudo-classes/autofill.html.ini | 4 --- 10 files changed, 58 insertions(+), 68 deletions(-) delete mode 100644 tests/wpt/meta/css/selectors/parsing/parse-focus-visible.html.ini diff --git a/Cargo.lock b/Cargo.lock index fb5a204dfde..53ccb12a0cd 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1294,7 +1294,7 @@ dependencies = [ [[package]] name = "derive_common" version = "0.0.1" -source = "git+https://github.com/servo/stylo?branch=2024-07-16#c3a84ea8c97b0af542fbb47eee8f6f182b357128" +source = "git+https://github.com/servo/stylo?branch=2024-07-16#3359447b53f0d0bc4affe135313ca8d0e48cb876" dependencies = [ "darling", "proc-macro2", @@ -1483,7 +1483,7 @@ dependencies = [ [[package]] name = "dom" version = "0.0.1" -source = "git+https://github.com/servo/stylo?branch=2024-07-16#c3a84ea8c97b0af542fbb47eee8f6f182b357128" +source = "git+https://github.com/servo/stylo?branch=2024-07-16#3359447b53f0d0bc4affe135313ca8d0e48cb876" dependencies = [ "bitflags 2.6.0", ] @@ -4090,7 +4090,7 @@ dependencies = [ [[package]] name = "malloc_size_of" version = "0.0.1" -source = "git+https://github.com/servo/stylo?branch=2024-07-16#c3a84ea8c97b0af542fbb47eee8f6f182b357128" +source = "git+https://github.com/servo/stylo?branch=2024-07-16#3359447b53f0d0bc4affe135313ca8d0e48cb876" dependencies = [ "accountable-refcell", "app_units", @@ -5778,7 +5778,7 @@ checksum = "0495e4577c672de8254beb68d01a9b62d0e8a13c099edecdbedccce3223cd29f" [[package]] name = "selectors" version = "0.24.0" -source = "git+https://github.com/servo/stylo?branch=2024-07-16#c3a84ea8c97b0af542fbb47eee8f6f182b357128" +source = "git+https://github.com/servo/stylo?branch=2024-07-16#3359447b53f0d0bc4affe135313ca8d0e48cb876" dependencies = [ "bitflags 2.6.0", "cssparser", @@ -6092,7 +6092,7 @@ dependencies = [ [[package]] name = "servo_arc" version = "0.2.0" -source = "git+https://github.com/servo/stylo?branch=2024-07-16#c3a84ea8c97b0af542fbb47eee8f6f182b357128" +source = "git+https://github.com/servo/stylo?branch=2024-07-16#3359447b53f0d0bc4affe135313ca8d0e48cb876" dependencies = [ "serde", "stable_deref_trait", @@ -6101,7 +6101,7 @@ dependencies = [ [[package]] name = "servo_atoms" version = "0.0.1" -source = "git+https://github.com/servo/stylo?branch=2024-07-16#c3a84ea8c97b0af542fbb47eee8f6f182b357128" +source = "git+https://github.com/servo/stylo?branch=2024-07-16#3359447b53f0d0bc4affe135313ca8d0e48cb876" dependencies = [ "string_cache", "string_cache_codegen", @@ -6303,7 +6303,7 @@ checksum = "38b58827f4464d87d377d175e90bf58eb00fd8716ff0a62f80356b5e61555d0d" [[package]] name = "size_of_test" version = "0.0.1" -source = "git+https://github.com/servo/stylo?branch=2024-07-16#c3a84ea8c97b0af542fbb47eee8f6f182b357128" +source = "git+https://github.com/servo/stylo?branch=2024-07-16#3359447b53f0d0bc4affe135313ca8d0e48cb876" dependencies = [ "static_assertions", ] @@ -6444,7 +6444,7 @@ checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" [[package]] name = "static_prefs" version = "0.1.0" -source = "git+https://github.com/servo/stylo?branch=2024-07-16#c3a84ea8c97b0af542fbb47eee8f6f182b357128" +source = "git+https://github.com/servo/stylo?branch=2024-07-16#3359447b53f0d0bc4affe135313ca8d0e48cb876" [[package]] name = "strck" @@ -6497,7 +6497,7 @@ dependencies = [ [[package]] name = "style" version = "0.0.1" -source = "git+https://github.com/servo/stylo?branch=2024-07-16#c3a84ea8c97b0af542fbb47eee8f6f182b357128" +source = "git+https://github.com/servo/stylo?branch=2024-07-16#3359447b53f0d0bc4affe135313ca8d0e48cb876" dependencies = [ "app_units", "arrayvec", @@ -6556,7 +6556,7 @@ dependencies = [ [[package]] name = "style_config" version = "0.0.1" -source = "git+https://github.com/servo/stylo?branch=2024-07-16#c3a84ea8c97b0af542fbb47eee8f6f182b357128" +source = "git+https://github.com/servo/stylo?branch=2024-07-16#3359447b53f0d0bc4affe135313ca8d0e48cb876" dependencies = [ "lazy_static", ] @@ -6564,7 +6564,7 @@ dependencies = [ [[package]] name = "style_derive" version = "0.0.1" -source = "git+https://github.com/servo/stylo?branch=2024-07-16#c3a84ea8c97b0af542fbb47eee8f6f182b357128" +source = "git+https://github.com/servo/stylo?branch=2024-07-16#3359447b53f0d0bc4affe135313ca8d0e48cb876" dependencies = [ "darling", "derive_common", @@ -6595,7 +6595,7 @@ dependencies = [ [[package]] name = "style_traits" version = "0.0.1" -source = "git+https://github.com/servo/stylo?branch=2024-07-16#c3a84ea8c97b0af542fbb47eee8f6f182b357128" +source = "git+https://github.com/servo/stylo?branch=2024-07-16#3359447b53f0d0bc4affe135313ca8d0e48cb876" dependencies = [ "app_units", "bitflags 2.6.0", @@ -6944,7 +6944,7 @@ dependencies = [ [[package]] name = "to_shmem" version = "0.0.1" -source = "git+https://github.com/servo/stylo?branch=2024-07-16#c3a84ea8c97b0af542fbb47eee8f6f182b357128" +source = "git+https://github.com/servo/stylo?branch=2024-07-16#3359447b53f0d0bc4affe135313ca8d0e48cb876" dependencies = [ "cssparser", "servo_arc", @@ -6957,7 +6957,7 @@ dependencies = [ [[package]] name = "to_shmem_derive" version = "0.0.1" -source = "git+https://github.com/servo/stylo?branch=2024-07-16#c3a84ea8c97b0af542fbb47eee8f6f182b357128" +source = "git+https://github.com/servo/stylo?branch=2024-07-16#3359447b53f0d0bc4affe135313ca8d0e48cb876" dependencies = [ "darling", "derive_common", diff --git a/components/script/dom/element.rs b/components/script/dom/element.rs index c3c1d4edf08..32a4b5c16ac 100644 --- a/components/script/dom/element.rs +++ b/components/script/dom/element.rs @@ -3695,22 +3695,36 @@ impl SelectorsElement for DomRoot { // storing separate or s for each language tag. NonTSPseudoClass::Lang(ref lang) => extended_filtering(&self.get_lang(), lang), - NonTSPseudoClass::ReadOnly => !Element::state(self).contains(pseudo_class.state_flag()), + NonTSPseudoClass::ReadOnly => { + !Element::state(self).contains(NonTSPseudoClass::ReadWrite.state_flag()) + }, NonTSPseudoClass::Active | + NonTSPseudoClass::Autofill | + NonTSPseudoClass::Checked | + NonTSPseudoClass::Default | + NonTSPseudoClass::Defined | + NonTSPseudoClass::Disabled | + NonTSPseudoClass::Enabled | NonTSPseudoClass::Focus | + NonTSPseudoClass::FocusVisible | + NonTSPseudoClass::FocusWithin | NonTSPseudoClass::Fullscreen | NonTSPseudoClass::Hover | - NonTSPseudoClass::Defined | - NonTSPseudoClass::Enabled | - NonTSPseudoClass::Disabled | - NonTSPseudoClass::Checked | - NonTSPseudoClass::Valid | - NonTSPseudoClass::Invalid | + NonTSPseudoClass::InRange | NonTSPseudoClass::Indeterminate | - NonTSPseudoClass::ReadWrite | + NonTSPseudoClass::Invalid | + NonTSPseudoClass::Modal | + NonTSPseudoClass::Optional | + NonTSPseudoClass::OutOfRange | NonTSPseudoClass::PlaceholderShown | - NonTSPseudoClass::Target => Element::state(self).contains(pseudo_class.state_flag()), + NonTSPseudoClass::PopoverOpen | + NonTSPseudoClass::ReadWrite | + NonTSPseudoClass::Required | + NonTSPseudoClass::Target | + NonTSPseudoClass::UserInvalid | + NonTSPseudoClass::UserValid | + NonTSPseudoClass::Valid => Element::state(self).contains(pseudo_class.state_flag()), } } diff --git a/components/script/layout_dom/element.rs b/components/script/layout_dom/element.rs index 6af5e72bb1f..e5cf8d068c4 100644 --- a/components/script/layout_dom/element.rs +++ b/components/script/layout_dom/element.rs @@ -567,22 +567,34 @@ impl<'dom> ::selectors::Element for ServoLayoutElement<'dom> { NonTSPseudoClass::ReadOnly => !self .element .get_state_for_layout() - .contains(pseudo_class.state_flag()), + .contains(NonTSPseudoClass::ReadWrite.state_flag()), NonTSPseudoClass::Active | + NonTSPseudoClass::Autofill | + NonTSPseudoClass::Checked | + NonTSPseudoClass::Default | + NonTSPseudoClass::Defined | + NonTSPseudoClass::Disabled | + NonTSPseudoClass::Enabled | NonTSPseudoClass::Focus | + NonTSPseudoClass::FocusVisible | + NonTSPseudoClass::FocusWithin | NonTSPseudoClass::Fullscreen | NonTSPseudoClass::Hover | - NonTSPseudoClass::Defined | - NonTSPseudoClass::Enabled | - NonTSPseudoClass::Disabled | - NonTSPseudoClass::Checked | - NonTSPseudoClass::Valid | - NonTSPseudoClass::Invalid | + NonTSPseudoClass::InRange | NonTSPseudoClass::Indeterminate | - NonTSPseudoClass::ReadWrite | + NonTSPseudoClass::Invalid | + NonTSPseudoClass::Modal | + NonTSPseudoClass::Optional | + NonTSPseudoClass::OutOfRange | NonTSPseudoClass::PlaceholderShown | - NonTSPseudoClass::Target => self + NonTSPseudoClass::PopoverOpen | + NonTSPseudoClass::ReadWrite | + NonTSPseudoClass::Required | + NonTSPseudoClass::Target | + NonTSPseudoClass::UserInvalid | + NonTSPseudoClass::UserValid | + NonTSPseudoClass::Valid => self .element .get_state_for_layout() .contains(pseudo_class.state_flag()), diff --git a/tests/wpt/meta/css/selectors/focus-visible-017-2.html.ini b/tests/wpt/meta/css/selectors/focus-visible-017-2.html.ini index db1e8bf79d0..47a93b50f94 100644 --- a/tests/wpt/meta/css/selectors/focus-visible-017-2.html.ini +++ b/tests/wpt/meta/css/selectors/focus-visible-017-2.html.ini @@ -1,7 +1,4 @@ [focus-visible-017-2.html] - [":focus-visible" should be a valid selector] - expected: FAIL - [By default initial programatic focus matches ':focus-visible', so the element ABBR shows a focus ring with 'outline-style: auto'] expected: FAIL diff --git a/tests/wpt/meta/css/selectors/focus-visible-017.html.ini b/tests/wpt/meta/css/selectors/focus-visible-017.html.ini index a8d81f5a661..871c186ee35 100644 --- a/tests/wpt/meta/css/selectors/focus-visible-017.html.ini +++ b/tests/wpt/meta/css/selectors/focus-visible-017.html.ini @@ -1,7 +1,3 @@ [focus-visible-017.html] [By default initial programatic focus matches ':focus-visible', so the element shows a focus ring with 'outline-style: auto'] expected: FAIL - - [":focus-visible" should be a valid selector] - expected: FAIL - diff --git a/tests/wpt/meta/css/selectors/focus-visible-023.html.ini b/tests/wpt/meta/css/selectors/focus-visible-023.html.ini index a6926807555..628de6d531c 100644 --- a/tests/wpt/meta/css/selectors/focus-visible-023.html.ini +++ b/tests/wpt/meta/css/selectors/focus-visible-023.html.ini @@ -1,6 +1,3 @@ [focus-visible-023.html] - [":focus-visible" should be a valid selector] - expected: FAIL - [:focus-visible stop matching after blur] expected: FAIL diff --git a/tests/wpt/meta/css/selectors/focus-visible-script-focus-001.html.ini b/tests/wpt/meta/css/selectors/focus-visible-script-focus-001.html.ini index e997b9b4c86..71da94a6729 100644 --- a/tests/wpt/meta/css/selectors/focus-visible-script-focus-001.html.ini +++ b/tests/wpt/meta/css/selectors/focus-visible-script-focus-001.html.ini @@ -1,6 +1,3 @@ [focus-visible-script-focus-001.html] - [":focus-visible" should be a valid selector] - expected: FAIL - [Script focus without any previous user interaction matches :focus-visible] expected: FAIL diff --git a/tests/wpt/meta/css/selectors/focus-within-009.html.ini b/tests/wpt/meta/css/selectors/focus-within-009.html.ini index d6fbef029ae..37d644129e6 100644 --- a/tests/wpt/meta/css/selectors/focus-within-009.html.ini +++ b/tests/wpt/meta/css/selectors/focus-within-009.html.ini @@ -1,7 +1,4 @@ [focus-within-009.html] - [Initial State] - expected: FAIL - [Focus 'target1'] expected: FAIL @@ -17,9 +14,6 @@ [Focus 'target1' once again] expected: FAIL - [Detach 'container1' from the document] - expected: FAIL - [Try to focus 'target1'] expected: FAIL @@ -31,6 +25,3 @@ [Focus 'target1' for the last time] expected: FAIL - - [Move 'target1' in 'container2'] - expected: FAIL diff --git a/tests/wpt/meta/css/selectors/parsing/parse-focus-visible.html.ini b/tests/wpt/meta/css/selectors/parsing/parse-focus-visible.html.ini deleted file mode 100644 index c351eba9aab..00000000000 --- a/tests/wpt/meta/css/selectors/parsing/parse-focus-visible.html.ini +++ /dev/null @@ -1,10 +0,0 @@ -[parse-focus-visible.html] - [":focus-visible" should be a valid selector] - expected: FAIL - - ["a:focus-visible" should be a valid selector] - expected: FAIL - - [":focus:not(:focus-visible)" should be a valid selector] - expected: FAIL - diff --git a/tests/wpt/meta/html/semantics/selectors/pseudo-classes/autofill.html.ini b/tests/wpt/meta/html/semantics/selectors/pseudo-classes/autofill.html.ini index 85f8e43548f..fa9f57ee7b6 100644 --- a/tests/wpt/meta/html/semantics/selectors/pseudo-classes/autofill.html.ini +++ b/tests/wpt/meta/html/semantics/selectors/pseudo-classes/autofill.html.ini @@ -1,7 +1,3 @@ [autofill.html] - [":autofill" should be a valid selector] - expected: FAIL - [":-webkit-autofill" should be a valid selector] expected: FAIL -