Merge "Disallow restoring an offline license multiple times" into sc-dev am: d1d0fa431a
Original change: https://googleplex-android-review.googlesource.com/c/platform/vendor/widevine/+/14731758 Change-Id: Iabf693abbe60ec39b7b0a67939961d507b45a9a6
This commit is contained in:
@@ -312,6 +312,9 @@ class CdmSession {
|
|||||||
// license type release and offline related information
|
// license type release and offline related information
|
||||||
CdmKeySetId key_set_id_;
|
CdmKeySetId key_set_id_;
|
||||||
|
|
||||||
|
bool has_license_been_loaded_ = false;
|
||||||
|
bool has_license_been_restored_ = false;
|
||||||
|
|
||||||
bool mock_license_parser_in_use_;
|
bool mock_license_parser_in_use_;
|
||||||
bool mock_policy_engine_in_use_;
|
bool mock_policy_engine_in_use_;
|
||||||
|
|
||||||
|
|||||||
@@ -414,7 +414,7 @@ enum CdmResponseType : int32_t {
|
|||||||
SHRINK_USAGE_TABLE_HEADER_ENTRY_IN_USE = 359,
|
SHRINK_USAGE_TABLE_HEADER_ENTRY_IN_USE = 359,
|
||||||
LICENSE_USAGE_ENTRY_MISSING = 360,
|
LICENSE_USAGE_ENTRY_MISSING = 360,
|
||||||
LOAD_USAGE_ENTRY_INVALID_SESSION = 361,
|
LOAD_USAGE_ENTRY_INVALID_SESSION = 361,
|
||||||
// previously RESTORE_OFFLINE_LICENSE_ERROR_3 = 362,
|
RESTORE_OFFLINE_LICENSE_ERROR_3 = 362,
|
||||||
NO_SRM_VERSION = 363,
|
NO_SRM_VERSION = 363,
|
||||||
SESSION_NOT_FOUND_23 = 364,
|
SESSION_NOT_FOUND_23 = 364,
|
||||||
CERT_PROVISIONING_RESPONSE_ERROR_9 = 365,
|
CERT_PROVISIONING_RESPONSE_ERROR_9 = 365,
|
||||||
|
|||||||
@@ -215,6 +215,12 @@ CdmResponseType CdmSession::RestoreOfflineSession(const CdmKeySetId& key_set_id,
|
|||||||
if (!key_set_id_.empty()) {
|
if (!key_set_id_.empty()) {
|
||||||
file_handle_->UnreserveLicenseId(key_set_id_);
|
file_handle_->UnreserveLicenseId(key_set_id_);
|
||||||
}
|
}
|
||||||
|
if (has_license_been_loaded_ || has_license_been_restored_) {
|
||||||
|
LOGE(
|
||||||
|
"Disallow multiple offline license restores or restoring a license if "
|
||||||
|
"a license has already been loaded");
|
||||||
|
return RESTORE_OFFLINE_LICENSE_ERROR_3;
|
||||||
|
}
|
||||||
|
|
||||||
key_set_id_ = key_set_id;
|
key_set_id_ = key_set_id;
|
||||||
|
|
||||||
@@ -338,6 +344,7 @@ CdmResponseType CdmSession::RestoreOfflineSession(const CdmKeySetId& key_set_id,
|
|||||||
license_received_ = true;
|
license_received_ = true;
|
||||||
is_offline_ = true;
|
is_offline_ = true;
|
||||||
is_release_ = license_type == kLicenseTypeRelease;
|
is_release_ = license_type == kLicenseTypeRelease;
|
||||||
|
has_license_been_restored_ = true;
|
||||||
return KEY_ADDED;
|
return KEY_ADDED;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -582,6 +589,7 @@ CdmResponseType CdmSession::AddKeyInternal(const CdmKeyResponse& key_response) {
|
|||||||
if (sts != NO_ERROR) return sts;
|
if (sts != NO_ERROR) return sts;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
has_license_been_loaded_ = true;
|
||||||
return KEY_ADDED;
|
return KEY_ADDED;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -477,6 +477,8 @@ static android::status_t mapCdmResponseType(wvcdm::CdmResponseType res) {
|
|||||||
return kRenewKeyError2;
|
return kRenewKeyError2;
|
||||||
case wvcdm::RESTORE_OFFLINE_LICENSE_ERROR_2:
|
case wvcdm::RESTORE_OFFLINE_LICENSE_ERROR_2:
|
||||||
return kRestoreOfflineLicenseError2;
|
return kRestoreOfflineLicenseError2;
|
||||||
|
case wvcdm::RESTORE_OFFLINE_LICENSE_ERROR_3:
|
||||||
|
return kRestoreOfflineLicenseError3;
|
||||||
case wvcdm::SAMPLE_AND_SUBSAMPLE_SIZE_MISMATCH:
|
case wvcdm::SAMPLE_AND_SUBSAMPLE_SIZE_MISMATCH:
|
||||||
return kSampleAndSubsampleSizeMismatch;
|
return kSampleAndSubsampleSizeMismatch;
|
||||||
case wvcdm::SESSION_FILE_HANDLE_INIT_ERROR:
|
case wvcdm::SESSION_FILE_HANDLE_INIT_ERROR:
|
||||||
|
|||||||
@@ -167,6 +167,7 @@ static Status mapCdmResponseType_1_0(wvcdm::CdmResponseType res) {
|
|||||||
case wvcdm::RENEW_KEY_ERROR_1:
|
case wvcdm::RENEW_KEY_ERROR_1:
|
||||||
case wvcdm::RENEW_KEY_ERROR_2:
|
case wvcdm::RENEW_KEY_ERROR_2:
|
||||||
case wvcdm::RESTORE_OFFLINE_LICENSE_ERROR_2:
|
case wvcdm::RESTORE_OFFLINE_LICENSE_ERROR_2:
|
||||||
|
case wvcdm::RESTORE_OFFLINE_LICENSE_ERROR_3:
|
||||||
case wvcdm::NOT_INITIALIZED_ERROR:
|
case wvcdm::NOT_INITIALIZED_ERROR:
|
||||||
case wvcdm::REINIT_ERROR:
|
case wvcdm::REINIT_ERROR:
|
||||||
case wvcdm::SESSION_KEYS_NOT_FOUND:
|
case wvcdm::SESSION_KEYS_NOT_FOUND:
|
||||||
@@ -615,6 +616,7 @@ static S mapCdmResponseType(wvcdm::CdmResponseType res) {
|
|||||||
err = ::drm::V1_4::Status::LICENSE_RESTORE_ERROR;
|
err = ::drm::V1_4::Status::LICENSE_RESTORE_ERROR;
|
||||||
break;
|
break;
|
||||||
case wvcdm::GET_RELEASED_LICENSE_ERROR:
|
case wvcdm::GET_RELEASED_LICENSE_ERROR:
|
||||||
|
case wvcdm::RESTORE_OFFLINE_LICENSE_ERROR_3:
|
||||||
err = ::drm::V1_4::Status::LICENSE_STATE_ERROR;
|
err = ::drm::V1_4::Status::LICENSE_STATE_ERROR;
|
||||||
break;
|
break;
|
||||||
case wvcdm::DEVICE_CERTIFICATE_ERROR_2:
|
case wvcdm::DEVICE_CERTIFICATE_ERROR_2:
|
||||||
|
|||||||
Reference in New Issue
Block a user