Merge "Integrate OnExpirationUpdate and OnSessionKeysChange with Android"
This commit is contained in:
@@ -53,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,
|
||||
@@ -859,30 +876,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::queryProperty(const std::string& property,
|
||||
|
||||
Reference in New Issue
Block a user