Integrate OnExpirationUpdate and OnSessionKeysChange with Android

Also removes OnSessionExpiration which is no longer needed with
OnSessionKeysChange.

Bug: 19771612
Bug: 19771431

Merged from Widevine CDM repo:
https://widevine-internal-review.googlesource.com/#/c/13951/

Change-Id: I0603e808e8d50ff7bb1fb1d5e44fabd8d268ee8a
This commit is contained in:
Kongqun Yang
2015-04-01 15:02:38 -07:00
parent 4621028434
commit f7c449e93a
8 changed files with 142 additions and 102 deletions

View File

@@ -33,6 +33,13 @@ using namespace std;
using namespace wvcdm;
namespace {
Vector<uint8_t> ToVector(const std::string& str) {
Vector<uint8_t> vector;
vector.appendArray(reinterpret_cast<const uint8_t*>(str.data()), str.size());
return vector;
}
DrmPlugin::KeyRequestType ConvertFromCdmKeyRequestType(
CdmKeyRequestType keyRequestType) {
switch (keyRequestType) {
@@ -46,6 +53,23 @@ DrmPlugin::KeyRequestType ConvertFromCdmKeyRequestType(
return DrmPlugin::kKeyRequestType_Unknown;
}
}
DrmPlugin::KeyStatusType ConvertFromCdmKeyStatus(CdmKeyStatus keyStatus) {
switch (keyStatus) {
case kKeyStatusUsable:
return DrmPlugin::kKeyStatusType_Usable;
case kKeyStatusExpired:
return DrmPlugin::kKeyStatusType_Expired;
case kKeyStatusOutputNotAllowed:
return DrmPlugin::kKeyStatusType_OutputNotAllowed;
case kKeyStatusPending:
return DrmPlugin::kKeyStatusType_StatusPending;
case kKeyStatusInternalError:
default:
return DrmPlugin::kKeyStatusType_InternalError;
}
}
} // namespace
WVDrmPlugin::WVDrmPlugin(WvContentDecryptionModule* cdm,
@@ -941,30 +965,35 @@ status_t WVDrmPlugin::signRSA(const Vector<uint8_t>& /* sessionId */,
}
void WVDrmPlugin::OnSessionRenewalNeeded(const CdmSessionId& cdmSessionId) {
Vector<uint8_t> sessionId;
sessionId.appendArray(reinterpret_cast<const uint8_t*>(cdmSessionId.data()),
cdmSessionId.size());
Vector<uint8_t> sessionId = ToVector(cdmSessionId);
sendEvent(kDrmPluginEventKeyNeeded, 0, &sessionId, NULL);
}
void WVDrmPlugin::OnSessionExpiration(const CdmSessionId& cdmSessionId) {
Vector<uint8_t> sessionId;
sessionId.appendArray(reinterpret_cast<const uint8_t*>(cdmSessionId.data()),
cdmSessionId.size());
sendEvent(kDrmPluginEventKeyExpired, 0, &sessionId, NULL);
}
void WVDrmPlugin::OnSessionKeysChange(const CdmSessionId& cdmSessionId,
const CdmKeyStatusMap& cdmKeysStatus,
bool hasNewUsableKey) {
bool expired = false;
Vector<KeyStatus> keyStatusList;
for (CdmKeyStatusMap::const_iterator it = cdmKeysStatus.begin();
it != cdmKeysStatus.end(); ++it) {
const KeyId& keyId = it->first;
const CdmKeyStatus cdmKeyStatus = it->second;
if (cdmKeyStatus == kKeyStatusExpired) expired = true;
void WVDrmPlugin::OnSessionKeysChange(
const CdmSessionId& session_id,
const std::vector<CdmKeyInformation>& cdm_keys_info,
bool has_new_usable_key) {
// TODO(kqyang): Glue with DrmPlugin API when it is ready.
keyStatusList.push(
{ToVector(keyId), ConvertFromCdmKeyStatus(cdmKeyStatus)});
}
Vector<uint8_t> sessionId = ToVector(cdmSessionId);
sendKeysChange(&sessionId, &keyStatusList, hasNewUsableKey);
// For backward compatibility.
if (expired) sendEvent(kDrmPluginEventKeyExpired, 0, &sessionId, NULL);
}
void WVDrmPlugin::OnExpirationUpdate(const CdmSessionId& cdmSessionId,
int64_t new_expiry_time) {
// TODO(kqyang): Glue with DrmPlugin API when it is ready. Note that
// new_expiry_time is in seconds while Android API is in milliseconds.
int64_t newExpiryTime) {
Vector<uint8_t> sessionId = ToVector(cdmSessionId);
sendExpirationUpdate(&sessionId, newExpiryTime * 1000);
}
status_t WVDrmPlugin::mapAndNotifyOfCdmResponseType(