diff options
Diffstat (limited to 'media/cdm/ppapi')
-rw-r--r-- | media/cdm/ppapi/external_clear_key/clear_key_cdm.cc | 43 | ||||
-rw-r--r-- | media/cdm/ppapi/external_clear_key/clear_key_cdm.h | 4 |
2 files changed, 33 insertions, 14 deletions
diff --git a/media/cdm/ppapi/external_clear_key/clear_key_cdm.cc b/media/cdm/ppapi/external_clear_key/clear_key_cdm.cc index e06f41b..a49b6c2 100644 --- a/media/cdm/ppapi/external_clear_key/clear_key_cdm.cc +++ b/media/cdm/ppapi/external_clear_key/clear_key_cdm.cc @@ -220,8 +220,10 @@ namespace media { ClearKeyCdm::ClearKeyCdm(ClearKeyCdmHost* host, const std::string& key_system) : decryptor_( - base::Bind(&ClearKeyCdm::OnSessionMessage, base::Unretained(this)), - base::Bind(&ClearKeyCdm::OnSessionClosed, base::Unretained(this))), + base::Bind(&ClearKeyCdm::OnSessionMessage, base::Unretained(this)), + base::Bind(&ClearKeyCdm::OnSessionClosed, base::Unretained(this)), + base::Bind(&ClearKeyCdm::OnSessionKeysChange, + base::Unretained(this))), host_(host), key_system_(key_system), timer_delay_ms_(kInitialTimerDelayMs), @@ -327,13 +329,11 @@ void ClearKeyCdm::CloseSession(uint32 promise_id, std::string web_session_str(web_session_id, web_session_id_length); scoped_ptr<media::SimpleCdmPromise> promise(new media::SimpleCdmPromise( - base::Bind(&ClearKeyCdm::OnSessionReleased, - base::Unretained(this), - promise_id, - web_session_str), + base::Bind( + &ClearKeyCdm::OnPromiseResolved, base::Unretained(this), promise_id), base::Bind( &ClearKeyCdm::OnPromiseFailed, base::Unretained(this), promise_id))); - decryptor_.ReleaseSession(web_session_str, promise.Pass()); + decryptor_.CloseSession(web_session_str, promise.Pass()); } void ClearKeyCdm::RemoveSession(uint32 promise_id, @@ -345,8 +345,19 @@ void ClearKeyCdm::RemoveSession(uint32 promise_id, std::string(kLoadableWebSessionId) == std::string(web_session_id, web_session_id_length); if (is_persistent_session) { - host_->OnResolvePromise(promise_id); + std::string web_session_str(web_session_id, web_session_id_length); + + scoped_ptr<media::SimpleCdmPromise> promise( + new media::SimpleCdmPromise(base::Bind(&ClearKeyCdm::OnPromiseResolved, + base::Unretained(this), + promise_id), + base::Bind(&ClearKeyCdm::OnPromiseFailed, + base::Unretained(this), + promise_id))); + decryptor_.RemoveSession(web_session_str, promise.Pass()); } else { + // TODO(jrummell): This should be a DCHECK once blink does the proper + // checks. std::string message("Not supported for non-persistent sessions."); host_->OnRejectPromise(promise_id, cdm::kInvalidAccessError, @@ -683,6 +694,13 @@ void ClearKeyCdm::OnSessionMessage(const std::string& web_session_id, destination_url.spec().size()); } +void ClearKeyCdm::OnSessionKeysChange(const std::string& web_session_id, + bool has_additional_usable_key) { + host_->OnSessionUsableKeysChange(web_session_id.data(), + web_session_id.length(), + has_additional_usable_key); +} + void ClearKeyCdm::OnSessionClosed(const std::string& web_session_id) { host_->OnSessionClosed(web_session_id.data(), web_session_id.length()); } @@ -733,11 +751,6 @@ void ClearKeyCdm::OnSessionUpdated(uint32 promise_id, host_->OnResolvePromise(promise_id); } -void ClearKeyCdm::OnSessionReleased(uint32 promise_id, - const std::string& web_session_id) { - host_->OnResolvePromise(promise_id); -} - void ClearKeyCdm::OnUsableKeyIdsObtained(uint32 promise_id, const KeyIdsVector& key_ids) { scoped_ptr<cdm::BinaryData[]> result(new cdm::BinaryData[key_ids.size()]); @@ -748,6 +761,10 @@ void ClearKeyCdm::OnUsableKeyIdsObtained(uint32 promise_id, host_->OnResolveKeyIdsPromise(promise_id, result.get(), key_ids.size()); } +void ClearKeyCdm::OnPromiseResolved(uint32 promise_id) { + host_->OnResolvePromise(promise_id); +} + void ClearKeyCdm::OnPromiseFailed(uint32 promise_id, MediaKeys::Exception exception_code, uint32 system_code, diff --git a/media/cdm/ppapi/external_clear_key/clear_key_cdm.h b/media/cdm/ppapi/external_clear_key/clear_key_cdm.h index c491cd7..19d41f8 100644 --- a/media/cdm/ppapi/external_clear_key/clear_key_cdm.h +++ b/media/cdm/ppapi/external_clear_key/clear_key_cdm.h @@ -92,6 +92,8 @@ class ClearKeyCdm : public ClearKeyCdmInterface { void OnSessionMessage(const std::string& web_session_id, const std::vector<uint8>& message, const GURL& destination_url); + void OnSessionKeysChange(const std::string& web_session_id, + bool has_additional_usable_key); void OnSessionClosed(const std::string& web_session_id); // Handle the success/failure of a promise. These methods are responsible for @@ -99,8 +101,8 @@ class ClearKeyCdm : public ClearKeyCdmInterface { void OnSessionCreated(uint32 promise_id, const std::string& web_session_id); void OnSessionLoaded(uint32 promise_id, const std::string& web_session_id); void OnSessionUpdated(uint32 promise_id, const std::string& web_session_id); - void OnSessionReleased(uint32 promise_id, const std::string& web_session_id); void OnUsableKeyIdsObtained(uint32 promise_id, const KeyIdsVector& key_ids); + void OnPromiseResolved(uint32 promise_id); void OnPromiseFailed(uint32 promise_id, MediaKeys::Exception exception_code, uint32 system_code, |