Index: media/cdm/ppapi/cdm_adapter.cc |
diff --git a/media/cdm/ppapi/cdm_adapter.cc b/media/cdm/ppapi/cdm_adapter.cc |
index 14aa23120b27b5ce8d3c08d3c7aae0d2f44db9a6..98edb5fb393d50aa7222531ffce9b973129aca09 100644 |
--- a/media/cdm/ppapi/cdm_adapter.cc |
+++ b/media/cdm/ppapi/cdm_adapter.cc |
@@ -383,12 +383,30 @@ void CdmAdapter::UpdateSession(uint32_t promise_id, |
response_size); |
} |
+void CdmAdapter::GetUsableKeyIds(uint32_t promise_id, |
+ const std::string& web_session_id) { |
+ if (!cdm_->GetUsableKeyIds( |
+ promise_id, web_session_id.data(), web_session_id.length())) { |
+ // CDM_4 and CDM_5 don't support this method, so reject the promise. |
+ RejectPromise(promise_id, cdm::kNotSupportedError, 0, "Not supported."); |
ddorwin
2014/08/07 01:34:43
Maybe "Not implemented." "Not supported" is redund
jrummell
2014/08/07 20:44:30
This rejection happens for CDM_4 and CDM_5, which
ddorwin
2014/08/07 22:10:43
Yes, but the message goes to JS, so we want it to
|
+ } |
+} |
+ |
void CdmAdapter::ReleaseSession(uint32_t promise_id, |
const std::string& web_session_id) { |
- cdm_->ReleaseSession( |
+ cdm_->CloseSession( |
promise_id, web_session_id.data(), web_session_id.length()); |
} |
+void CdmAdapter::RemoveSession(uint32_t promise_id, |
+ const std::string& web_session_id) { |
+ if (!cdm_->RemoveSession( |
+ promise_id, web_session_id.data(), web_session_id.length())) { |
+ // CDM_4 and CDM_5 don't support this method, so reject the promise. |
+ RejectPromise(promise_id, cdm::kNotSupportedError, 0, "Not supported."); |
ddorwin
2014/08/07 01:34:43
ditto
jrummell
2014/08/07 20:44:30
ditto
|
+ } |
+} |
+ |
// Note: In the following decryption/decoding related functions, errors are NOT |
// reported via KeyError, but are reported via corresponding PPB calls. |
@@ -670,12 +688,19 @@ void CdmAdapter::OnSessionError(uint32_t session_id, |
// cdm::Host_5 methods |
ddorwin
2014/08/07 01:34:43
and 6?
jrummell
2014/08/07 20:44:29
Done.
|
cdm::Time CdmAdapter::GetCurrentTime() { |
+ return GetCurrentWallTime(); |
+} |
+ |
+cdm::Time CdmAdapter::GetCurrentWallTime() { |
return pp::Module::Get()->core()->GetTime(); |
} |
void CdmAdapter::OnResolvePromise(uint32_t promise_id) { |
PostOnMain(callback_factory_.NewCallback( |
&CdmAdapter::SendPromiseResolvedInternal, promise_id)); |
+ std::string session_id; |
ddorwin
2014/08/07 01:34:43
Although the Wrapper explains these are for 4 & 5,
jrummell
2014/08/07 20:44:29
Done.
|
+ if (cdm_->SessionUsableKeysEventNeeded(promise_id, &session_id)) |
+ OnSessionKeysChange(session_id.data(), session_id.length(), true); |
} |
void CdmAdapter::OnResolveNewSessionPromise(uint32_t promise_id, |
@@ -685,6 +710,24 @@ void CdmAdapter::OnResolveNewSessionPromise(uint32_t promise_id, |
&CdmAdapter::SendPromiseResolvedWithSessionInternal, |
promise_id, |
std::string(web_session_id, web_session_id_length))); |
+ std::string session_id; |
+ if (cdm_->SessionUsableKeysEventNeeded(promise_id, &session_id)) |
+ OnSessionKeysChange(web_session_id, web_session_id_length, true); |
+} |
+ |
+void CdmAdapter::OnResolveKeyIdsPromise(uint32_t promise_id, |
+ const cdm::BinaryData* usable_key_ids, |
+ uint32_t usable_key_ids_length) { |
+ std::vector<std::vector<uint8> > key_ids; |
+ for (uint32_t i = 0; i < usable_key_ids_length; ++i) { |
+ key_ids.push_back( |
+ std::vector<uint8>(usable_key_ids[i].data, |
+ usable_key_ids[i].data + usable_key_ids[i].length)); |
+ } |
+ PostOnMain(callback_factory_.NewCallback( |
+ &CdmAdapter::SendPromiseResolvedWithUsableKeyIdsInternal, |
+ promise_id, |
+ key_ids)); |
} |
void CdmAdapter::OnRejectPromise(uint32_t promise_id, |
@@ -724,17 +767,28 @@ void CdmAdapter::OnSessionMessage(const char* web_session_id, |
void CdmAdapter::OnSessionKeysChange(const char* web_session_id, |
uint32_t web_session_id_length, |
bool has_additional_usable_key) { |
- // TODO(jrummell): Implement this event in subsequent CL |
- // (http://crbug.com/370251). |
- PP_NOTREACHED(); |
+ PostOnMain(callback_factory_.NewCallback( |
ddorwin
2014/08/07 01:34:43
Just call OnSessionUsableKeysChange?
jrummell
2014/08/07 20:44:29
Done.
|
+ &CdmAdapter::SendSessionUsableKeysChangeInternal, |
+ std::string(web_session_id, web_session_id_length), |
+ has_additional_usable_key)); |
+} |
+ |
+void CdmAdapter::OnSessionUsableKeysChange(const char* web_session_id, |
+ uint32_t web_session_id_length, |
+ bool has_additional_usable_key) { |
+ PostOnMain(callback_factory_.NewCallback( |
+ &CdmAdapter::SendSessionUsableKeysChangeInternal, |
+ std::string(web_session_id, web_session_id_length), |
+ has_additional_usable_key)); |
} |
void CdmAdapter::OnExpirationChange(const char* web_session_id, |
uint32_t web_session_id_length, |
cdm::Time new_expiry_time) { |
- // TODO(jrummell): Implement this event in subsequent CL |
- // (http://crbug.com/370251). |
- PP_NOTREACHED(); |
+ PostOnMain(callback_factory_.NewCallback( |
+ &CdmAdapter::SendExpirationChangeInternal, |
+ std::string(web_session_id, web_session_id_length), |
+ new_expiry_time)); |
} |
void CdmAdapter::OnSessionReady(const char* web_session_id, |
@@ -782,6 +836,15 @@ void CdmAdapter::SendPromiseResolvedWithSessionInternal( |
web_session_id); |
} |
+void CdmAdapter::SendPromiseResolvedWithUsableKeyIdsInternal( |
+ int32_t result, |
+ uint32_t promise_id, |
+ std::vector<std::vector<uint8> > key_ids) { |
+ PP_DCHECK(result == PP_OK); |
+ // TODO(jrummell): Implement this event in subsequent CL. |
+ // (http://crbug.com/358271). |
+} |
+ |
void CdmAdapter::SendPromiseRejectedInternal(int32_t result, |
uint32_t promise_id, |
const SessionError& error) { |
@@ -832,6 +895,23 @@ void CdmAdapter::SendSessionErrorInternal(int32_t result, |
error.error_description); |
} |
+void CdmAdapter::SendSessionUsableKeysChangeInternal( |
+ int32_t result, |
+ const std::string& web_session_id, |
+ bool has_additional_usable_key) { |
+ PP_DCHECK(result == PP_OK); |
+ // TODO(jrummell): Implement this event in subsequent CL. |
+ // (http://crbug.com/358271). |
+} |
+ |
+void CdmAdapter::SendExpirationChangeInternal(int32_t result, |
+ const std::string& web_session_id, |
+ cdm::Time new_expiry_time) { |
+ PP_DCHECK(result == PP_OK); |
+ // TODO(jrummell): Implement this event in subsequent CL. |
+ // (http://crbug.com/358271). |
+} |
+ |
void CdmAdapter::DeliverBlock(int32_t result, |
const cdm::Status& status, |
const LinkedDecryptedBlock& decrypted_block, |
@@ -1214,7 +1294,7 @@ void* GetCdmHost(int host_interface_version, void* user_data) { |
return NULL; |
COMPILE_ASSERT( |
- cdm::ContentDecryptionModule::Host::kVersion == cdm::Host_5::kVersion, |
+ cdm::ContentDecryptionModule::Host::kVersion == cdm::Host_6::kVersion, |
update_code_below); |
// Ensure IsSupportedCdmHostVersion matches implementation of this function. |
@@ -1224,10 +1304,11 @@ void* GetCdmHost(int host_interface_version, void* user_data) { |
PP_DCHECK( |
// Future version is not supported. |
- !IsSupportedCdmHostVersion(cdm::Host_5::kVersion + 1) && |
+ !IsSupportedCdmHostVersion(cdm::Host_6::kVersion + 1) && |
// Current version is supported. |
- IsSupportedCdmHostVersion(cdm::Host_5::kVersion) && |
+ IsSupportedCdmHostVersion(cdm::Host_6::kVersion) && |
// Include all previous supported versions (if any) here. |
+ IsSupportedCdmHostVersion(cdm::Host_5::kVersion) && |
IsSupportedCdmHostVersion(cdm::Host_4::kVersion) && |
// One older than the oldest supported version is not supported. |
!IsSupportedCdmHostVersion(cdm::Host_4::kVersion - 1)); |
@@ -1240,6 +1321,8 @@ void* GetCdmHost(int host_interface_version, void* user_data) { |
return static_cast<cdm::Host_4*>(cdm_adapter); |
case cdm::Host_5::kVersion: |
return static_cast<cdm::Host_5*>(cdm_adapter); |
+ case cdm::Host_6::kVersion: |
+ return static_cast<cdm::Host_6*>(cdm_adapter); |
default: |
PP_NOTREACHED(); |
return NULL; |