diff --git a/libwvdrmengine/cdm/core/include/license.h b/libwvdrmengine/cdm/core/include/license.h index ef15142b..0cb57748 100644 --- a/libwvdrmengine/cdm/core/include/license.h +++ b/libwvdrmengine/cdm/core/include/license.h @@ -50,7 +50,7 @@ class CdmLicense { const CdmKeyResponse& license_response, const CdmKeyResponse& license_renewal_response, int64_t playback_start_time, int64_t last_playback_time, - int64_t grace_period_end_time); + int64_t grace_period_end_time, CdmSession* cdm_session); virtual bool RestoreLicenseForRelease(const CdmKeyMessage& license_request, const CdmKeyResponse& license_response); virtual bool HasInitData() { return stored_init_data_.get(); } diff --git a/libwvdrmengine/cdm/core/src/cdm_session.cpp b/libwvdrmengine/cdm/core/src/cdm_session.cpp index 9b188be7..258623ee 100644 --- a/libwvdrmengine/cdm/core/src/cdm_session.cpp +++ b/libwvdrmengine/cdm/core/src/cdm_session.cpp @@ -240,7 +240,8 @@ CdmResponseType CdmSession::RestoreOfflineSession( } else { if (!license_parser_->RestoreOfflineLicense( key_request_, key_response_, offline_key_renewal_response_, - playback_start_time, last_playback_time, grace_period_end_time)) { + playback_start_time, last_playback_time, grace_period_end_time, + this)) { return RESTORE_OFFLINE_LICENSE_ERROR_2; } } diff --git a/libwvdrmengine/cdm/core/src/license.cpp b/libwvdrmengine/cdm/core/src/license.cpp index d1b659b2..07c20a52 100644 --- a/libwvdrmengine/cdm/core/src/license.cpp +++ b/libwvdrmengine/cdm/core/src/license.cpp @@ -628,7 +628,8 @@ bool CdmLicense::RestoreOfflineLicense( const CdmKeyMessage& license_request, const CdmKeyResponse& license_response, const CdmKeyResponse& license_renewal_response, int64_t playback_start_time, - int64_t last_playback_time, int64_t grace_period_end_time) { + int64_t last_playback_time, int64_t grace_period_end_time, + CdmSession* cdm_session) { if (license_request.empty() || license_response.empty()) { LOGE( "CdmLicense::RestoreOfflineLicense: key_request or response empty: " @@ -670,9 +671,15 @@ bool CdmLicense::RestoreOfflineLicense( } if (!provider_session_token_.empty()) { + if (cdm_session) { + CdmResponseType status = cdm_session->UpdateUsageEntryInformation(); + if (NO_ERROR != status) return false; + } + std::string usage_report; CryptoSession::UsageDurationStatus usage_duration_status = CryptoSession::kUsageDurationsInvalid; + int64_t seconds_since_started, seconds_since_last_played; sts = crypto_session_->GenerateUsageReport( provider_session_token_, &usage_report, &usage_duration_status, diff --git a/libwvdrmengine/cdm/test/request_license_test.cpp b/libwvdrmengine/cdm/test/request_license_test.cpp index d90eeb5e..420ae783 100644 --- a/libwvdrmengine/cdm/test/request_license_test.cpp +++ b/libwvdrmengine/cdm/test/request_license_test.cpp @@ -2019,55 +2019,6 @@ TEST_F(WvCdmRequestLicenseTest, VerifyKeyRequestResponse(g_license_server, client_auth); } -TEST_F(WvCdmRequestLicenseTest, ExpiryOnReleaseOfflineKeyTest) { - Unprovision(); - Provision(kLevelDefault); - - // override default settings unless configured through the command line - std::string key_id; - std::string client_auth; - GetOfflineConfiguration(&key_id, &client_auth); - - decryptor_.OpenSession(g_key_system, NULL, kDefaultCdmIdentifier, NULL, - &session_id_); - GenerateKeyRequest(key_id, kLicenseTypeOffline); - VerifyKeyRequestResponse(g_license_server, client_auth); - - CdmKeySetId key_set_id = key_set_id_; - EXPECT_FALSE(key_set_id_.empty()); - decryptor_.CloseSession(session_id_); - - session_id_.clear(); - key_set_id_.clear(); - StrictMock listener; - decryptor_.OpenSession(g_key_system, NULL, kDefaultCdmIdentifier, &listener, - &session_id_); - CdmSessionId restore_session_id = session_id_; - EXPECT_CALL( - listener, - OnSessionKeysChange( - restore_session_id, - AllOf(Each(Pair(_, kKeyStatusUsable)), Not(IsEmpty())), true)); - EXPECT_CALL(listener, OnExpirationUpdate(restore_session_id, _)); - EXPECT_EQ(wvcdm::KEY_ADDED, - decryptor_.RestoreKey(restore_session_id, key_set_id)); - - session_id_.clear(); - key_set_id_.clear(); - // Maybe called since VerifyKeyRequestResponse could take some time. - EXPECT_CALL(listener, OnSessionRenewalNeeded(restore_session_id)) - .Times(AtLeast(0)); - EXPECT_CALL( - listener, - OnSessionKeysChange( - restore_session_id, - AllOf(Each(Pair(_, kKeyStatusExpired)), Not(IsEmpty())), false)); - GenerateKeyRelease(key_set_id); - key_set_id_ = key_set_id; - VerifyKeyRequestResponse(g_license_server, client_auth); - decryptor_.CloseSession(restore_session_id); -} - // This test verifies that repeated generation of the key release message // for the same key_set_id results in the previous session being // deallocated (rather than leaked) and a new one allocated.