Merge "Check if license exists before calling remove." into udc-widevine-dev

This commit is contained in:
Alex Dale
2023-11-16 23:06:59 +00:00
committed by Android (Google) Code Review
2 changed files with 97 additions and 19 deletions

View File

@@ -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(