| Index: media/cdm/ppapi/external_clear_key/clear_key_cdm.cc
|
| 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 e06f41b55bc9724e7fc937838e64ce6e48fa4066..03eefeaf2cbe017f6f06dfac483f2aec93e25870 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,9 @@ 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::OnSessionKeysChange, base::Unretained(this)),
|
| + base::Bind(&ClearKeyCdm::OnSessionClosed, base::Unretained(this))),
|
| host_(host),
|
| key_system_(key_system),
|
| timer_delay_ms_(kInitialTimerDelayMs),
|
| @@ -327,13 +328,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,7 +344,16 @@ 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 {
|
| std::string message("Not supported for non-persistent sessions.");
|
| host_->OnRejectPromise(promise_id,
|
| @@ -683,6 +691,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 +748,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 +758,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,
|
|
|