diff options
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.cc | 54 |
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 |