From c8a51f232dc81a1cb01c7277470922ab7038b530 Mon Sep 17 00:00:00 2001 From: Sam Atkins Date: Tue, 1 Aug 2023 14:49:28 +0100 Subject: [PATCH] LibWeb: Implement the `:muted` 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 | 6 ++++++ Userland/Libraries/LibWeb/Dump.cpp | 3 +++ Userland/Libraries/LibWeb/HTML/HTMLMediaElement.cpp | 1 + 6 files changed, 16 insertions(+) diff --git a/Userland/Libraries/LibWeb/CSS/Parser/Parser.cpp b/Userland/Libraries/LibWeb/CSS/Parser/Parser.cpp index 2921b1506e..ab4b81e8ad 100644 --- a/Userland/Libraries/LibWeb/CSS/Parser/Parser.cpp +++ b/Userland/Libraries/LibWeb/CSS/Parser/Parser.cpp @@ -493,6 +493,8 @@ Parser::ParseErrorOr Parser::parse_pseudo_simple_selec return make_pseudo_class_selector(Selector::SimpleSelector::PseudoClass::Type::LastOfType); if (pseudo_name.equals_ignoring_ascii_case("link"sv)) return make_pseudo_class_selector(Selector::SimpleSelector::PseudoClass::Type::Link); + if (pseudo_name.equals_ignoring_ascii_case("muted"sv)) + return make_pseudo_class_selector(Selector::SimpleSelector::PseudoClass::Type::Muted); if (pseudo_name.equals_ignoring_ascii_case("only-child"sv)) return make_pseudo_class_selector(Selector::SimpleSelector::PseudoClass::Type::OnlyChild); if (pseudo_name.equals_ignoring_ascii_case("only-of-type"sv)) diff --git a/Userland/Libraries/LibWeb/CSS/Selector.cpp b/Userland/Libraries/LibWeb/CSS/Selector.cpp index f93e15fcfc..d7d83e9bd7 100644 --- a/Userland/Libraries/LibWeb/CSS/Selector.cpp +++ b/Userland/Libraries/LibWeb/CSS/Selector.cpp @@ -234,6 +234,7 @@ ErrorOr Selector::SimpleSelector::serialize() const case Selector::SimpleSelector::PseudoClass::Type::Playing: case Selector::SimpleSelector::PseudoClass::Type::Paused: case Selector::SimpleSelector::PseudoClass::Type::Seeking: + case Selector::SimpleSelector::PseudoClass::Type::Muted: // 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 24480aaaf4..d6b314edae 100644 --- a/Userland/Libraries/LibWeb/CSS/Selector.h +++ b/Userland/Libraries/LibWeb/CSS/Selector.h @@ -118,6 +118,7 @@ public: Playing, Paused, Seeking, + Muted, }; Type type; @@ -313,6 +314,8 @@ constexpr StringView pseudo_class_name(Selector::SimpleSelector::PseudoClass::Ty return "paused"sv; case Selector::SimpleSelector::PseudoClass::Type::Seeking: return "seeking"sv; + case Selector::SimpleSelector::PseudoClass::Type::Muted: + return "muted"sv; } VERIFY_NOT_REACHED(); } diff --git a/Userland/Libraries/LibWeb/CSS/SelectorEngine.cpp b/Userland/Libraries/LibWeb/CSS/SelectorEngine.cpp index b1bdef287c..fc3e35a8c7 100644 --- a/Userland/Libraries/LibWeb/CSS/SelectorEngine.cpp +++ b/Userland/Libraries/LibWeb/CSS/SelectorEngine.cpp @@ -395,6 +395,12 @@ static inline bool matches_pseudo_class(CSS::Selector::SimpleSelector::PseudoCla auto const& media_element = static_cast(element); return media_element.seeking(); } + case CSS::Selector::SimpleSelector::PseudoClass::Type::Muted: { + if (!is(element)) + return false; + auto const& media_element = static_cast(element); + return media_element.muted(); + } } return false; diff --git a/Userland/Libraries/LibWeb/Dump.cpp b/Userland/Libraries/LibWeb/Dump.cpp index 964be79d48..239fadc318 100644 --- a/Userland/Libraries/LibWeb/Dump.cpp +++ b/Userland/Libraries/LibWeb/Dump.cpp @@ -551,6 +551,9 @@ void dump_selector(StringBuilder& builder, CSS::Selector const& selector) case CSS::Selector::SimpleSelector::PseudoClass::Type::Seeking: pseudo_class_description = "Seeking"; break; + case CSS::Selector::SimpleSelector::PseudoClass::Type::Muted: + pseudo_class_description = "Muted"; + break; } builder.appendff(" pseudo_class={}", pseudo_class_description); diff --git a/Userland/Libraries/LibWeb/HTML/HTMLMediaElement.cpp b/Userland/Libraries/LibWeb/HTML/HTMLMediaElement.cpp index f4731db1e3..595835277e 100644 --- a/Userland/Libraries/LibWeb/HTML/HTMLMediaElement.cpp +++ b/Userland/Libraries/LibWeb/HTML/HTMLMediaElement.cpp @@ -414,6 +414,7 @@ void HTMLMediaElement::set_muted(bool muted) m_muted = muted; volume_or_muted_attribute_changed(); + set_needs_style_update(true); } // https://html.spec.whatwg.org/multipage/media.html#user-interface:dom-media-volume-3