summaryrefslogtreecommitdiff
path: root/chromium/media/cdm/library_cdm/clear_key_cdm/clear_key_cdm_proxy.cc
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/media/cdm/library_cdm/clear_key_cdm/clear_key_cdm_proxy.cc')
-rw-r--r--chromium/media/cdm/library_cdm/clear_key_cdm/clear_key_cdm_proxy.cc54
1 files changed, 45 insertions, 9 deletions
diff --git a/chromium/media/cdm/library_cdm/clear_key_cdm/clear_key_cdm_proxy.cc b/chromium/media/cdm/library_cdm/clear_key_cdm/clear_key_cdm_proxy.cc
index c251354b535..2a4b2c2e337 100644
--- a/chromium/media/cdm/library_cdm/clear_key_cdm/clear_key_cdm_proxy.cc
+++ b/chromium/media/cdm/library_cdm/clear_key_cdm/clear_key_cdm_proxy.cc
@@ -11,6 +11,26 @@
namespace media {
+namespace {
+
+constexpr char kDummySessionId[] = "dummy session id";
+
+class IgnoreResponsePromise : public SimpleCdmPromise {
+ public:
+ IgnoreResponsePromise() = default;
+ ~IgnoreResponsePromise() override = default;
+
+ // SimpleCdmPromise implementation.
+ void resolve() final { MarkPromiseSettled(); }
+ void reject(CdmPromise::Exception exception_code,
+ uint32_t system_code,
+ const std::string& error_message) final {
+ MarkPromiseSettled();
+ }
+};
+
+} // namespace
+
ClearKeyCdmProxy::ClearKeyCdmProxy() : weak_factory_(this) {}
ClearKeyCdmProxy::~ClearKeyCdmProxy() {}
@@ -23,9 +43,8 @@ base::WeakPtr<CdmContext> ClearKeyCdmProxy::GetCdmContext() {
void ClearKeyCdmProxy::Initialize(Client* client, InitializeCB init_cb) {
DVLOG(1) << __func__;
- std::move(init_cb).Run(
- Status::kOk, Protocol::kIntelConvergedSecurityAndManageabilityEngine,
- kClearKeyCdmProxyCryptoSessionId);
+ std::move(init_cb).Run(Status::kOk, Protocol::kIntel,
+ kClearKeyCdmProxyCryptoSessionId);
}
void ClearKeyCdmProxy::Process(Function function,
@@ -67,7 +86,15 @@ void ClearKeyCdmProxy::CreateMediaCryptoSession(
void ClearKeyCdmProxy::SetKey(uint32_t crypto_session_id,
const std::vector<uint8_t>& key_id,
- const std::vector<uint8_t>& key_blob) {}
+ const std::vector<uint8_t>& key_blob) {
+ DVLOG(1) << __func__;
+
+ if (!aes_decryptor_)
+ CreateDecryptor();
+
+ aes_decryptor_->UpdateSession(kDummySessionId, key_blob,
+ std::make_unique<IgnoreResponsePromise>());
+}
void ClearKeyCdmProxy::RemoveKey(uint32_t crypto_session_id,
const std::vector<uint8_t>& key_id) {}
@@ -75,13 +102,22 @@ void ClearKeyCdmProxy::RemoveKey(uint32_t crypto_session_id,
Decryptor* ClearKeyCdmProxy::GetDecryptor() {
DVLOG(1) << __func__;
- if (!aes_decryptor_) {
- aes_decryptor_ = base::MakeRefCounted<AesDecryptor>(
- base::DoNothing(), base::DoNothing(), base::DoNothing(),
- base::DoNothing());
- }
+ if (!aes_decryptor_)
+ CreateDecryptor();
return aes_decryptor_.get();
}
+void ClearKeyCdmProxy::CreateDecryptor() {
+ DVLOG(1) << __func__;
+ DCHECK(!aes_decryptor_);
+
+ aes_decryptor_ =
+ base::MakeRefCounted<AesDecryptor>(base::DoNothing(), base::DoNothing(),
+ base::DoNothing(), base::DoNothing());
+
+ // Also create a dummy session to be used for SetKey().
+ aes_decryptor_->CreateSession(kDummySessionId, CdmSessionType::kTemporary);
+}
+
} // namespace media