mirror of
https://github.com/RGBCube/serenity
synced 2025-07-27 05:57:45 +00:00
LibWeb: Implement the :buffering
and :stalled
pseudo-classes
Currently, HTMLMediaElement doesn't implement the stall timeout, so `:stalled` always returns false.
This commit is contained in:
parent
eb7cda1172
commit
f6e4caf197
7 changed files with 42 additions and 2 deletions
|
@ -465,6 +465,8 @@ Parser::ParseErrorOr<Selector::SimpleSelector> Parser::parse_pseudo_simple_selec
|
|||
|
||||
if (pseudo_name.equals_ignoring_ascii_case("active"sv))
|
||||
return make_pseudo_class_selector(Selector::SimpleSelector::PseudoClass::Type::Active);
|
||||
if (pseudo_name.equals_ignoring_ascii_case("buffering"sv))
|
||||
return make_pseudo_class_selector(Selector::SimpleSelector::PseudoClass::Type::Buffering);
|
||||
if (pseudo_name.equals_ignoring_ascii_case("checked"sv))
|
||||
return make_pseudo_class_selector(Selector::SimpleSelector::PseudoClass::Type::Checked);
|
||||
if (pseudo_name.equals_ignoring_ascii_case("indeterminate"sv))
|
||||
|
@ -507,6 +509,8 @@ Parser::ParseErrorOr<Selector::SimpleSelector> Parser::parse_pseudo_simple_selec
|
|||
return make_pseudo_class_selector(Selector::SimpleSelector::PseudoClass::Type::Root);
|
||||
if (pseudo_name.equals_ignoring_ascii_case("seeking"sv))
|
||||
return make_pseudo_class_selector(Selector::SimpleSelector::PseudoClass::Type::Seeking);
|
||||
if (pseudo_name.equals_ignoring_ascii_case("stalled"sv))
|
||||
return make_pseudo_class_selector(Selector::SimpleSelector::PseudoClass::Type::Stalled);
|
||||
if (pseudo_name.equals_ignoring_ascii_case("host"sv))
|
||||
return make_pseudo_class_selector(Selector::SimpleSelector::PseudoClass::Type::Host);
|
||||
if (pseudo_name.equals_ignoring_ascii_case("visited"sv))
|
||||
|
|
|
@ -236,6 +236,8 @@ ErrorOr<String> Selector::SimpleSelector::serialize() const
|
|||
case Selector::SimpleSelector::PseudoClass::Type::Seeking:
|
||||
case Selector::SimpleSelector::PseudoClass::Type::Muted:
|
||||
case Selector::SimpleSelector::PseudoClass::Type::VolumeLocked:
|
||||
case Selector::SimpleSelector::PseudoClass::Type::Buffering:
|
||||
case Selector::SimpleSelector::PseudoClass::Type::Stalled:
|
||||
// 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)));
|
||||
|
|
|
@ -120,6 +120,8 @@ public:
|
|||
Seeking,
|
||||
Muted,
|
||||
VolumeLocked,
|
||||
Buffering,
|
||||
Stalled,
|
||||
};
|
||||
Type type;
|
||||
|
||||
|
@ -319,6 +321,10 @@ constexpr StringView pseudo_class_name(Selector::SimpleSelector::PseudoClass::Ty
|
|||
return "muted"sv;
|
||||
case Selector::SimpleSelector::PseudoClass::Type::VolumeLocked:
|
||||
return "volume-locked"sv;
|
||||
case Selector::SimpleSelector::PseudoClass::Type::Buffering:
|
||||
return "buffering"sv;
|
||||
case Selector::SimpleSelector::PseudoClass::Type::Stalled:
|
||||
return "stalled"sv;
|
||||
}
|
||||
VERIFY_NOT_REACHED();
|
||||
}
|
||||
|
|
|
@ -406,6 +406,18 @@ static inline bool matches_pseudo_class(CSS::Selector::SimpleSelector::PseudoCla
|
|||
// Once we do, implement this!
|
||||
return false;
|
||||
}
|
||||
case CSS::Selector::SimpleSelector::PseudoClass::Type::Buffering: {
|
||||
if (!is<HTML::HTMLMediaElement>(element))
|
||||
return false;
|
||||
auto const& media_element = static_cast<HTML::HTMLMediaElement const&>(element);
|
||||
return media_element.blocked();
|
||||
}
|
||||
case CSS::Selector::SimpleSelector::PseudoClass::Type::Stalled: {
|
||||
if (!is<HTML::HTMLMediaElement>(element))
|
||||
return false;
|
||||
auto const& media_element = static_cast<HTML::HTMLMediaElement const&>(element);
|
||||
return media_element.stalled();
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue