Source release 17.1.0
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
// Copyright 2018 Google LLC. All Rights Reserved. This file and proprietary
|
||||
// source code may only be used and distributed under the Widevine Master
|
||||
// License Agreement.
|
||||
// source code may only be used and distributed under the Widevine License
|
||||
// Agreement.
|
||||
|
||||
#ifndef WVCDM_CORE_CDM_SESSION_H_
|
||||
#define WVCDM_CORE_CDM_SESSION_H_
|
||||
@@ -33,9 +33,9 @@ class CdmSession {
|
||||
public:
|
||||
// Creates a new instance of the CdmSession with the given |file_system|
|
||||
// and |metrics| parameters. Both parameters are owned by the caller and
|
||||
// must remain in scope througout the scope of the new instance. |metrics|
|
||||
// must remain in scope throughout the scope of the new instance. |metrics|
|
||||
// must not be null.
|
||||
CdmSession(FileSystem* file_system,
|
||||
CdmSession(wvutil::FileSystem* file_system,
|
||||
std::shared_ptr<metrics::SessionMetrics> metrics);
|
||||
virtual ~CdmSession();
|
||||
|
||||
@@ -49,7 +49,7 @@ class CdmSession {
|
||||
// cached at the time Init() is called.
|
||||
virtual CdmResponseType Init(CdmClientPropertySet* cdm_client_property_set);
|
||||
|
||||
// Initializes this instance of CdmSession with the given parmeters.
|
||||
// Initializes this instance of CdmSession with the given parameters.
|
||||
// All parameters are owned by the caller.
|
||||
//
|
||||
// |cdm_client_property_set| is caller owned, may be null, but must be in
|
||||
@@ -60,9 +60,13 @@ class CdmSession {
|
||||
//
|
||||
// |event_listener| is caller owned, may be null, but must be in scope as long
|
||||
// as the session is in scope.
|
||||
//
|
||||
// |forced_level3|_is used to specify whether the "default" security level
|
||||
// should always use L3 even if L1 is available.
|
||||
virtual CdmResponseType Init(CdmClientPropertySet* cdm_client_property_set,
|
||||
const CdmSessionId* forced_session_id,
|
||||
WvCdmEventListener* event_listener);
|
||||
WvCdmEventListener* event_listener,
|
||||
bool forced_level3);
|
||||
|
||||
// Restores an offline session identified by the |key_set_id| and
|
||||
// |license_type|. The |error_detail| will be filled with an internal error
|
||||
@@ -137,7 +141,7 @@ class CdmSession {
|
||||
virtual void OnKeyReleaseEvent(const CdmKeySetId& key_set_id);
|
||||
|
||||
virtual void GetApplicationId(std::string* app_id);
|
||||
virtual SecurityLevel GetRequestedSecurityLevel() {
|
||||
virtual RequestedSecurityLevel GetRequestedSecurityLevel() {
|
||||
return requested_security_level_;
|
||||
}
|
||||
virtual CdmSecurityLevel GetSecurityLevel() { return security_level_; }
|
||||
@@ -160,8 +164,8 @@ class CdmSession {
|
||||
license_parser_->provider_session_token().size() > 0);
|
||||
}
|
||||
|
||||
virtual CdmUsageSupportType get_usage_support_type() {
|
||||
return usage_support_type_;
|
||||
virtual bool supports_usage_info() const {
|
||||
return usage_table_header_ != nullptr;
|
||||
}
|
||||
|
||||
// This method will remove keys by resetting crypto resources and
|
||||
@@ -219,11 +223,25 @@ class CdmSession {
|
||||
private:
|
||||
friend class CdmSessionTest;
|
||||
|
||||
// Both these methods will attempt to load wrapped key material and
|
||||
// cache values in |drm_certificate_| and |wrapped_private_key_|
|
||||
// if successful.
|
||||
// This method will load the key from persistent storage.
|
||||
CdmResponseType LoadPrivateKey();
|
||||
// This method will load the specified key if valid or otherwise load
|
||||
// the information from the legacy certificate.
|
||||
CdmResponseType LoadPrivateOrLegacyKey(
|
||||
const std::string& certificate,
|
||||
const CryptoWrappedKey& wrapped_private_key);
|
||||
|
||||
CdmResponseType LoadPrivateKey(const std::string& certificate,
|
||||
const CryptoWrappedKey& wrapped_private_key);
|
||||
|
||||
bool GenerateKeySetId(bool atsc_mode_enabled, CdmKeySetId* key_set_id);
|
||||
|
||||
CdmResponseType StoreLicense();
|
||||
|
||||
bool StoreLicense(DeviceFiles::LicenseState state, int* error_detail);
|
||||
bool StoreLicense(CdmOfflineLicenseState state, int* error_detail);
|
||||
|
||||
bool UpdateUsageInfo();
|
||||
|
||||
@@ -239,12 +257,6 @@ class CdmSession {
|
||||
// true otherwise.
|
||||
bool VerifyOfflineUsageEntry();
|
||||
|
||||
// On android, we previously permitted a license to be loaded and restored
|
||||
// in the same session. This method releases resources so that
|
||||
// CdmSession::Init can safely be invoked before a new license is restored.
|
||||
// TODO(b/161865160): Investigate whether we can dispense with this scenario.
|
||||
virtual CdmResponseType ReleaseOfflineResources();
|
||||
|
||||
// These setters are for testing only. Takes ownership of the pointers.
|
||||
void set_license_parser(CdmLicense* license_parser);
|
||||
void set_crypto_session(CryptoSession* crypto_session);
|
||||
@@ -254,14 +266,14 @@ class CdmSession {
|
||||
// instance variables
|
||||
std::shared_ptr<metrics::SessionMetrics> metrics_;
|
||||
metrics::CryptoMetrics* crypto_metrics_;
|
||||
metrics::TimerMetric life_span_;
|
||||
metrics::TimerMetric license_request_latency_;
|
||||
metrics::Timer life_span_;
|
||||
metrics::Timer license_request_latency_;
|
||||
CdmKeyRequestType key_request_type_;
|
||||
|
||||
bool initialized_;
|
||||
bool closed_; // Session closed, but final shared_ptr has not been released.
|
||||
CdmSessionId session_id_;
|
||||
FileSystem* file_system_;
|
||||
wvutil::FileSystem* file_system_;
|
||||
std::unique_ptr<CdmLicense> license_parser_;
|
||||
std::unique_ptr<CryptoSession> crypto_session_;
|
||||
std::unique_ptr<PolicyEngine> policy_engine_;
|
||||
@@ -271,18 +283,33 @@ class CdmSession {
|
||||
bool is_release_;
|
||||
bool is_temporary_;
|
||||
CdmSecurityLevel security_level_;
|
||||
SecurityLevel requested_security_level_;
|
||||
RequestedSecurityLevel requested_security_level_;
|
||||
// If |forced_level3_|, |security_level_| and |requested_security_level_|
|
||||
// MUST be set to kSecurityLevelL3 and kLevel3, respectively.
|
||||
bool forced_level3_ = false;
|
||||
CdmAppParameterMap app_parameters_;
|
||||
bool atsc_mode_enabled_ = false;
|
||||
std::string drm_certificate_;
|
||||
CryptoWrappedKey wrapped_private_key_;
|
||||
|
||||
// decryption flags
|
||||
bool is_initial_decryption_;
|
||||
bool has_decrypted_since_last_report_; // ... last report to policy engine.
|
||||
// Decryption flags.
|
||||
// Indiates that the next call to Decrypt will be the first for this
|
||||
// license.
|
||||
bool is_initial_decryption_ = true;
|
||||
// Set to true if a successful call to Decrypt has occurred. Cleared
|
||||
// when the policy engine has been notified about successful
|
||||
// decryption.
|
||||
bool has_decrypted_since_last_report_ = false;
|
||||
// Set to true if the last call to Decrypt resulted in a failure.
|
||||
// Cleared when the call to decrypt has succeeded.
|
||||
bool last_decrypt_failed_ = false;
|
||||
|
||||
// Usage related flags and data
|
||||
bool is_initial_usage_update_;
|
||||
bool is_usage_update_needed_;
|
||||
CdmUsageSupportType usage_support_type_;
|
||||
UsageTableHeader* usage_table_header_;
|
||||
// Only assign |usage_table_header_| if capable of supporting usage
|
||||
// information.
|
||||
UsageTableHeader* usage_table_header_ = nullptr;
|
||||
uint32_t usage_entry_number_;
|
||||
CdmUsageEntry usage_entry_;
|
||||
std::string usage_provider_session_token_;
|
||||
@@ -300,18 +327,6 @@ class CdmSession {
|
||||
// license type release and offline related information
|
||||
CdmKeySetId key_set_id_;
|
||||
|
||||
// TODO(b/161865160): Use these variables to cache Init parameters. Remove
|
||||
// when b/ has been addressed.
|
||||
// |cdm_client_property_set_| and |event_listener_| point to a data
|
||||
// member of WVDrmPlugin or WVDrmPlugin itself. It is safe for CdmSession
|
||||
// to make use of these objects without taking ownership since WVDrmPlugin
|
||||
// lifetime exceeds CdmSession (WVDrmPlugin indirectly owns CdmSession
|
||||
// objects). These pointers if set, should be valid till CdmSession
|
||||
// destruction.
|
||||
CdmClientPropertySet* cdm_client_property_set_ = nullptr;
|
||||
CdmSessionId* forced_session_id_ = nullptr;
|
||||
CdmSessionId forced_session_id_value_;
|
||||
WvCdmEventListener* event_listener_ = nullptr;
|
||||
bool has_license_been_loaded_ = false;
|
||||
bool has_license_been_restored_ = false;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user