From c9b3365286a520d28e52054306b73f2a7379aae4 Mon Sep 17 00:00:00 2001 From: stelar7 Date: Thu, 31 Jul 2025 13:28:31 +0200 Subject: [PATCH] LibWeb/EME: Implement is_supported_key_system --- .../EncryptedMediaExtensions/Algorithms.cpp | 20 +++++++++++++++++++ .../EncryptedMediaExtensions/Algorithms.h | 2 ++ 2 files changed, 22 insertions(+) diff --git a/Libraries/LibWeb/EncryptedMediaExtensions/Algorithms.cpp b/Libraries/LibWeb/EncryptedMediaExtensions/Algorithms.cpp index ac720f1d765..8329b950d30 100644 --- a/Libraries/LibWeb/EncryptedMediaExtensions/Algorithms.cpp +++ b/Libraries/LibWeb/EncryptedMediaExtensions/Algorithms.cpp @@ -399,4 +399,24 @@ Optional get_supported_configuration(KeySystem const& impl return supported_configuration; } +// https://w3c.github.io/encrypted-media/#dfn-common-key-systems +bool is_supported_key_system(Utf16String const& key_system) +{ + constexpr Array supported_key_systems = { + // https://w3c.github.io/encrypted-media/#clear-key + "org.w3.clearkey"sv, + }; + + return supported_key_systems.contains_slow(key_system); +} + +NonnullOwnPtr key_system_from_string(Utf16String const& key_system) +{ + if (key_system == "org.w3.clearkey"_utf16) { + return adopt_own(*new ClearKeySystem()); + } + + VERIFY_NOT_REACHED(); +} + } diff --git a/Libraries/LibWeb/EncryptedMediaExtensions/Algorithms.h b/Libraries/LibWeb/EncryptedMediaExtensions/Algorithms.h index 00fa3c123c0..05b3bcc17d1 100644 --- a/Libraries/LibWeb/EncryptedMediaExtensions/Algorithms.h +++ b/Libraries/LibWeb/EncryptedMediaExtensions/Algorithms.h @@ -17,6 +17,8 @@ namespace Web::EncryptedMediaExtensions { bool supports_container(Utf16String const& container); bool is_persistent_session_type(Utf16String const& session_type); +bool is_supported_key_system(Utf16String const& key_system); +NonnullOwnPtr key_system_from_string(Utf16String const& key_system); ConsentStatus get_consent_status(Bindings::MediaKeySystemConfiguration const&, MediaKeyRestrictions&, URL::Origin const&); Optional> get_supported_capabilities_for_audio_video_type(KeySystem const&, CapabilitiesType, Vector, Bindings::MediaKeySystemConfiguration, MediaKeyRestrictions); Optional get_supported_configuration_and_consent(KeySystem const&, Bindings::MediaKeySystemConfiguration const&, MediaKeyRestrictions&, URL::Origin const&);