mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2025-09-22 17:29:01 +00:00
LibWeb/EME: Implement a KeySystem
This commit is contained in:
parent
7f2b431810
commit
cc50b30399
Notes:
github-actions[bot]
2025-08-27 07:59:58 +00:00
Author: https://github.com/stelar7
Commit: cc50b30399
Pull-request: https://github.com/LadybirdBrowser/ladybird/pull/5665
Reviewed-by: https://github.com/gmta ✅
Reviewed-by: https://github.com/trflynn89
1 changed files with 72 additions and 0 deletions
72
Libraries/LibWeb/EncryptedMediaExtensions/KeySystem.h
Normal file
72
Libraries/LibWeb/EncryptedMediaExtensions/KeySystem.h
Normal file
|
@ -0,0 +1,72 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2025, stelar7 <dudedbz@gmail.com>
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: BSD-2-Clause
|
||||||
|
*/
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <AK/Utf16String.h>
|
||||||
|
#include <LibWeb/EncryptedMediaExtensions/EncryptedMediaExtensions.h>
|
||||||
|
|
||||||
|
namespace Web::EncryptedMediaExtensions {
|
||||||
|
|
||||||
|
class KeySystem {
|
||||||
|
public:
|
||||||
|
virtual ~KeySystem() = default;
|
||||||
|
|
||||||
|
virtual bool supports_init_data_type(Utf16String const& init_data_type) const = 0;
|
||||||
|
virtual bool supports_encryption_scheme(Utf16String const& encryption_scheme) const = 0;
|
||||||
|
virtual bool supports_robustness(Utf16String const& robustness) const = 0;
|
||||||
|
virtual bool definitely_supports_playback(Utf16String const& container, Utf16String const& media_types, Optional<Utf16String> encryption_scheme, Utf16String const& robustness, Bindings::MediaKeySystemConfiguration const& accumulated_configuration, MediaKeyRestrictions const& restrictions) const = 0;
|
||||||
|
|
||||||
|
private:
|
||||||
|
};
|
||||||
|
|
||||||
|
class ClearKeySystem : public KeySystem {
|
||||||
|
public:
|
||||||
|
ClearKeySystem() = default;
|
||||||
|
virtual ~ClearKeySystem() override = default;
|
||||||
|
|
||||||
|
// https://w3c.github.io/encrypted-media/#clear-key-behavior
|
||||||
|
virtual bool supports_init_data_type(Utf16String const& init_data_type) const override
|
||||||
|
{
|
||||||
|
// Implementations SHOULD support the "keyids" type
|
||||||
|
// TODO: Implementations MAY support any combination of registered Initialization Data Types
|
||||||
|
// https://www.w3.org/TR/eme-initdata-registry/
|
||||||
|
constexpr Array<Utf16View, 1> registered_init_data_types = {
|
||||||
|
"keyids"sv,
|
||||||
|
};
|
||||||
|
|
||||||
|
return registered_init_data_types.contains_slow(init_data_type);
|
||||||
|
}
|
||||||
|
|
||||||
|
// https://w3c.github.io/encrypted-media/#clear-key-capabilities
|
||||||
|
virtual bool supports_encryption_scheme(Utf16String const& encryption_scheme) const override
|
||||||
|
{
|
||||||
|
// encryptionScheme: Implementations MUST support the "cenc" scheme, and MAY support other schemes.
|
||||||
|
return encryption_scheme == "cenc"sv;
|
||||||
|
}
|
||||||
|
|
||||||
|
// https://w3c.github.io/encrypted-media/#clear-key-capabilities
|
||||||
|
virtual bool supports_robustness(Utf16String const& robustness) const override
|
||||||
|
{
|
||||||
|
// robustness: Only the empty string is supported.
|
||||||
|
return robustness.is_empty();
|
||||||
|
}
|
||||||
|
|
||||||
|
virtual bool definitely_supports_playback(Utf16String const& container, Utf16String const& media_types, Optional<Utf16String> encryption_scheme, Utf16String const& robustness, Bindings::MediaKeySystemConfiguration const& accumulated_configuration, MediaKeyRestrictions const& restrictions) const override
|
||||||
|
{
|
||||||
|
(void)container;
|
||||||
|
(void)media_types;
|
||||||
|
(void)encryption_scheme;
|
||||||
|
(void)robustness;
|
||||||
|
(void)accumulated_configuration;
|
||||||
|
(void)restrictions;
|
||||||
|
|
||||||
|
// FIXME: Do some checks here
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
Loading…
Add table
Add a link
Reference in a new issue