// Copyright 2013 Google Inc. All Rights Reserved. #ifndef WVCDM_CDM_WV_CONTENT_DECRYPTION_MODULE_H_ #define WVCDM_CDM_WV_CONTENT_DECRYPTION_MODULE_H_ #include "cdm_client_property_set.h" #include "cdm_engine.h" #include "cdm_host_clock.h" #include "cdm_host_file.h" #include "clock.h" #include "content_decryption_module.h" #include "host_event_listener.h" #include "wv_cdm_common.h" #include "wv_cdm_types.h" namespace wvcdm { class WVClientPropertySet : public wvcdm::CdmClientPropertySet { public: WVClientPropertySet() : use_privacy_mode_(false) {} virtual ~WVClientPropertySet() {} void set_security_level(const std::string& securityLevel) { security_level_ = securityLevel; } virtual const std::string& security_level() const { return security_level_; } void set_use_privacy_mode(bool usePrivacyMode) { use_privacy_mode_ = usePrivacyMode; } virtual bool use_privacy_mode() const { return use_privacy_mode_; } void set_service_certificate(const std::string& serviceCertificate) { service_certificate_ = serviceCertificate; } virtual const std::string& service_certificate() const { return service_certificate_; } virtual bool is_session_sharing_enabled() const { return true; // This is unused by common cdm but we need a definition // for the pure virtual methods. } void set_is_session_sharing_enabled(bool shareKeys) { return; // This is unused by common cdm but we need a definition // for the pure virtual methods. } virtual uint32_t session_sharing_id() const { return 1; // This is unused by common cdm but we need a // definition for the pure virtual methods. } virtual void set_session_sharing_id(uint32_t id) { return; // This is unused by common cdm but we need a // definition for the pure virtual methods. } private: CORE_DISALLOW_COPY_AND_ASSIGN(WVClientPropertySet); std::string security_level_; bool use_privacy_mode_; std::string service_certificate_; }; class WvContentDecryptionModule : public cdm::ContentDecryptionModule, public IFileFactory, public IClock { public: explicit WvContentDecryptionModule(cdm::Host* host); virtual ~WvContentDecryptionModule(); // cdm::ContentDecryptionModule implementation. virtual cdm::Status GenerateKeyRequest(const char* type, int type_size, const uint8_t* init_data, int init_data_size) OVERRIDE; virtual cdm::Status AddKey(const char* session_id, int session_id_size, const uint8_t* key, int key_size, const uint8_t* key_id, int key_id_size) OVERRIDE; virtual bool IsKeyValid(const uint8_t* key_id, int key_id_size) OVERRIDE; virtual cdm::Status CancelKeyRequest(const char* session_id, int session_id_size) OVERRIDE; virtual void TimerExpired(void* context) OVERRIDE; virtual cdm::Status Decrypt(const cdm::InputBuffer& encrypted_buffer, cdm::DecryptedBlock* decrypted_buffer) OVERRIDE; virtual cdm::Status DecryptDecodeAndRenderFrame( const cdm::InputBuffer& encrypted_buffer) OVERRIDE; virtual cdm::Status DecryptDecodeAndRenderSamples( const cdm::InputBuffer& encrypted_buffer) OVERRIDE; virtual void Destroy() OVERRIDE; virtual cdm::Status GetProvisioningRequest( std::string* request, std::string* default_url) OVERRIDE; virtual cdm::Status HandleProvisioningResponse( std::string& response) OVERRIDE; private: void EnablePolicyTimer(); void DisablePolicyTimer(); virtual File::Impl* NewFileImpl() OVERRIDE; virtual int64_t GetCurrentTimeInSeconds() OVERRIDE; cdm::Status DoSubsampleDecrypt(CdmDecryptionParameters& parameters, std::vector& iv, const cdm::InputBuffer& encrypted_buffer, cdm::DecryptedBlock* decrypted_block); CdmEngine cdm_engine_; cdm::Host* const host_; HostEventListener host_event_listener_; WVClientPropertySet property_set_; bool timer_enabled_; CORE_DISALLOW_COPY_AND_ASSIGN(WvContentDecryptionModule); }; } // namespace wvcdm #endif // WVCDM_CDM_WV_CONTENT_DECRYPTION_MODULE_H_