// 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 #include "license_protocol.pb.h" #include "policy_timers.h" #include "wv_cdm_types.h" #include "wv_class_utils.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() = default; WVCDM_DISALLOW_COPY_AND_MOVE(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; bool can_renew_ = false; }; // class PolicyTimersV18 } // namespace wvcdm #endif // WVCDM_CORE_POLICY_TIMERS_V18_H_