diff --git a/libwvdrmengine/cdm/core/include/device_files.h b/libwvdrmengine/cdm/core/include/device_files.h index 89539977..6f4ddd62 100644 --- a/libwvdrmengine/cdm/core/include/device_files.h +++ b/libwvdrmengine/cdm/core/include/device_files.h @@ -199,7 +199,7 @@ class DeviceFiles { std::string* provider_session_token); virtual bool DeleteUsageInfo(const std::string& usage_info_file_name, - const std::string& provider_session_token); + const CdmKeySetId& key_set_id); // Deletes a set of provider sessions from the specified usage info. // Sessions removed are based on the provided |key_set_ids|. If diff --git a/libwvdrmengine/cdm/core/src/cdm_engine.cpp b/libwvdrmengine/cdm/core/src/cdm_engine.cpp index 60a8c0d9..b6723f1a 100644 --- a/libwvdrmengine/cdm/core/src/cdm_engine.cpp +++ b/libwvdrmengine/cdm/core/src/cdm_engine.cpp @@ -1685,7 +1685,7 @@ CdmResponseType CdmEngine::RemoveAllUsageInfo( } if (!handle.DeleteUsageInfo(DeviceFiles::GetUsageInfoFileName(app_id), - usage_data[0].provider_session_token)) { + usage_data[0].key_set_id)) { LOGW("Failed to delete usage info"); break; } @@ -1737,25 +1737,17 @@ CdmResponseType CdmEngine::RemoveUsageInfo( new CdmSession(file_system_, metrics_->AddSession())); usage_session_->Init(usage_property_set_.get()); - CdmKeyMessage license_request; - CdmKeyResponse license_response; - UsageEntry usage_entry; - UsageEntryIndex usage_entry_index; - std::string drm_certificate; - CryptoWrappedKey wrapped_private_key; - - if (!handle.RetrieveUsageInfo( - DeviceFiles::GetUsageInfoFileName(app_id), provider_session_token, - &license_request, &license_response, &usage_entry, - &usage_entry_index, &drm_certificate, &wrapped_private_key)) { + DeviceFiles::CdmUsageData usage_data; + if (!handle.RetrieveUsageInfo(DeviceFiles::GetUsageInfoFileName(app_id), + provider_session_token, &usage_data)) { // Try other security level continue; } if (usage_session_->SupportsUsageTable()) { - status = usage_session_->DeleteUsageEntry(usage_entry_index); + status = usage_session_->DeleteUsageEntry(usage_data.usage_entry_index); if (!handle.DeleteUsageInfo(DeviceFiles::GetUsageInfoFileName(app_id), - provider_session_token)) { + usage_data.key_set_id)) { status = CdmResponseType(REMOVE_USAGE_INFO_ERROR_1); } usage_session_.reset(); diff --git a/libwvdrmengine/cdm/core/src/cdm_session.cpp b/libwvdrmengine/cdm/core/src/cdm_session.cpp index 30940e7f..78de664b 100644 --- a/libwvdrmengine/cdm/core/src/cdm_session.cpp +++ b/libwvdrmengine/cdm/core/src/cdm_session.cpp @@ -1025,8 +1025,7 @@ bool CdmSession::DeleteLicenseFile() { std::string app_id; GetApplicationId(&app_id); return file_handle_->DeleteUsageInfo( - DeviceFiles::GetUsageInfoFileName(app_id), - license_parser_->provider_session_token()); + DeviceFiles::GetUsageInfoFileName(app_id), key_set_id_); } } diff --git a/libwvdrmengine/cdm/core/src/cdm_usage_table.cpp b/libwvdrmengine/cdm/core/src/cdm_usage_table.cpp index c31f3abd..48871593 100644 --- a/libwvdrmengine/cdm/core/src/cdm_usage_table.cpp +++ b/libwvdrmengine/cdm/core/src/cdm_usage_table.cpp @@ -824,7 +824,7 @@ CdmResponseType CdmUsageTable::StoreEntry(UsageEntryIndex entry_index, } device_files->DeleteUsageInfo( entry_info_list_[entry_index].usage_info_file_name, - provider_session_token); + entry_info_list_[entry_index].key_set_id); if (!device_files->StoreUsageInfo( provider_session_token, key_request, key_response, entry_info_list_[entry_index].usage_info_file_name, diff --git a/libwvdrmengine/cdm/core/src/device_files.cpp b/libwvdrmengine/cdm/core/src/device_files.cpp index 5e2e5325..6a727794 100644 --- a/libwvdrmengine/cdm/core/src/device_files.cpp +++ b/libwvdrmengine/cdm/core/src/device_files.cpp @@ -1128,7 +1128,7 @@ bool DeviceFiles::GetProviderSessionToken(const std::string& app_id, } bool DeviceFiles::DeleteUsageInfo(const std::string& usage_info_file_name, - const std::string& provider_session_token) { + const CdmKeySetId& key_set_id) { RETURN_FALSE_IF_UNINITIALIZED(); video_widevine_client::sdk::File file; if (RetrieveHashedFile(usage_info_file_name, &file) != kNoError) { @@ -1140,17 +1140,19 @@ bool DeviceFiles::DeleteUsageInfo(const std::string& usage_info_file_name, int index = 0; bool found = false; for (; index < usage_info->sessions_size(); ++index) { - if (usage_info->sessions(index).token() == provider_session_token) { + const auto& session = usage_info->sessions(index); + if (session.key_set_id() == key_set_id) { found = true; break; } } if (!found) { - LOGE("Unable to find provider session token: pst = %s", - wvutil::b2a_hex(provider_session_token).c_str()); + LOGE("Unable to find usage info: key_set_id = %s", IdToString(key_set_id)); return false; } + LOGD("Deleting usage info: key_set_id = %s, pst = %s", IdToString(key_set_id), + wvutil::b2a_hex(usage_info->sessions(index).token()).c_str()); google::protobuf::RepeatedPtrField* sessions = usage_info->mutable_sessions(); diff --git a/libwvdrmengine/cdm/core/test/cdm_usage_table_unittest.cpp b/libwvdrmengine/cdm/core/test/cdm_usage_table_unittest.cpp index 15658d05..369e2493 100644 --- a/libwvdrmengine/cdm/core/test/cdm_usage_table_unittest.cpp +++ b/libwvdrmengine/cdm/core/test/cdm_usage_table_unittest.cpp @@ -394,7 +394,7 @@ class MockDeviceFiles : public DeviceFiles { MOCK_METHOD(bool, StoreUsageTableInfo, (const UsageTableHeader&, const std::vector&), (override)); - MOCK_METHOD(bool, DeleteUsageInfo, (const std::string&, const std::string&), + MOCK_METHOD(bool, DeleteUsageInfo, (const std::string&, const CdmKeySetId&), (override)); MOCK_METHOD(bool, DeleteMultipleUsageInfoByKeySetIds, (const std::string&, const std::vector&),