From eb7cda1172cbbf6e3cfe26f02efff09437a150b8 Mon Sep 17 00:00:00 2001 From: Sam Atkins Date: Tue, 1 Aug 2023 15:00:03 +0100 Subject: [PATCH] LibWeb: Implement the `:volume-locked` pseudo-class --- Userland/Libraries/LibWeb/CSS/Parser/Parser.cpp | 2 ++ Userland/Libraries/LibWeb/CSS/Selector.cpp | 1 + Userland/Libraries/LibWeb/CSS/Selector.h | 3 +++ Userland/Libraries/LibWeb/CSS/SelectorEngine.cpp | 5 +++++ Userland/Libraries/LibWeb/Dump.cpp | 3 +++ 5 files changed, 14 insertions(+) diff --git a/Userland/Libraries/LibWeb/CSS/Parser/Parser.cpp b/Userland/Libraries/LibWeb/CSS/Parser/Parser.cpp index ab4b81e8ad..b1733dc591 100644 --- a/Userland/Libraries/LibWeb/CSS/Parser/Parser.cpp +++ b/Userland/Libraries/LibWeb/CSS/Parser/Parser.cpp @@ -511,6 +511,8 @@ Parser::ParseErrorOr Parser::parse_pseudo_simple_selec return make_pseudo_class_selector(Selector::SimpleSelector::PseudoClass::Type::Host); if (pseudo_name.equals_ignoring_ascii_case("visited"sv)) return make_pseudo_class_selector(Selector::SimpleSelector::PseudoClass::Type::Visited); + if (pseudo_name.equals_ignoring_ascii_case("volume-locked"sv)) + return make_pseudo_class_selector(Selector::SimpleSelector::PseudoClass::Type::VolumeLocked); if (pseudo_name.equals_ignoring_ascii_case("scope"sv)) return make_pseudo_class_selector(Selector::SimpleSelector::PseudoClass::Type::Scope); diff --git a/Userland/Libraries/LibWeb/CSS/Selector.cpp b/Userland/Libraries/LibWeb/CSS/Selector.cpp index d7d83e9bd7..c581122db9 100644 --- a/Userland/Libraries/LibWeb/CSS/Selector.cpp +++ b/Userland/Libraries/LibWeb/CSS/Selector.cpp @@ -235,6 +235,7 @@ ErrorOr Selector::SimpleSelector::serialize() const case Selector::SimpleSelector::PseudoClass::Type::Paused: case Selector::SimpleSelector::PseudoClass::Type::Seeking: case Selector::SimpleSelector::PseudoClass::Type::Muted: + case Selector::SimpleSelector::PseudoClass::Type::VolumeLocked: // If the pseudo-class does not accept arguments append ":" (U+003A), followed by the name of the pseudo-class, to s. TRY(s.try_append(':')); TRY(s.try_append(pseudo_class_name(pseudo_class.type))); diff --git a/Userland/Libraries/LibWeb/CSS/Selector.h b/Userland/Libraries/LibWeb/CSS/Selector.h index d6b314edae..1e044e11cf 100644 --- a/Userland/Libraries/LibWeb/CSS/Selector.h +++ b/Userland/Libraries/LibWeb/CSS/Selector.h @@ -119,6 +119,7 @@ public: Paused, Seeking, Muted, + VolumeLocked, }; Type type; @@ -316,6 +317,8 @@ constexpr StringView pseudo_class_name(Selector::SimpleSelector::PseudoClass::Ty return "seeking"sv; case Selector::SimpleSelector::PseudoClass::Type::Muted: return "muted"sv; + case Selector::SimpleSelector::PseudoClass::Type::VolumeLocked: + return "volume-locked"sv; } VERIFY_NOT_REACHED(); } diff --git a/Userland/Libraries/LibWeb/CSS/SelectorEngine.cpp b/Userland/Libraries/LibWeb/CSS/SelectorEngine.cpp index fc3e35a8c7..a8f4540a2f 100644 --- a/Userland/Libraries/LibWeb/CSS/SelectorEngine.cpp +++ b/Userland/Libraries/LibWeb/CSS/SelectorEngine.cpp @@ -401,6 +401,11 @@ static inline bool matches_pseudo_class(CSS::Selector::SimpleSelector::PseudoCla auto const& media_element = static_cast(element); return media_element.muted(); } + case CSS::Selector::SimpleSelector::PseudoClass::Type::VolumeLocked: { + // FIXME: Currently we don't allow the user to specify an override volume, so this is always false. + // Once we do, implement this! + return false; + } } return false; diff --git a/Userland/Libraries/LibWeb/Dump.cpp b/Userland/Libraries/LibWeb/Dump.cpp index 239fadc318..72e6b05da6 100644 --- a/Userland/Libraries/LibWeb/Dump.cpp +++ b/Userland/Libraries/LibWeb/Dump.cpp @@ -554,6 +554,9 @@ void dump_selector(StringBuilder& builder, CSS::Selector const& selector) case CSS::Selector::SimpleSelector::PseudoClass::Type::Muted: pseudo_class_description = "Muted"; break; + case CSS::Selector::SimpleSelector::PseudoClass::Type::VolumeLocked: + pseudo_class_description = "VolumeLocked"; + break; } builder.appendff(" pseudo_class={}", pseudo_class_description);