LibWeb: List supported media types publicly for HTMLMediaElement

This commit is contained in:
Andrew Kaster 2024-12-19 12:43:48 -07:00 committed by Andreas Kling
commit 202bf901d7
Notes: github-actions[bot] 2024-12-25 11:32:53 +00:00
2 changed files with 22 additions and 11 deletions

View file

@ -187,24 +187,21 @@ Bindings::CanPlayTypeResult HTMLMediaElement::can_play_type(StringView type) con
auto mime_type = MimeSniff::MimeType::parse(type); auto mime_type = MimeSniff::MimeType::parse(type);
if (mime_type.has_value() && mime_type->type() == "video"sv) { 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::Probably;
return Bindings::CanPlayTypeResult::Maybe; return Bindings::CanPlayTypeResult::Maybe;
} }
if (mime_type.has_value() && mime_type->type() == "audio"sv) { if (mime_type.has_value() && mime_type->type() == "audio"sv) {
if (mime_type->subtype() == "flac"sv) auto result = Bindings::CanPlayTypeResult::Maybe;
return Bindings::CanPlayTypeResult::Probably; if (supported_audio_subtypes.contains_slow(mime_type->subtype()))
if (mime_type->subtype() == "mp3"sv) result = Bindings::CanPlayTypeResult::Probably;
return Bindings::CanPlayTypeResult::Probably;
// "Maybe" because we support mp3, but "mpeg" can also refer to MP1 and MP2. // "Maybe" because we support mp3, but "mpeg" can also refer to MP1 and MP2.
if (mime_type->subtype() == "mpeg"sv) if (mime_type->subtype() == "mpeg"sv)
return Bindings::CanPlayTypeResult::Maybe; result = Bindings::CanPlayTypeResult::Maybe;
if (mime_type->subtype() == "ogg"sv)
return Bindings::CanPlayTypeResult::Probably; return result;
if (mime_type->subtype() == "wav"sv)
return Bindings::CanPlayTypeResult::Probably;
return Bindings::CanPlayTypeResult::Maybe;
} }
return Bindings::CanPlayTypeResult::Empty; return Bindings::CanPlayTypeResult::Empty;

View file

@ -58,6 +58,20 @@ public:
[[nodiscard]] GC::Ref<TimeRanges> buffered() const; [[nodiscard]] GC::Ref<TimeRanges> 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; Bindings::CanPlayTypeResult can_play_type(StringView type) const;
enum class ReadyState : u16 { enum class ReadyState : u16 {