From 202bf901d76e8d2d5badac607ebf0ba742598235 Mon Sep 17 00:00:00 2001 From: Andrew Kaster Date: Thu, 19 Dec 2024 12:43:48 -0700 Subject: [PATCH] LibWeb: List supported media types publicly for HTMLMediaElement --- Libraries/LibWeb/HTML/HTMLMediaElement.cpp | 19 ++++++++----------- Libraries/LibWeb/HTML/HTMLMediaElement.h | 14 ++++++++++++++ 2 files changed, 22 insertions(+), 11 deletions(-) diff --git a/Libraries/LibWeb/HTML/HTMLMediaElement.cpp b/Libraries/LibWeb/HTML/HTMLMediaElement.cpp index e034a1e53d1..02ad329cd16 100644 --- a/Libraries/LibWeb/HTML/HTMLMediaElement.cpp +++ b/Libraries/LibWeb/HTML/HTMLMediaElement.cpp @@ -187,24 +187,21 @@ Bindings::CanPlayTypeResult HTMLMediaElement::can_play_type(StringView type) con auto mime_type = MimeSniff::MimeType::parse(type); if (mime_type.has_value() && mime_type->type() == "video"sv) { - if (mime_type->subtype() == "webm"sv) + if (supported_video_subtypes.contains_slow(mime_type->subtype())) return Bindings::CanPlayTypeResult::Probably; return Bindings::CanPlayTypeResult::Maybe; } if (mime_type.has_value() && mime_type->type() == "audio"sv) { - if (mime_type->subtype() == "flac"sv) - return Bindings::CanPlayTypeResult::Probably; - if (mime_type->subtype() == "mp3"sv) - return Bindings::CanPlayTypeResult::Probably; + auto result = Bindings::CanPlayTypeResult::Maybe; + if (supported_audio_subtypes.contains_slow(mime_type->subtype())) + result = Bindings::CanPlayTypeResult::Probably; + // "Maybe" because we support mp3, but "mpeg" can also refer to MP1 and MP2. if (mime_type->subtype() == "mpeg"sv) - return Bindings::CanPlayTypeResult::Maybe; - if (mime_type->subtype() == "ogg"sv) - return Bindings::CanPlayTypeResult::Probably; - if (mime_type->subtype() == "wav"sv) - return Bindings::CanPlayTypeResult::Probably; - return Bindings::CanPlayTypeResult::Maybe; + result = Bindings::CanPlayTypeResult::Maybe; + + return result; } return Bindings::CanPlayTypeResult::Empty; diff --git a/Libraries/LibWeb/HTML/HTMLMediaElement.h b/Libraries/LibWeb/HTML/HTMLMediaElement.h index 5aee59725b2..3ff78fdf19e 100644 --- a/Libraries/LibWeb/HTML/HTMLMediaElement.h +++ b/Libraries/LibWeb/HTML/HTMLMediaElement.h @@ -58,6 +58,20 @@ public: [[nodiscard]] GC::Ref buffered() const; + static inline constexpr auto supported_video_subtypes = Array { + "webm"sv, + "mp4"sv, + "mpeg"sv, + "ogg"sv, + }; + static inline constexpr auto supported_audio_subtypes = Array { + "flac"sv, + "mp3"sv, + "mpeg"sv, + "ogg"sv, + "wav"sv, + "webm"sv, + }; Bindings::CanPlayTypeResult can_play_type(StringView type) const; enum class ReadyState : u16 {