Merge "Check if license exists before calling remove." into udc-widevine-dev
This commit is contained in:
@@ -1063,29 +1063,42 @@ Status WVDrmPlugin::unprovisionDevice() {
|
||||
|
||||
::ndk::ScopedAStatus WVDrmPlugin::removeOfflineLicense(
|
||||
const ::aidl::android::hardware::drm::KeySetId& in_keySetId) {
|
||||
if (!in_keySetId.keySetId.size()) {
|
||||
if (in_keySetId.keySetId.empty()) {
|
||||
return toNdkScopedAStatus(Status::BAD_VALUE);
|
||||
}
|
||||
|
||||
CdmIdentifier identifier;
|
||||
auto status = mCdmIdentifierBuilder.getCdmIdentifier(&identifier);
|
||||
const auto status = mCdmIdentifierBuilder.getCdmIdentifier(&identifier);
|
||||
if (status != Status::OK) {
|
||||
return toNdkScopedAStatus(status);
|
||||
}
|
||||
|
||||
CdmResponseType res(wvcdm::UNKNOWN_ERROR);
|
||||
const std::vector<CdmSecurityLevel> levels = {wvcdm::kSecurityLevelL1,
|
||||
wvcdm::kSecurityLevelL3};
|
||||
const CdmKeySetId cdmKeySetId(in_keySetId.keySetId.begin(),
|
||||
in_keySetId.keySetId.end());
|
||||
|
||||
res = mCDM->RemoveOfflineLicense(
|
||||
std::string(in_keySetId.keySetId.begin(), in_keySetId.keySetId.end()),
|
||||
wvcdm::kSecurityLevelL1, identifier);
|
||||
if (!isCdmResponseTypeSuccess(res)) {
|
||||
CdmResponseType res = mCDM->RemoveOfflineLicense(
|
||||
std::string(in_keySetId.keySetId.begin(), in_keySetId.keySetId.end()),
|
||||
wvcdm::kSecurityLevelL3, identifier);
|
||||
return toNdkScopedAStatus(mapCdmResponseType(res));
|
||||
for (const CdmSecurityLevel level : levels) {
|
||||
std::vector<CdmKeySetId> keySetIds;
|
||||
const CdmResponseType res =
|
||||
mCDM->ListStoredLicenses(level, identifier, &keySetIds);
|
||||
if (!isCdmResponseTypeSuccess(res)) {
|
||||
// This could failure for several reasons, but none that are
|
||||
// worth returning to the app at this time.
|
||||
ALOGW("Failed to list stored licenses: res = %d", static_cast<int>(res));
|
||||
continue;
|
||||
}
|
||||
// Check if exists.
|
||||
if (keySetIds.empty() || std::find(keySetIds.begin(), keySetIds.end(),
|
||||
cdmKeySetId) == keySetIds.end()) {
|
||||
// Does not exist for this security level.
|
||||
continue;
|
||||
}
|
||||
return toNdkScopedAStatus(mapCdmResponseType(
|
||||
mCDM->RemoveOfflineLicense(cdmKeySetId, level, identifier)));
|
||||
}
|
||||
|
||||
return toNdkScopedAStatus(Status::OK);
|
||||
// Could only reach this state if the key set could not be found.
|
||||
return toNdkScopedAStatus(Status::BAD_VALUE);
|
||||
}
|
||||
|
||||
::ndk::ScopedAStatus WVDrmPlugin::getPropertyString(
|
||||
|
||||
Reference in New Issue
Block a user