Core CDM: Retrieving USAGE_INFO triggers clean-up.
[ Merge of http://go/wvgerrit/158722 ] The CDM will delete all usage info / secure stop files on the device when usage table entries labeled as USAGE_INFO are detected when restoring the usage table. DeviceFiles no longer transfers the stored USAGE_INFO entry info into the run-time entry info vector for the table. This CL makes only minor changes to test data. Significant updates to both device file and usage table header unittests are required to remove usage info / secure stop run-time resources. Bug: 242289743 Test: run_x86_64_tests Change-Id: I2d1fc0d6a4c994bc10bfce47818f101f95883979
This commit is contained in:
@@ -1678,11 +1678,13 @@ bool DeviceFiles::StoreUsageTableInfo(
|
||||
|
||||
bool DeviceFiles::RetrieveUsageTableInfo(
|
||||
CdmUsageTableHeader* usage_table_header,
|
||||
std::vector<CdmUsageEntryInfo>* usage_entry_info, bool* lru_upgrade) {
|
||||
std::vector<CdmUsageEntryInfo>* usage_entry_info, bool* lru_upgrade,
|
||||
bool* has_usage_info_entries) {
|
||||
RETURN_FALSE_IF_UNINITIALIZED();
|
||||
RETURN_FALSE_IF_NULL(usage_table_header);
|
||||
RETURN_FALSE_IF_NULL(usage_entry_info);
|
||||
RETURN_FALSE_IF_NULL(lru_upgrade);
|
||||
RETURN_FALSE_IF_NULL(has_usage_info_entries);
|
||||
|
||||
video_widevine_client::sdk::File file;
|
||||
if (RetrieveHashedFile(GetUsageTableFileName(), &file) != kNoError) {
|
||||
@@ -1712,6 +1714,7 @@ bool DeviceFiles::RetrieveUsageTableInfo(
|
||||
const UsageTableInfo& usage_table_info = file.usage_table_info();
|
||||
|
||||
*lru_upgrade = !usage_table_info.use_lru();
|
||||
*has_usage_info_entries = false;
|
||||
|
||||
*usage_table_header = usage_table_info.usage_table_header();
|
||||
usage_entry_info->resize(usage_table_info.usage_entry_info_size());
|
||||
@@ -1727,10 +1730,8 @@ bool DeviceFiles::RetrieveUsageTableInfo(
|
||||
info.offline_license_expiry_time();
|
||||
break;
|
||||
case UsageTableInfo_UsageEntryInfo_UsageEntryStorage_USAGE_INFO:
|
||||
(*usage_entry_info)[i].storage_type = kStorageUsageInfo;
|
||||
(*usage_entry_info)[i].usage_info_file_name =
|
||||
info.usage_info_file_name();
|
||||
(*usage_entry_info)[i].last_use_time = info.last_use_time();
|
||||
(*usage_entry_info)[i].storage_type = kStorageTypeUnknown;
|
||||
*has_usage_info_entries = true;
|
||||
break;
|
||||
case UsageTableInfo_UsageEntryInfo_UsageEntryStorage_UNKNOWN:
|
||||
default:
|
||||
|
||||
@@ -194,8 +194,10 @@ bool UsageTableHeader::Init(CdmSecurityLevel security_level,
|
||||
|
||||
bool UsageTableHeader::RestoreTable(CryptoSession* const crypto_session) {
|
||||
bool run_lru_upgrade = false;
|
||||
bool has_usage_info_entries = false;
|
||||
if (!device_files_->RetrieveUsageTableInfo(
|
||||
&usage_table_header_, &usage_entry_info_, &run_lru_upgrade)) {
|
||||
&usage_table_header_, &usage_entry_info_, &run_lru_upgrade,
|
||||
&has_usage_info_entries)) {
|
||||
LOGW("Could not retrieve usage table");
|
||||
return false;
|
||||
}
|
||||
@@ -210,6 +212,15 @@ bool UsageTableHeader::RestoreTable(CryptoSession* const crypto_session) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// Remove all usage info entries from storage and clear their
|
||||
// table meta data.
|
||||
if (has_usage_info_entries) {
|
||||
LOGI("Removing all usage info entries");
|
||||
device_files_->DeleteAllUsageInfo();
|
||||
// Store table to remove usage info entries from storage.
|
||||
StoreTable();
|
||||
}
|
||||
|
||||
// If the saved usage entries/meta data is missing LRU information,
|
||||
// then the entries and their meta data must be updated.
|
||||
if (run_lru_upgrade && !LruUpgradeAllUsageEntries()) {
|
||||
|
||||
Reference in New Issue
Block a user