Support renew on load

[ Merge of http://go/wvgerrit/164477 ]

Renew on load is supported when OEMCrypto is >= v18.
A new class, policy_timer_v18 has been added to support this
functionality. In addtition,offsets of renewal from first decrypt
and license start are also included.

Bug: 256038127
Test: GtsMediaTestCases
Change-Id: Ib18af3096d1d8807af6a03fd2f84783123ab6b6d
This commit is contained in:
Rahul Frias
2022-12-21 17:28:59 -08:00
parent 78a4902214
commit ab91cf934e
3 changed files with 144 additions and 0 deletions

View File

@@ -0,0 +1,56 @@
// Copyright 2022 Google LLC. All Rights Reserved. This file and proprietary
// source code may only be used and distributed under the Widevine License
// Agreement.
#ifndef WVCDM_CORE_POLICY_TIMERS_V18_H_
#define WVCDM_CORE_POLICY_TIMERS_V18_H_
#include "disallow_copy_and_assign.h"
#include "license_protocol.pb.h"
#include "policy_timers.h"
#include "wv_cdm_types.h"
namespace wvcdm {
// OEMCrypto v18 includes support for renewing licenses on load by using
// |initial_renewal_delay_base| and TimerDelayBase.
//
// Backward compatibility may be needed if
// * OEMCrypto has not been upgraded to v18
// * Licenses were persisted before the device was upgraded to v18
class PolicyTimersV18 : public PolicyTimers {
public:
PolicyTimersV18() {}
~PolicyTimersV18() override {}
// UpdateLicense is used in handling a license response, a renewal response,
// or when restoring or releasing a persistent license.
// In a renewal the response may only contain policy fields that have
// changed. In this case an exact copy is not what we want to happen.
// |renewal_start_time_| is set to the time mentioned in the renewal
// response.
// UpdateLicense will return false if |license_start_time| is not
// present or playback is not allowed due to policy or timer duration
// expiration.
bool UpdateLicense(int64_t current_time,
const video_widevine::License& license) override;
// Call this on first decrypt to set the start of playback.
void BeginDecryption(int64_t current_time) override;
// Renewal related methods
bool HasRenewalDelayExpired(int64_t current_time) override;
private:
// Indicates whether this is an initial license or a renewal
bool license_renewal_ = false;
bool renew_on_first_decrypt_ = false;
CORE_DISALLOW_COPY_AND_ASSIGN(PolicyTimersV18);
};
} // namespace wvcdm
#endif // WVCDM_CORE_POLICY_TIMERS_V18_H_