diff --git a/libwvdrmengine/cdm/core/include/cdm_engine.h b/libwvdrmengine/cdm/core/include/cdm_engine.h index 6b3c792c..86ab9892 100644 --- a/libwvdrmengine/cdm/core/include/cdm_engine.h +++ b/libwvdrmengine/cdm/core/include/cdm_engine.h @@ -96,6 +96,11 @@ class CdmEngine : public TimerHandler { WvCdmEventListener* listener); bool DetachEventListener(const CdmSessionId& session_id, WvCdmEventListener* listener); + + // Parse a blob of multiple concatenated PSSH atoms to extract the first + // widevine pssh + static bool ExtractWidevinePssh(const CdmInitData& init_data, + CdmInitData* output); private: // private methods // Cancel all sessions @@ -104,11 +109,6 @@ class CdmEngine : public TimerHandler { void ComposeJsonRequest(const std::string& message, CdmProvisioningRequest* request); - // Parse a blob of multiple concatenated PSSH atoms to extract the first - // widevine pssh - // TODO(gmorgan): This should be done by the user of this class. - bool ExtractWidevinePssh(const CdmInitData& init_data, - CdmInitData* output); bool ParseJsonResponse(const CdmProvisioningResponse& json_str, const std::string& start_substr, const std::string& end_substr, diff --git a/libwvdrmengine/cdm/core/include/cdm_session.h b/libwvdrmengine/cdm/core/include/cdm_session.h index 1c0fce3b..8029bbf6 100644 --- a/libwvdrmengine/cdm/core/include/cdm_session.h +++ b/libwvdrmengine/cdm/core/include/cdm_session.h @@ -33,7 +33,7 @@ class CdmSession { bool VerifySession(const CdmKeySystem& key_system, const CdmInitData& init_data); - CdmResponseType GenerateKeyRequest(const CdmInitData& pssh_data, + CdmResponseType GenerateKeyRequest(const CdmInitData& init_data, const CdmLicenseType license_type, CdmAppParameterMap& app_parameters, CdmKeyMessage* key_request, diff --git a/libwvdrmengine/cdm/core/src/cdm_engine.cpp b/libwvdrmengine/cdm/core/src/cdm_engine.cpp index 2a5c5493..123111ce 100644 --- a/libwvdrmengine/cdm/core/src/cdm_engine.cpp +++ b/libwvdrmengine/cdm/core/src/cdm_engine.cpp @@ -127,26 +127,15 @@ CdmResponseType CdmEngine::GenerateKeyRequest( // TODO(edwinwong, rfrias): validate key_system has not changed } - if (init_data.empty()) { - LOGE("CdmEngine::GenerateKeyRequest: no init_data provided"); - return KEY_ERROR; - } - if (!key_request) { LOGE("CdmEngine::GenerateKeyRequest: no key request destination provided"); return KEY_ERROR; } - CdmInitData extracted_pssh; - if (!ExtractWidevinePssh(init_data, &extracted_pssh)) { - key_request->clear(); - return KEY_ERROR; - } - key_request->clear(); // TODO(edwinwong, rfrias): need to pass in license type and app parameters - CdmResponseType sts = iter->second->GenerateKeyRequest(extracted_pssh, + CdmResponseType sts = iter->second->GenerateKeyRequest(init_data, license_type, app_parameters, key_request, diff --git a/libwvdrmengine/cdm/core/src/cdm_session.cpp b/libwvdrmengine/cdm/core/src/cdm_session.cpp index 75ec40c8..6771651b 100644 --- a/libwvdrmengine/cdm/core/src/cdm_session.cpp +++ b/libwvdrmengine/cdm/core/src/cdm_session.cpp @@ -7,6 +7,7 @@ #include #include "clock.h" +#include "cdm_engine.h" #include "crypto_engine.h" #include "device_files.h" #include "log.h" @@ -62,7 +63,7 @@ bool CdmSession::VerifySession(const CdmKeySystem& key_system, } CdmResponseType CdmSession::GenerateKeyRequest( - const CdmInitData& pssh_data, + const CdmInitData& init_data, const CdmLicenseType license_type, CdmAppParameterMap& app_parameters, CdmKeyMessage* key_request, @@ -83,6 +84,11 @@ CdmResponseType CdmSession::GenerateKeyRequest( server_url); } else { + CdmInitData pssh_data; + if (!CdmEngine::ExtractWidevinePssh(init_data, &pssh_data)) { + return KEY_ERROR; + } + if (Properties::use_certificates_as_identification()) { if (!crypto_session_->LoadCertificatePrivateKey(wrapped_key_)) return NEED_PROVISIONING; diff --git a/libwvdrmengine/cdm/test/request_license_test.cpp b/libwvdrmengine/cdm/test/request_license_test.cpp index 9abab09e..d28a7fda 100644 --- a/libwvdrmengine/cdm/test/request_license_test.cpp +++ b/libwvdrmengine/cdm/test/request_license_test.cpp @@ -62,9 +62,10 @@ class WvCdmRequestLicenseTest : public testing::Test { } void GenerateRenewalRequest(const std::string& key_system, - const std::string& init_data) { + const std::string& not_used) { // TODO application makes a license request, CDM will renew the license // when appropriate. + std::string init_data; wvcdm::CdmAppParameterMap app_parameters; std::string server_url; EXPECT_EQ(decryptor_.GenerateKeyRequest(session_id_,