Merge changes Ib18af309,Iebd58823,Ic3a503ef
* changes: Support renew on load Move functionality to policy_timer. Remove references to policy_timers_v15
This commit is contained in:
@@ -10,6 +10,7 @@
|
||||
|
||||
#include "disallow_copy_and_assign.h"
|
||||
#include "license_protocol.pb.h"
|
||||
#include "wv_cdm_constants.h"
|
||||
#include "wv_cdm_types.h"
|
||||
|
||||
namespace wvcdm {
|
||||
@@ -43,20 +44,45 @@ class PolicyTimers {
|
||||
// For offline save and restore
|
||||
virtual int64_t GetPlaybackStartTime() { return playback_start_time_; }
|
||||
virtual int64_t GetLastPlaybackTime() { return last_playback_time_; }
|
||||
virtual int64_t GetGracePeriodEndTime() = 0;
|
||||
// This is a legacy field for offline licenses. Since no grace period is
|
||||
// supported return a default value.
|
||||
virtual int64_t GetGracePeriodEndTime() { return 0; }
|
||||
virtual void RestorePlaybackTimes(int64_t current_time,
|
||||
int64_t playback_start_time,
|
||||
int64_t last_playback_time,
|
||||
int64_t grace_period_end_time) = 0;
|
||||
int64_t grace_period_end_time);
|
||||
|
||||
virtual bool HasPlaybackStarted(int64_t current_time) = 0;
|
||||
virtual bool HasPlaybackStarted(int64_t /* current_time */) {
|
||||
return playback_start_time_ != 0;
|
||||
}
|
||||
|
||||
// For licenses that support core messages, evaluation of only rental and
|
||||
// playback durations are needed.
|
||||
virtual bool HasLicenseOrRentalOrPlaybackDurationExpired(
|
||||
int64_t current_time) = 0;
|
||||
virtual bool HasPassedGracePeriod(int64_t current_time) = 0;
|
||||
int64_t current_time) {
|
||||
return HasRentalOrPlaybackDurationExpired(current_time);
|
||||
}
|
||||
virtual bool HasPassedGracePeriod(int64_t /* current_time */) { return true; }
|
||||
|
||||
// This returns
|
||||
// * before playback begins: the time remaining on |rental_duration_seconds|
|
||||
// * after playback begins:
|
||||
// - |soft_enforce_playback_duration| is true: the time remaining on
|
||||
// |playback_duration_seconds|
|
||||
// - |soft_enforce_playback_duration| is false: the minimum
|
||||
// of the time remaining on |rental_duration_seconds| or
|
||||
// |playback_duration_seconds|
|
||||
//
|
||||
// |license_duration_seconds| is ignored with the introduction of core
|
||||
// messages
|
||||
virtual int64_t GetLicenseOrRentalOrPlaybackDurationRemaining(
|
||||
int64_t current_time) = 0;
|
||||
virtual int64_t GetLicenseOrRentalDurationRemaining(int64_t current_time) = 0;
|
||||
int64_t current_time);
|
||||
// This is only used in Query. This should return the time remaining on
|
||||
// |rental_duration_seconds|.
|
||||
virtual int64_t GetLicenseOrRentalDurationRemaining(int64_t current_time) {
|
||||
return GetRentalDurationRemaining(current_time);
|
||||
};
|
||||
|
||||
// This is only used in Query. This should return |playback_duration_seconds|
|
||||
// before playback begins or the time remaining on
|
||||
// |playback_duration_seconds| after playback begins.
|
||||
@@ -72,7 +98,7 @@ class PolicyTimers {
|
||||
virtual bool UpdateExpirationTime(int64_t current_time, int64_t* expiry_time);
|
||||
|
||||
// Renewal related methods
|
||||
virtual bool HasRenewalDelayExpired(int64_t current_time);
|
||||
virtual bool HasRenewalDelayExpired(int64_t current_time) = 0;
|
||||
virtual bool HasRenewalRetryIntervalExpired(int64_t current_time);
|
||||
virtual void UpdateRenewalRequest(int64_t current_time);
|
||||
virtual bool HasRenewalRecoveryDurationExpired(int64_t current_time);
|
||||
@@ -90,11 +116,11 @@ class PolicyTimers {
|
||||
was_expired_on_load_(false) {}
|
||||
|
||||
// Gets the clock time that the license expires based on whether we have
|
||||
// started playing.
|
||||
// started playing. This takes into account GetHardLicenseExpiryTime.
|
||||
virtual int64_t GetExpiryTime(int64_t current_time,
|
||||
bool ignore_soft_enforce_playback_duration) = 0;
|
||||
bool ignore_soft_enforce_playback_duration);
|
||||
|
||||
virtual int64_t GetRenewalStartTime() = 0;
|
||||
virtual int64_t GetRenewalStartTime() { return renewal_start_time_; }
|
||||
|
||||
// This is the current policy information for this license. This gets updated
|
||||
// as license renewals occur.
|
||||
@@ -105,12 +131,20 @@ class PolicyTimers {
|
||||
int64_t last_playback_time_;
|
||||
int64_t last_expiry_time_;
|
||||
int64_t last_expiry_time_set_;
|
||||
int64_t renewal_start_time_ = 0;
|
||||
int64_t next_renewal_time_;
|
||||
|
||||
// Indicates whether a persistent license was expired when loaded
|
||||
bool was_expired_on_load_;
|
||||
|
||||
private:
|
||||
// Gets the clock time that the rental duration or playback will expire.
|
||||
virtual int64_t GetRentalExpiryTime(int64_t current_time);
|
||||
virtual int64_t GetPlaybackExpiryTime(
|
||||
int64_t current_time, bool ignore_soft_enforce_playback_duration);
|
||||
bool HasRentalOrPlaybackDurationExpired(int64_t current_time);
|
||||
virtual int64_t GetRentalDurationRemaining(int64_t current_time);
|
||||
|
||||
CORE_DISALLOW_COPY_AND_ASSIGN(PolicyTimers);
|
||||
};
|
||||
|
||||
|
||||
@@ -1,97 +0,0 @@
|
||||
// Copyright 2020 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_V15_H_
|
||||
#define WVCDM_CORE_POLICY_TIMERS_V15_H_
|
||||
|
||||
#include <memory>
|
||||
#include <string>
|
||||
|
||||
#include "disallow_copy_and_assign.h"
|
||||
#include "license_protocol.pb.h"
|
||||
#include "policy_timers.h"
|
||||
#include "wv_cdm_types.h"
|
||||
|
||||
namespace wvcdm {
|
||||
|
||||
// OEMCrypto v16 and core messages introduced changes to how duration values
|
||||
// and clocks should be evaluated. This class provides backward compatibility
|
||||
// for licenses that do not include a core message. Durations are handled
|
||||
// in the same way as in earlier releases.
|
||||
//
|
||||
// Backward compatibility may be needed if
|
||||
// * OEMCrypto has not been upgraded to v16
|
||||
// * Licenses were persisted before the device was upgraded to v16
|
||||
// * License service does not yet support core messages
|
||||
|
||||
class PolicyTimersV15 : public PolicyTimers {
|
||||
public:
|
||||
PolicyTimersV15() : grace_period_end_time_(0) {}
|
||||
|
||||
~PolicyTimersV15() 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.
|
||||
// |license_start_time_| is updated 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;
|
||||
|
||||
// for offline save and restore
|
||||
int64_t GetGracePeriodEndTime() override { return grace_period_end_time_; }
|
||||
|
||||
// for offline save and restore
|
||||
void RestorePlaybackTimes(int64_t current_time, int64_t playback_start_time,
|
||||
int64_t last_playback_time,
|
||||
int64_t grace_period_end_time) override;
|
||||
|
||||
bool HasPlaybackStarted(int64_t current_time) override;
|
||||
bool HasLicenseOrRentalOrPlaybackDurationExpired(
|
||||
int64_t current_time) override;
|
||||
bool HasPassedGracePeriod(int64_t current_time) override;
|
||||
|
||||
// This returns
|
||||
// * for streaming licenses: the time remaining on |license_duration_seconds|
|
||||
// * for persistent licenses: the time remaining on |rental_duration_seconds|
|
||||
// before playback begins or the time remaining on
|
||||
// |playback_duration_seconds| after.
|
||||
int64_t GetLicenseOrRentalOrPlaybackDurationRemaining(
|
||||
int64_t current_time) override;
|
||||
// This is only used in Query. This should return the time remaining on
|
||||
// |license_duration_seconds| for streaming licenses and
|
||||
// |rental_duration_seconds| for persistent licenses.
|
||||
int64_t GetLicenseOrRentalDurationRemaining(int64_t current_time) override;
|
||||
|
||||
protected:
|
||||
// Gets the clock time that the license expires based on whether we have
|
||||
// started playing. This takes into account GetHardLicenseExpiryTime.
|
||||
int64_t GetExpiryTime(int64_t current_time,
|
||||
bool ignore_soft_enforce_playback_duration) override;
|
||||
|
||||
int64_t GetRenewalStartTime() override { return license_start_time_; }
|
||||
|
||||
private:
|
||||
// Gets the clock time that the license expires. This is the hard limit that
|
||||
// all license types must obey at all times.
|
||||
int64_t GetHardLicenseExpiryTime();
|
||||
// Gets the clock time that the rental duration will expire, using the license
|
||||
// duration if one is not present.
|
||||
int64_t GetRentalExpiryTime();
|
||||
|
||||
int64_t grace_period_end_time_;
|
||||
|
||||
CORE_DISALLOW_COPY_AND_ASSIGN(PolicyTimersV15);
|
||||
};
|
||||
|
||||
} // namespace wvcdm
|
||||
|
||||
#endif // WVCDM_CORE_POLICY_TIMERS_V15_H_
|
||||
@@ -43,68 +43,10 @@ class PolicyTimersV16 : public PolicyTimers {
|
||||
// Call this on first decrypt to set the start of playback.
|
||||
void BeginDecryption(int64_t current_time) override;
|
||||
|
||||
// This is a legacy field for offline licenses. Since no grace period is
|
||||
// supported return a default value.
|
||||
int64_t GetGracePeriodEndTime() override { return 0; }
|
||||
|
||||
// For offline save and restore.
|
||||
void RestorePlaybackTimes(int64_t current_time, int64_t playback_start_time,
|
||||
int64_t last_playback_time,
|
||||
int64_t grace_period_end_time) override;
|
||||
|
||||
bool HasPlaybackStarted(int64_t /* current_time */) override {
|
||||
return playback_start_time_ != 0;
|
||||
}
|
||||
// For licenses that support core messages, evaluation of only rental and
|
||||
// playback durations are needed.
|
||||
bool HasLicenseOrRentalOrPlaybackDurationExpired(
|
||||
int64_t current_time) override {
|
||||
return HasRentalOrPlaybackDurationExpired(current_time);
|
||||
}
|
||||
bool HasPassedGracePeriod(int64_t /* current_time */) override {
|
||||
return true;
|
||||
}
|
||||
|
||||
// This returns
|
||||
// * before playback begins: the time remaining on |rental_duration_seconds|
|
||||
// * after playback begins:
|
||||
// - |soft_enforce_playback_duration| is true: the time remaining on
|
||||
// |playback_duration_seconds|
|
||||
// - |soft_enforce_playback_duration| is false: the minimum
|
||||
// of the time remaining on |rental_duration_seconds| or
|
||||
// |playback_duration_seconds|
|
||||
//
|
||||
// |license_duration_seconds| is ignored with the introduction of core
|
||||
// messages
|
||||
int64_t GetLicenseOrRentalOrPlaybackDurationRemaining(
|
||||
int64_t current_time) override;
|
||||
// This is only used in Query. This should return the time remaining on
|
||||
// |rental_duration_seconds|.
|
||||
int64_t GetLicenseOrRentalDurationRemaining(int64_t current_time) override {
|
||||
return GetRentalDurationRemaining(current_time);
|
||||
};
|
||||
|
||||
// Renewal related methods
|
||||
bool HasRenewalDelayExpired(int64_t current_time) override;
|
||||
|
||||
protected:
|
||||
// Gets the clock time that the license expires based on whether we have
|
||||
// started playing. This takes into account GetHardLicenseExpiryTime.
|
||||
int64_t GetExpiryTime(int64_t current_time,
|
||||
bool ignore_soft_enforce_playback_duration) override;
|
||||
|
||||
int64_t GetRenewalStartTime() override { return renewal_start_time_; }
|
||||
|
||||
private:
|
||||
// Gets the clock time that the rental duration or playback will expire.
|
||||
int64_t GetRentalExpiryTime(int64_t current_time);
|
||||
int64_t GetPlaybackExpiryTime(int64_t current_time,
|
||||
bool ignore_soft_enforce_playback_duration);
|
||||
|
||||
bool HasRentalOrPlaybackDurationExpired(int64_t current_time);
|
||||
int64_t GetRentalDurationRemaining(int64_t current_time);
|
||||
|
||||
int64_t renewal_start_time_ = 0;
|
||||
|
||||
CORE_DISALLOW_COPY_AND_ASSIGN(PolicyTimersV16);
|
||||
};
|
||||
|
||||
|
||||
56
libwvdrmengine/cdm/core/include/policy_timers_v18.h
Normal file
56
libwvdrmengine/cdm/core/include/policy_timers_v18.h
Normal 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_
|
||||
Reference in New Issue
Block a user