Fewer parameters for storing and retrieve license information.
[ Merge of http://go/wvgerrit/84990 ] Storing and retrieving licenses from device files had required 15 parameters to the DeviceFiles methods. Now, licenses information is bundled together in a single struct `CdmLicenseData`, similar to `CdmUsageData`. Bug: 137882164 Test: Linux and Android unittest Change-Id: I149b39573800e7c66681343b252b41341a8902f7
This commit is contained in:
@@ -219,30 +219,32 @@ CdmResponseType CdmSession::RestoreOfflineSession(const CdmKeySetId& key_set_id,
|
||||
}
|
||||
key_set_id_ = key_set_id;
|
||||
|
||||
DeviceFiles::LicenseState license_state;
|
||||
int64_t playback_start_time;
|
||||
int64_t last_playback_time;
|
||||
int64_t grace_period_end_time;
|
||||
DeviceFiles::CdmLicenseData license_data;
|
||||
DeviceFiles::ResponseType sub_error_code = DeviceFiles::kNoError;
|
||||
|
||||
if (!file_handle_->RetrieveLicense(
|
||||
key_set_id, &license_state, &offline_init_data_, &key_request_,
|
||||
&key_response_, &offline_key_renewal_request_,
|
||||
&offline_key_renewal_response_, &offline_release_server_url_,
|
||||
&playback_start_time, &last_playback_time, &grace_period_end_time,
|
||||
&app_parameters_, &usage_entry_, &usage_entry_number_,
|
||||
&sub_error_code)) {
|
||||
if (!file_handle_->RetrieveLicense(key_set_id, &license_data,
|
||||
&sub_error_code)) {
|
||||
LOGE("Failed to retrieve license: sub_error_code = %d, key_set_id = %s",
|
||||
static_cast<int>(sub_error_code), key_set_id.c_str());
|
||||
SetErrorDetail(error_detail, sub_error_code);
|
||||
return sub_error_code == DeviceFiles::kFileNotFound ? KEYSET_ID_NOT_FOUND_4
|
||||
: GET_LICENSE_ERROR;
|
||||
}
|
||||
offline_init_data_ = std::move(license_data.pssh_data);
|
||||
key_request_ = std::move(license_data.license_request);
|
||||
key_response_ = std::move(license_data.license);
|
||||
offline_key_renewal_request_ =
|
||||
std::move(license_data.license_renewal_request);
|
||||
offline_key_renewal_response_ = std::move(license_data.license_renewal);
|
||||
offline_release_server_url_ = std::move(license_data.release_server_url);
|
||||
app_parameters_ = std::move(license_data.app_parameters);
|
||||
usage_entry_ = std::move(license_data.usage_entry);
|
||||
usage_entry_number_ = license_data.usage_entry_number;
|
||||
|
||||
// Attempts to restore a released offline license are treated as a release
|
||||
// retry.
|
||||
if (Properties::allow_restore_of_offline_licenses_with_release()) {
|
||||
if (license_state == DeviceFiles::kLicenseStateReleasing) {
|
||||
if (license_data.state == DeviceFiles::kLicenseStateReleasing) {
|
||||
license_type = kLicenseTypeRelease;
|
||||
}
|
||||
}
|
||||
@@ -250,9 +252,9 @@ CdmResponseType CdmSession::RestoreOfflineSession(const CdmKeySetId& key_set_id,
|
||||
// Only restore offline licenses if they are active or this is a release
|
||||
// retry.
|
||||
if (!(license_type == kLicenseTypeRelease ||
|
||||
license_state == DeviceFiles::kLicenseStateActive)) {
|
||||
LOGE("Invalid offline license state: license_state = %d, license_type = %d",
|
||||
static_cast<int>(license_state), static_cast<int>(license_type));
|
||||
license_data.state == DeviceFiles::kLicenseStateActive)) {
|
||||
LOGE("Invalid offline license state: state = %d, license_type = %d",
|
||||
static_cast<int>(license_data.state), static_cast<int>(license_type));
|
||||
return GET_RELEASED_LICENSE_ERROR;
|
||||
}
|
||||
|
||||
@@ -285,7 +287,8 @@ CdmResponseType CdmSession::RestoreOfflineSession(const CdmKeySetId& key_set_id,
|
||||
} else {
|
||||
result = license_parser_->RestoreOfflineLicense(
|
||||
key_request_, key_response_, offline_key_renewal_response_,
|
||||
playback_start_time, last_playback_time, grace_period_end_time, this);
|
||||
license_data.playback_start_time, license_data.last_playback_time,
|
||||
license_data.grace_period_end_time, this);
|
||||
if (result != NO_ERROR) {
|
||||
SetErrorDetail(error_detail, result);
|
||||
return RESTORE_OFFLINE_LICENSE_ERROR_2;
|
||||
@@ -300,7 +303,7 @@ CdmResponseType CdmSession::RestoreOfflineSession(const CdmKeySetId& key_set_id,
|
||||
LOGE("Failed to update usage entry: status = %d", static_cast<int>(sts));
|
||||
return sts;
|
||||
}
|
||||
if (!StoreLicense(license_state, error_detail)) {
|
||||
if (!StoreLicense(license_data.state, error_detail)) {
|
||||
LOGW("Unable to save updated usage info");
|
||||
}
|
||||
}
|
||||
@@ -895,15 +898,25 @@ CdmResponseType CdmSession::StoreLicense() {
|
||||
bool CdmSession::StoreLicense(DeviceFiles::LicenseState state,
|
||||
int* error_detail) {
|
||||
DeviceFiles::ResponseType error_detail_alt = DeviceFiles::kNoError;
|
||||
bool result = file_handle_->StoreLicense(
|
||||
key_set_id_, state, offline_init_data_, key_request_, key_response_,
|
||||
offline_key_renewal_request_, offline_key_renewal_response_,
|
||||
offline_release_server_url_, policy_engine_->GetPlaybackStartTime(),
|
||||
DeviceFiles::CdmLicenseData license_data{
|
||||
key_set_id_,
|
||||
state,
|
||||
/* pssh_data = */ offline_init_data_,
|
||||
/* license_request = */ key_request_,
|
||||
/* license = */ key_response_,
|
||||
/* license_renewal_request = */ offline_key_renewal_request_,
|
||||
/* license_renewal = */ offline_key_renewal_response_,
|
||||
offline_release_server_url_,
|
||||
policy_engine_->GetPlaybackStartTime(),
|
||||
policy_engine_->GetLastPlaybackTime(),
|
||||
policy_engine_->GetGracePeriodEndTime(), app_parameters_, usage_entry_,
|
||||
usage_entry_number_, &error_detail_alt);
|
||||
policy_engine_->GetGracePeriodEndTime(),
|
||||
app_parameters_,
|
||||
usage_entry_,
|
||||
usage_entry_number_};
|
||||
|
||||
bool result = file_handle_->StoreLicense(license_data, &error_detail_alt);
|
||||
if (error_detail != nullptr) {
|
||||
*error_detail = error_detail_alt;
|
||||
*error_detail = static_cast<int>(error_detail_alt);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user