* Extend CdmLicense's stored_init_data_ [ Merge of http://go/wvgerrit/14661 ] CdmLicense will store init data when a server cert must be provisioned. After provisioning, the original init data can be used to generate the originally-intended license request. To do this before, the caller had to call CdmSession's GenerateKeyRequest with an empty InitializationData object. However, the init data's type still had to be set, as did the license type. This CL allows the caller to use a truly empty InitializationData without a type. To permit this, CdmLicense now stores a full InitializationData object, rather than just a copy of it's data field. With this CL, the caller also avoid storing the original license type. To accomplish this, CdmSession uses the already-set is_offline_ and is_release_ flags from the original call to reconstruct the intended license type. The caller uses the new type kLicenseTypeDeferred. To facilitate storing whole InitializationData objects, they are now copyable. This ultimately simplifies server cert code for the new CE CDM. * Store service certs in Properties [ Merge of http://go/wvgerrit/14664 ] This allows CE devices to mimic the Chrome CDM's behavior of sharing server certs between sessions. This also affects Android behavior. Previously, provisioned service certificates were per-session, while explicitly-set service certs were per-DRM-plugin. Now, both are per-DRM-plugin. A DRM plugin is associated with a mediaDrm object. Content providers will still be able to retrieve and use different certificates. The change here requires an app, that wishes to use different provisioned service certificates will have to use multiple mediaDrm objects. This is an unlikely scenario. Change-Id: If2586932784ed046ecab72b5720ff30547e84b97
116 lines
4.3 KiB
C++
116 lines
4.3 KiB
C++
// Copyright 2013 Google Inc. All Rights Reserved.
|
|
|
|
#ifndef WVCDM_CORE_PROPERTIES_H_
|
|
#define WVCDM_CORE_PROPERTIES_H_
|
|
|
|
#include <map>
|
|
#include <string>
|
|
|
|
#include "cdm_client_property_set.h"
|
|
#include "lock.h"
|
|
#include "scoped_ptr.h"
|
|
#include "wv_cdm_types.h"
|
|
|
|
#if defined(UNIT_TEST)
|
|
# include <gtest/gtest_prod.h>
|
|
#endif
|
|
|
|
namespace wvcdm {
|
|
|
|
typedef std::map<CdmSessionId, CdmClientPropertySet*>
|
|
CdmClientPropertySetMap;
|
|
|
|
// This class saves information about features and properties enabled
|
|
// for a given platform. At initialization it initializes properties from
|
|
// property_configuration.h. That file specifies features selected for each
|
|
// platform. Core CDM can then query enabled features though specific getter
|
|
// methods.
|
|
// Setter methods are provided but their only planned use is for testing.
|
|
class Properties {
|
|
public:
|
|
static void Init();
|
|
|
|
static inline bool oem_crypto_use_secure_buffers() {
|
|
return oem_crypto_use_secure_buffers_;
|
|
}
|
|
static inline bool oem_crypto_use_fifo() { return oem_crypto_use_fifo_; }
|
|
static inline bool oem_crypto_use_userspace_buffers() {
|
|
return oem_crypto_use_userspace_buffers_;
|
|
}
|
|
static inline bool use_certificates_as_identification() {
|
|
return use_certificates_as_identification_;
|
|
}
|
|
static inline bool security_level_path_backward_compatibility_support() {
|
|
return security_level_path_backward_compatibility_support_;
|
|
}
|
|
static bool GetCompanyName(std::string* company_name);
|
|
static bool GetModelName(std::string* model_name);
|
|
static bool GetArchitectureName(std::string* arch_name);
|
|
static bool GetDeviceName(std::string* device_name);
|
|
static bool GetProductName(std::string* product_name);
|
|
static bool GetBuildInfo(std::string* build_info);
|
|
static bool GetWVCdmVersion(std::string* version);
|
|
static bool GetDeviceFilesBasePath(CdmSecurityLevel security_level,
|
|
std::string* base_path);
|
|
static bool GetFactoryKeyboxPath(std::string* keybox);
|
|
static bool GetOEMCryptoPath(std::string* library_name);
|
|
static bool AlwaysUseKeySetIds();
|
|
|
|
static bool GetSecurityLevelDirectories(std::vector<std::string>* dirs);
|
|
static bool GetApplicationId(const CdmSessionId& session_id,
|
|
std::string* app_id);
|
|
static bool GetServiceCertificate(const CdmSessionId& session_id,
|
|
std::string* service_certificate);
|
|
static bool SetServiceCertificate(const CdmSessionId& session_id,
|
|
const std::string& service_certificate);
|
|
static bool UsePrivacyMode(const CdmSessionId& session_id);
|
|
static uint32_t GetSessionSharingId(const CdmSessionId& session_id);
|
|
|
|
static bool AddSessionPropertySet(const CdmSessionId& session_id,
|
|
CdmClientPropertySet* property_set);
|
|
static bool RemoveSessionPropertySet(const CdmSessionId& session_id);
|
|
|
|
private:
|
|
static CdmClientPropertySet* GetCdmClientPropertySet(
|
|
const CdmSessionId& session_id);
|
|
static void set_oem_crypto_use_secure_buffers(bool flag) {
|
|
oem_crypto_use_secure_buffers_ = flag;
|
|
}
|
|
static void set_oem_crypto_use_fifo(bool flag) {
|
|
oem_crypto_use_fifo_ = flag;
|
|
}
|
|
static void set_oem_crypto_use_userspace_buffers(bool flag) {
|
|
oem_crypto_use_userspace_buffers_ = flag;
|
|
}
|
|
static void set_use_certificates_as_identification(bool flag) {
|
|
use_certificates_as_identification_ = flag;
|
|
}
|
|
static void set_security_level_path_backward_compatibility_support(
|
|
bool flag) {
|
|
security_level_path_backward_compatibility_support_ = flag;
|
|
}
|
|
|
|
#if defined(UNIT_TEST)
|
|
FRIEND_TEST(CdmSessionTest, InitWithCertificate);
|
|
FRIEND_TEST(CdmSessionTest, InitWithKeybox);
|
|
FRIEND_TEST(CdmSessionTest, ReInitFail);
|
|
FRIEND_TEST(CdmSessionTest, InitFailCryptoError);
|
|
FRIEND_TEST(CdmSessionTest, InitNeedsProvisioning);
|
|
FRIEND_TEST(CdmLicenseTest, PrepareKeyRequestValidation);
|
|
#endif
|
|
|
|
private:
|
|
static bool oem_crypto_use_secure_buffers_;
|
|
static bool oem_crypto_use_fifo_;
|
|
static bool oem_crypto_use_userspace_buffers_;
|
|
static bool use_certificates_as_identification_;
|
|
static bool security_level_path_backward_compatibility_support_;
|
|
static scoped_ptr<CdmClientPropertySetMap> session_property_set_;
|
|
|
|
CORE_DISALLOW_COPY_AND_ASSIGN(Properties);
|
|
};
|
|
|
|
} // namespace wvcdm
|
|
|
|
#endif // WVCDM_CORE_PROPERTIES_H_
|