From b384408dd24e3fd52d929017735501b50edb1ac3 Mon Sep 17 00:00:00 2001 From: Rahul Frias Date: Mon, 6 Feb 2017 23:45:06 -0800 Subject: [PATCH] Persist usage entry number [ Merge of http://go/wvgerrit/23741 ] Usage entries and usage entry numbers need to be stored with license and usage information, to facilitate loading usage entries when offline licenses/usage information are restored or prepared for release. b/34327459 Test: Validated by running unit/integration tests on angler. Change-Id: I0949fc4cec8a50be0a7700b659dc12bb82ac6f73 --- .../cdm/core/include/device_files.h | 15 ++-- libwvdrmengine/cdm/core/src/cdm_engine.cpp | 15 +++- libwvdrmengine/cdm/core/src/cdm_session.cpp | 10 ++- libwvdrmengine/cdm/core/src/device_files.cpp | 24 ++++-- .../cdm/core/src/device_files.proto | 2 + .../cdm/core/test/device_files_unittest.cpp | 86 ++++++++++++------- 6 files changed, 104 insertions(+), 48 deletions(-) diff --git a/libwvdrmengine/cdm/core/include/device_files.h b/libwvdrmengine/cdm/core/include/device_files.h index 8a669a13..af78af60 100644 --- a/libwvdrmengine/cdm/core/include/device_files.h +++ b/libwvdrmengine/cdm/core/include/device_files.h @@ -69,7 +69,8 @@ class DeviceFiles { int64_t last_playback_time, int64_t grace_period_end_time, const CdmAppParameterMap& app_parameters, - const CdmUsageEntry& usage_entry); + const CdmUsageEntry& usage_entry, + uint32_t usage_entry_number); virtual bool RetrieveLicense( const std::string& key_set_id, LicenseState* state, CdmInitData* pssh_data, CdmKeyMessage* key_request, @@ -77,7 +78,7 @@ class DeviceFiles { CdmKeyResponse* key_renewal_response, std::string* release_server_url, int64_t* playback_start_time, int64_t* last_playback_time, int64_t* grace_period_end_time, CdmAppParameterMap* app_parameters, - CdmUsageEntry* usage_entry); + CdmUsageEntry* usage_entry, uint32_t* usage_entry_number); virtual bool DeleteLicense(const std::string& key_set_id); virtual bool ListLicenses(std::vector* key_set_ids); virtual bool DeleteAllFiles(); @@ -91,7 +92,8 @@ class DeviceFiles { const CdmKeyResponse& key_response, const std::string& app_id, const std::string& key_set_id, - const CdmUsageEntry& usage_entry); + const CdmUsageEntry& usage_entry, + uint32_t usage_entry_number); virtual bool DeleteUsageInfo(const std::string& app_id, const std::string& provider_session_token); // Delete usage information from the file system. Puts a list of all the @@ -110,14 +112,17 @@ class DeviceFiles { const std::string& provider_session_token, CdmKeyMessage* license_request, CdmKeyResponse* license_response, - CdmUsageEntry* usage_entry); + CdmUsageEntry* usage_entry, + uint32_t* usage_entry_number); // Retrieve the usage info entry specified by |key_set_id|. // Returns false if the entry could not be found. virtual bool RetrieveUsageInfoByKeySetId(const std::string& app_id, const std::string& key_set_id, + std::string* provider_session_token, CdmKeyMessage* license_request, CdmKeyResponse* license_response, - CdmUsageEntry* usage_entry); + CdmUsageEntry* usage_entry, + uint32_t* usage_entry_number); virtual bool StoreHlsAttributes(const std::string& key_set_id, const CdmHlsMethod method, diff --git a/libwvdrmengine/cdm/core/src/cdm_engine.cpp b/libwvdrmengine/cdm/core/src/cdm_engine.cpp index f81d4c69..5331e97e 100644 --- a/libwvdrmengine/cdm/core/src/cdm_engine.cpp +++ b/libwvdrmengine/cdm/core/src/cdm_engine.cpp @@ -1055,8 +1055,10 @@ CdmResponseType CdmEngine::GetUsageInfo(const std::string& app_id, CdmKeyMessage license_request; CdmKeyResponse license_response; std::string usage_entry; + uint32_t usage_entry_number = 0; if (!handle.RetrieveUsageInfo(app_id, ssid, &license_request, - &license_response, &usage_entry)) { + &license_response, &usage_entry, + &usage_entry_number)) { usage_property_set_->set_security_level(kLevel3); usage_property_set_->set_app_id(app_id); usage_session_.reset(new CdmSession(file_system_)); @@ -1070,7 +1072,8 @@ CdmResponseType CdmEngine::GetUsageInfo(const std::string& app_id, return GET_USAGE_INFO_ERROR_2; } if (!handle.RetrieveUsageInfo(app_id, ssid, &license_request, - &license_response, &usage_entry)) { + &license_response, &usage_entry, + &usage_entry_number)) { // No entry found for that ssid. return USAGE_INFO_NOT_FOUND; } @@ -1283,11 +1286,15 @@ CdmResponseType CdmEngine::LoadUsageSession(const CdmKeySetId& key_set_id, std::string app_id; iter->second->GetApplicationId(&app_id); + std::string provider_session_token; CdmKeyMessage key_message; CdmKeyResponse key_response; std::string usage_entry; - if (!handle.RetrieveUsageInfoByKeySetId(app_id, key_set_id, &key_message, - &key_response, &usage_entry)) { + uint32_t usage_entry_number = 0; + if (!handle.RetrieveUsageInfoByKeySetId(app_id, key_set_id, + &provider_session_token, &key_message, + &key_response, &usage_entry, + &usage_entry_number)) { LOGE("CdmEngine::LoadUsageSession: unable to find usage information"); return LOAD_USAGE_INFO_MISSING; } diff --git a/libwvdrmengine/cdm/core/src/cdm_session.cpp b/libwvdrmengine/cdm/core/src/cdm_session.cpp index 662a57f7..8e8f3073 100644 --- a/libwvdrmengine/cdm/core/src/cdm_session.cpp +++ b/libwvdrmengine/cdm/core/src/cdm_session.cpp @@ -179,13 +179,14 @@ CdmResponseType CdmSession::RestoreOfflineSession( int64_t last_playback_time; int64_t grace_period_end_time; std::string usage_entry; + uint32_t usage_entry_number = 0; 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)) { + &app_parameters_, &usage_entry, &usage_entry_number)) { LOGE("CdmSession::Init failed to retrieve license. key set id = %s", key_set_id.c_str()); return GET_LICENSE_ERROR; @@ -624,9 +625,10 @@ CdmResponseType CdmSession::StoreLicense() { std::string app_id; GetApplicationId(&app_id); std::string usage_entry; + uint32_t usage_entry_number = 0; if (!file_handle_->StoreUsageInfo(provider_session_token, key_request_, key_response_, app_id, key_set_id_, - usage_entry)) { + usage_entry, usage_entry_number)) { LOGE("CdmSession::StoreLicense: Unable to store usage info"); return STORE_USAGE_INFO_ERROR; } @@ -635,12 +637,14 @@ CdmResponseType CdmSession::StoreLicense() { bool CdmSession::StoreLicense(DeviceFiles::LicenseState state) { std::string usage_entry; + uint32_t usage_entry_number = 0; return 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(), policy_engine_->GetLastPlaybackTime(), - policy_engine_->GetGracePeriodEndTime(), app_parameters_, usage_entry); + policy_engine_->GetGracePeriodEndTime(), app_parameters_, usage_entry, + usage_entry_number); } CdmResponseType CdmSession::ReleaseCrypto() { diff --git a/libwvdrmengine/cdm/core/src/device_files.cpp b/libwvdrmengine/cdm/core/src/device_files.cpp index eff98e2c..995d9eef 100644 --- a/libwvdrmengine/cdm/core/src/device_files.cpp +++ b/libwvdrmengine/cdm/core/src/device_files.cpp @@ -177,7 +177,8 @@ bool DeviceFiles::StoreLicense( const std::string& release_server_url, int64_t playback_start_time, int64_t last_playback_time, int64_t grace_period_end_time, const CdmAppParameterMap& app_parameters, - const CdmUsageEntry& usage_entry) { + const CdmUsageEntry& usage_entry, + const uint32_t usage_entry_number) { if (!initialized_) { LOGW("DeviceFiles::StoreLicense: not initialized"); return false; @@ -219,6 +220,7 @@ bool DeviceFiles::StoreLicense( app_params->set_value(iter->second); } license->set_usage_entry(usage_entry); + license->set_usage_entry_number(usage_entry_number); std::string serialized_file; file.SerializeToString(&serialized_file); @@ -233,7 +235,8 @@ bool DeviceFiles::RetrieveLicense( CdmKeyMessage* license_renewal_request, CdmKeyResponse* license_renewal, std::string* release_server_url, int64_t* playback_start_time, int64_t* last_playback_time, int64_t* grace_period_end_time, - CdmAppParameterMap* app_parameters, CdmUsageEntry* usage_entry) { + CdmAppParameterMap* app_parameters, CdmUsageEntry* usage_entry, + uint32_t* usage_entry_number) { if (!initialized_) { LOGW("DeviceFiles::RetrieveLicense: not initialized"); return false; @@ -288,6 +291,7 @@ bool DeviceFiles::RetrieveLicense( license.app_parameters(i).value(); } *usage_entry = license.usage_entry(); + *usage_entry_number = license.usage_entry_number(); return true; } @@ -384,7 +388,8 @@ bool DeviceFiles::StoreUsageInfo(const std::string& provider_session_token, const CdmKeyResponse& key_response, const std::string& app_id, const std::string& key_set_id, - const CdmUsageEntry& usage_entry) { + const std::string& usage_entry, + uint32_t usage_entry_number) { if (!initialized_) { LOGW("DeviceFiles::StoreUsageInfo: not initialized"); return false; @@ -411,6 +416,7 @@ bool DeviceFiles::StoreUsageInfo(const std::string& provider_session_token, provider_session->set_license(key_response.data(), key_response.size()); provider_session->set_key_set_id(key_set_id.data(), key_set_id.size()); provider_session->set_usage_entry(usage_entry); + provider_session->set_usage_entry_number(usage_entry_number); std::string serialized_file; file.SerializeToString(&serialized_file); @@ -525,7 +531,8 @@ bool DeviceFiles::RetrieveUsageInfo(const std::string& app_id, const std::string& provider_session_token, CdmKeyMessage* license_request, CdmKeyResponse* license_response, - CdmUsageEntry* usage_entry) { + std::string* usage_entry, + uint32_t* usage_entry_number) { if (!initialized_) { LOGW("DeviceFiles::RetrieveUsageInfo: not initialized"); return false; @@ -543,6 +550,8 @@ bool DeviceFiles::RetrieveUsageInfo(const std::string& app_id, *license_request = file.usage_info().sessions(index).license_request(); *license_response = file.usage_info().sessions(index).license(); *usage_entry = file.usage_info().sessions(index).usage_entry(); + *usage_entry_number = + file.usage_info().sessions(index).usage_entry_number(); return true; } } @@ -553,9 +562,11 @@ bool DeviceFiles::RetrieveUsageInfo(const std::string& app_id, bool DeviceFiles::RetrieveUsageInfoByKeySetId( const std::string& app_id, const std::string& key_set_id, + std::string* provider_session_token, CdmKeyMessage* license_request, CdmKeyResponse* license_response, - CdmUsageEntry* usage_entry) { + std::string* usage_entry, + uint32_t* usage_entry_number) { if (!initialized_) { LOGW("DeviceFiles::RetrieveUsageInfoByKeySetId: not initialized"); return false; @@ -570,9 +581,12 @@ bool DeviceFiles::RetrieveUsageInfoByKeySetId( int index = 0; for (; index < file.usage_info().sessions_size(); ++index) { if (file.usage_info().sessions(index).key_set_id() == key_set_id) { + *provider_session_token = file.usage_info().sessions(index).token(); *license_request = file.usage_info().sessions(index).license_request(); *license_response = file.usage_info().sessions(index).license(); *usage_entry = file.usage_info().sessions(index).usage_entry(); + *usage_entry_number = + file.usage_info().sessions(index).usage_entry_number(); return true; } } diff --git a/libwvdrmengine/cdm/core/src/device_files.proto b/libwvdrmengine/cdm/core/src/device_files.proto index 1bfb21ce..169fafa5 100644 --- a/libwvdrmengine/cdm/core/src/device_files.proto +++ b/libwvdrmengine/cdm/core/src/device_files.proto @@ -44,6 +44,7 @@ message License { // ignored if there is no grace period. optional int64 grace_period_end_time = 11 [default = 0]; optional bytes usage_entry = 12; + optional int64 usage_entry_number = 13; } message UsageInfo { @@ -53,6 +54,7 @@ message UsageInfo { optional bytes license = 3; optional bytes key_set_id = 4; optional bytes usage_entry = 5; + optional int64 usage_entry_number = 6; } repeated ProviderSession sessions = 1; diff --git a/libwvdrmengine/cdm/core/test/device_files_unittest.cpp b/libwvdrmengine/cdm/core/test/device_files_unittest.cpp index 0f751d0a..a70670e5 100644 --- a/libwvdrmengine/cdm/core/test/device_files_unittest.cpp +++ b/libwvdrmengine/cdm/core/test/device_files_unittest.cpp @@ -124,6 +124,7 @@ struct LicenseInfo { int64_t grace_period_end_time; std::string app_parameters; std::string usage_entry; + uint32_t usage_entry_number; std::string file_data; }; @@ -230,9 +231,9 @@ LicenseInfo license_test_data[] = { "0112001A16200342120A106B63746C0000000000ECDCBE0000000020DBDF" "A68F051A20182F029E35047A3841FA176C74E5B387350E8D58DEA6878FF0" "BEA6CABACA1C2C"), - "https://test.google.com/license/GetCencLicense", 0x0, 0x0, 0x0, "", "", + "https://test.google.com/license/GetCencLicense", 0x0, 0x0, 0x0, "", "", 0, a2bs_hex( - "0AAC150802100122A5150801121408011210303132333435363738394142434445461" + "0AAE150802100122A7150801121408011210303132333435363738394142434445461" "A9D0E080112950C0AD70B080112EF090AB002080212103E560EC5335E346F591BC4D0" "7A7D507618A5D3A68F05228E023082010A0282010100A947904B8DBD55FB685FDB302" "5574517CCCC74EE4FEAF6629D5179A52FF85CE7409528EFFA0E5DFC3DE9A34BA5F08B" @@ -311,8 +312,9 @@ LicenseInfo license_test_data[] = { "106B63746C0000000000ECDCBE0000000020DBDFA68F051A20182F029E35047A3841F" "A176C74E5B387350E8D58DEA6878FF0BEA6CABACA1C2C3A2E68747470733A2F2F7465" "73742E676F6F676C652E636F6D2F6C6963656E73652F47657443656E634C6963656E7" - "3654000480058006200122039CB77169260F923E5D4BA5BBF6A7611117483253F2869" - "9DF3D9D14C3718E309")}, + "365400048005800620068001220785CE1756656A049E77F28C8449AB2DD115B6C43B2" + "FF232D23F98B72F1DCE96A" + )}, // license 1 {"ksidC8EAA2579A282EB0", DeviceFiles::kLicenseStateReleasing, @@ -415,8 +417,9 @@ LicenseInfo license_test_data[] = { a2bs_hex( "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f2021" "22232425262728292a2b2c2d2e2f"), + 5, a2bs_hex( - "0AF5150802100122EE150802121408011210303132333435363738394142434445461" + "0AF7150802100122F0150802121408011210303132333435363738394142434445461" "A9D0E080112950C0AD70B080112EF090AB002080212103E560EC5335E346F591BC4D0" "7A7D507618A5D3A68F05228E023082010A0282010100A947904B8DBD55FB685FDB302" "5574517CCCC74EE4FEAF6629D5179A52FF85CE7409528EFFA0E5DFC3DE9A34BA5F08B" @@ -497,8 +500,8 @@ LicenseInfo license_test_data[] = { "73742E676F6F676C652E636F6D2F6C6963656E73652F47657443656E634C6963656E7" "36540F8ACD1910148E58ED29101520F0A054E616D6531120656616C75653158006230" "000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F20212" - "2232425262728292A2B2C2D2E2F1220312487214ACA5A9AF5ED9D45F209DC77E03CA1" - "DBFFDF86C44A35A1351CE968B9")}, + "2232425262728292A2B2C2D2E2F6805122010DB816A045F2AA5865B17FE2F20DA2114" + "17B2F8B2D7511C9DE89A87CB5208AB")}, // license 2 {"ksidE8C37662C88DC673", DeviceFiles::kLicenseStateReleasing, @@ -601,8 +604,9 @@ LicenseInfo license_test_data[] = { a2bs_hex( "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f2021" "22232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f"), + 12, a2bs_hex( - "0AAB160802100122A4160802121408011210303132333435363738394142434445461" + "0AAD160802100122A6160802121408011210303132333435363738394142434445461" "A9D0E080112950C0AD70B080112EF090AB002080212103E560EC5335E346F591BC4D0" "7A7D507618A5D3A68F05228E023082010A0282010100A947904B8DBD55FB685FDB302" "5574517CCCC74EE4FEAF6629D5179A52FF85CE7409528EFFA0E5DFC3DE9A34BA5F08B" @@ -684,8 +688,9 @@ LicenseInfo license_test_data[] = { "36540EF9BAFCDF8ACD1910148DCFDAFCDF8ACD1910152150A054E616D6531120C5661" "6C756531204E616D653252160A0C4E616D653220506172616D321206506172616D325" "8006240000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E" - "1F202122232425262728292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F122" - "07CEAAE401B81E635808AC830A0F3F43308A38FAB16069E542F994B6EC1325280")}}; + "1F202122232425262728292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F680" + "C12206AA0237760D1F06E5CB78F5AFC3D124BBF7C26921CB3CC2EA44766801E25D34" + "F")}}; // Sample license data and related data for storage and use for offline // playback. The license data and URLs in this test are not real. @@ -792,8 +797,9 @@ LicenseInfo license_update_test_data[] = { a2bs_hex( "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f2021" "22232425262728292a2b2c2d2e2f"), + 15, a2bs_hex( - "0AEC150802100122E5150801121408011210303132333435363738394142434445461" + "0AEE150802100122E7150801121408011210303132333435363738394142434445461" "A9D0E080112950C0AD70B080112EF090AB002080212103E560EC5335E346F591BC4D0" "7A7D5076189EDFB68F05228E023082010A0282010100CC1715C81AD3F6F279C686F82" "6E6D7C8961EB13318367D06B4061BBC57E3C616A226A10F042CAD54D44C6484C725CD" @@ -874,14 +880,14 @@ LicenseInfo license_update_test_data[] = { "73742E676F6F676C652E636F6D2F6C6963656E73652F47657443656E634C6963656E7" "36540EF9BAFCDF8ACD1910148DCFDAFCDF8ACD1910158006230000102030405060708" "090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2" - "B2C2D2E2F1220A33C179B7718632337DFDC32D3711FD543336EBE838979DFDEB3A168" - "BC9AFB27")}, + "B2C2D2E2F680F122009B8588A8E9926339289BA373DB8479A71F7AA1164083D90613F" + "766D60B07CBC")}, // license being released. all fields are identical except for license // state and hashed file data {"", DeviceFiles::kLicenseStateReleasing, "", "", "", "", "", "", 0, 0, 0, - "", "", + "", "", 15, a2bs_hex( - "0AEC150802100122E5150802121408011210303132333435363738394142434445461" + "0AEE150802100122E7150802121408011210303132333435363738394142434445461" "A9D0E080112950C0AD70B080112EF090AB002080212103E560EC5335E346F591BC4D0" "7A7D5076189EDFB68F05228E023082010A0282010100CC1715C81AD3F6F279C686F82" "6E6D7C8961EB13318367D06B4061BBC57E3C616A226A10F042CAD54D44C6484C725CD" @@ -962,8 +968,8 @@ LicenseInfo license_update_test_data[] = { "73742E676F6F676C652E636F6D2F6C6963656E73652F47657443656E634C6963656E7" "36540EF9BAFCDF8ACD1910148DCFDAFCDF8ACD1910158006230000102030405060708" "090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2" - "B2C2D2E2F1220394BA01DFB519C1A7311115F8B2A0AC3141F981FFEA09FCD48A8EFA3" - "A045AAE6")}}; + "B2C2D2E2F680F12202F5B77A3168AC2A81832231A435D0587F6D1DF3B905A7058C5E8" + "565C81B96CA6")}}; // Application parameters were added to the License message. This data // is used to verify that a License saved without application parameters can @@ -1065,7 +1071,7 @@ LicenseInfo license_app_parameters_backwards_compatibility_test_data = { "0112001A16200342120A106B63746C0000000000ECDCBE0000000020DBDF" "A68F051A20182F029E35047A3841FA176C74E5B387350E8D58DEA6878FF0" "BEA6CABACA1C2C"), - "https://test.google.com/license/GetCencLicense", 0x0, 0x0, 0x0, "", "", + "https://test.google.com/license/GetCencLicense", 0x0, 0x0, 0x0, "", "", 0, a2bs_hex( "0AA8150802100122A1150801121408011210303132333435363738394142434445461" "A9D0E080112950C0AD70B080112EF090AB002080212103E560EC5335E346F591BC4D0" @@ -1154,11 +1160,12 @@ struct UsageInfo { std::string license_request; std::string license; std::string usage_entry; + uint32_t usage_entry_number; std::string file_data; }; UsageInfo kUsageInfoTestData[] = { - {"", "", "", "", // 0 usage info records + {"", "", "", "", 0, // 0 usage info records a2bs_hex("0A06080210012A00122095053501C5FA405B7EF01DA94685C6B20CB36493" "A9CF1653B720E2BEA3B77929")}, {// 1 usage info record @@ -1196,6 +1203,7 @@ UsageInfo kUsageInfoTestData[] = { a2bs_hex( "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f2021" "22232425262728292a2b2c2d2e2f"), + 6, a2bs_hex( "0AB307080210012AAC070AA9070A8001924B035FBDA56AE5EF0ED05A08DE7AECC8ABE" "1835E0C4A548F7803937F4C3B4520EB7F3334FFCDFA00DE56408F09D5019FCE87072D" @@ -1261,6 +1269,7 @@ UsageInfo kUsageInfoTestData[] = { a2bs_hex( "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f2021" "22232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f"), + 14, a2bs_hex( "0ADF0E080210012AD80E0AA9070A8001924B035FBDA56AE5EF0ED05A08DE7AECC8ABE" "1835E0C4A548F7803937F4C3B4520EB7F3334FFCDFA00DE56408F09D5019FCE87072D" @@ -1353,6 +1362,7 @@ UsageInfo kUsageInfoTestData[] = { a2bs_hex( "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f2021" "22232425262728292a2b2c2d2e2f"), + 19, a2bs_hex( "0A8B16080210012A84160AA9070A8001924B035FBDA56AE5EF0ED05A08DE7AECC8ABE" "1835E0C4A548F7803937F4C3B4520EB7F3334FFCDFA00DE56408F09D5019FCE87072D" @@ -1497,7 +1507,7 @@ DeviceFiles::UsageEntryInfo kUsageEntriesTestData[] = { }; struct UsageTableTestInfo { - std::string usage_table_header; + CdmUsageTableHeader usage_table_header; std::string file_data; }; @@ -1885,7 +1895,8 @@ TEST_P(DeviceFilesStoreTest, StoreLicense) { license_test_data[license_num].playback_start_time, license_test_data[license_num].last_playback_time, license_test_data[license_num].grace_period_end_time, app_parameters, - license_test_data[license_num].usage_entry)); + license_test_data[license_num].usage_entry, + license_test_data[license_num].usage_entry_number)); } INSTANTIATE_TEST_CASE_P(StoreLicense, DeviceFilesStoreTest, ::testing::Bool()); @@ -1935,7 +1946,8 @@ TEST_F(DeviceFilesTest, StoreLicenses) { license_test_data[i].playback_start_time, license_test_data[i].last_playback_time, license_test_data[i].grace_period_end_time, app_parameters, - license_test_data[i].usage_entry)); + license_test_data[i].usage_entry, + license_test_data[i].usage_entry_number)); } } @@ -1977,6 +1989,7 @@ TEST_F(DeviceFilesTest, RetrieveLicenses) { std::string release_server_url; CdmAppParameterMap app_parameters; std::string usage_entry; + uint32_t usage_entry_number; for (size_t i = 0; i < kNumberOfLicenses; i++) { DeviceFiles::LicenseState license_state; @@ -1985,7 +1998,7 @@ TEST_F(DeviceFilesTest, RetrieveLicenses) { &key_request, &key_response, &key_renewal_request, &key_renewal_response, &release_server_url, &playback_start_time, &last_playback_time, &grace_period_end_time, &app_parameters, - &usage_entry)); + &usage_entry, &usage_entry_number)); EXPECT_EQ(license_test_data[i].license_state, license_state); EXPECT_EQ(license_test_data[i].pssh_data, pssh_data); EXPECT_EQ(license_test_data[i].key_request, key_request); @@ -1997,6 +2010,7 @@ TEST_F(DeviceFilesTest, RetrieveLicenses) { EXPECT_EQ(license_test_data[i].grace_period_end_time, grace_period_end_time); EXPECT_EQ(license_test_data[i].usage_entry, usage_entry); + EXPECT_EQ(license_test_data[i].usage_entry_number, usage_entry_number); std::map::iterator itr; for (itr = app_parameters.begin(); itr != app_parameters.end(); ++itr) { @@ -2045,12 +2059,14 @@ TEST_F(DeviceFilesTest, AppParametersBackwardCompatibility) { std::string release_server_url; CdmAppParameterMap app_parameters; std::string usage_entry; + uint32_t usage_entry_number; EXPECT_TRUE(device_files.RetrieveLicense( test_data->key_set_id, &license_state, &pssh_data, &key_request, &key_response, &key_renewal_request, &key_renewal_response, &release_server_url, &playback_start_time, &last_playback_time, - &grace_period_end_time, &app_parameters, &usage_entry)); + &grace_period_end_time, &app_parameters, &usage_entry, + &usage_entry_number)); EXPECT_EQ(test_data->license_state, license_state); EXPECT_EQ(test_data->pssh_data, pssh_data); EXPECT_EQ(test_data->key_request, key_request); @@ -2062,6 +2078,7 @@ TEST_F(DeviceFilesTest, AppParametersBackwardCompatibility) { EXPECT_EQ(test_data->grace_period_end_time, grace_period_end_time); EXPECT_EQ(0u, app_parameters.size()); EXPECT_EQ(test_data->usage_entry, usage_entry); + EXPECT_EQ(test_data->usage_entry_number, usage_entry_number); } TEST_F(DeviceFilesTest, UpdateLicenseState) { @@ -2098,7 +2115,8 @@ TEST_F(DeviceFilesTest, UpdateLicenseState) { license_update_test_data[0].last_playback_time, license_update_test_data[0].grace_period_end_time, GetAppParameters(license_test_data[0].app_parameters), - license_update_test_data[0].usage_entry)); + license_update_test_data[0].usage_entry, + license_update_test_data[0].usage_entry_number)); EXPECT_TRUE(device_files.StoreLicense( license_update_test_data[0].key_set_id, @@ -2113,7 +2131,8 @@ TEST_F(DeviceFilesTest, UpdateLicenseState) { license_update_test_data[0].last_playback_time, license_update_test_data[0].grace_period_end_time, GetAppParameters(license_test_data[0].app_parameters), - license_update_test_data[0].usage_entry)); + license_update_test_data[0].usage_entry, + license_update_test_data[0].usage_entry_number)); } TEST_F(DeviceFilesTest, DeleteLicense) { @@ -2154,12 +2173,14 @@ TEST_F(DeviceFilesTest, DeleteLicense) { int64_t playback_start_time, last_playback_time, grace_period_end_time; CdmAppParameterMap app_parameters; std::string usage_entry; + uint32_t usage_entry_number; EXPECT_TRUE(device_files.RetrieveLicense( license_test_data[0].key_set_id, &license_state, &pssh_data, &key_request, &key_response, &key_renewal_request, &key_renewal_response, &release_server_url, &playback_start_time, &last_playback_time, - &grace_period_end_time, &app_parameters, &usage_entry)); + &grace_period_end_time, &app_parameters, &usage_entry, + &usage_entry_number)); EXPECT_EQ(license_test_data[0].license_state, license_state); EXPECT_EQ(license_test_data[0].pssh_data, pssh_data); EXPECT_EQ(license_test_data[0].key_request, key_request); @@ -2177,6 +2198,7 @@ TEST_F(DeviceFilesTest, DeleteLicense) { std::string::npos); } EXPECT_EQ(license_test_data[0].usage_entry, usage_entry); + EXPECT_EQ(license_test_data[0].usage_entry_number, usage_entry_number); EXPECT_TRUE(device_files.DeleteLicense(license_test_data[0].key_set_id)); EXPECT_FALSE(device_files.LicenseExists(license_test_data[0].key_set_id)); @@ -2259,6 +2281,7 @@ TEST_P(DeviceFilesUsageInfoTest, Store) { std::string license(GenerateRandomData(kLicenseLen)); std::string key_set_id(GenerateRandomData(kKeySetIdLen)); std::string usage_entry(GenerateRandomData(kUsageEntryLen)); + uint32_t usage_entry_number = 16; std::string path = device_base_path_ + DeviceFiles::GetUsageInfoFileName(app_id); @@ -2297,7 +2320,8 @@ TEST_P(DeviceFilesUsageInfoTest, Store) { EXPECT_TRUE(device_files.Init(kSecurityLevelL1)); ASSERT_TRUE(device_files.StoreUsageInfo(pst, license_request, license, app_id, - key_set_id, usage_entry)); + key_set_id, usage_entry, + usage_entry_number)); } TEST_P(DeviceFilesUsageInfoTest, Delete) { @@ -2512,7 +2536,7 @@ TEST_P(DeviceFilesUsageTableTest, Store) { TEST_P(DeviceFilesUsageTableTest, Read) { MockFileSystem file_system; MockFile file; - int index = GetParam(); + size_t index = GetParam(); std::string path = device_base_path_ + DeviceFiles::GetUsageTableFileName(); @@ -2532,14 +2556,14 @@ TEST_P(DeviceFilesUsageTableTest, Read) { EXPECT_TRUE(device_files.Init(kSecurityLevelL1)); std::vector usage_entry_info; - std::string usage_table_header; + CdmUsageTableHeader usage_table_header; ASSERT_TRUE(device_files.RetrieveUsageTableInfo(&usage_table_header, &usage_entry_info)); EXPECT_EQ(kUsageTableInfoTestData[index].usage_table_header, usage_table_header); EXPECT_EQ(index + 1, usage_entry_info.size()); - for (int i = 0; i <= index; ++i) { + for (size_t i = 0; i <= index; ++i) { EXPECT_EQ(kUsageEntriesTestData[i].storage_type, usage_entry_info[i].storage_type); if (usage_entry_info[i].storage_type == DeviceFiles::kStorageLicense) {