From 096b0eda5a77e368ecddbee43a76020fde61ba26 Mon Sep 17 00:00:00 2001 From: Robert Shih Date: Wed, 16 Nov 2022 10:02:18 -0800 Subject: [PATCH] Squashed merge 3 CLs. 1. "Change CdmResponseType from enum into a struct" Merged from http://go/wvgerrit/163199 Bug: 253271674 2. "Log request information when server returns 401" Bug: 260760387 Bug: 186031735 Merged from http://go/wvgerrit/162798 3. "Specify server version on the command line" Bug: 251599048 Merged from http://go/wvgerrit/158897 Test: build android.hardware.drm-service.widevine Test: Netflix and Play Movies & TV Test: build_and_run_all_unit_tests.sh Bug: 253271674 Change-Id: I70c950acce070609ee0343920ec68e66b058bc23 --- .../include/cdm_engine_metrics_decorator.h | 2 +- .../cdm/core/include/wv_cdm_types.h | 39 +- libwvdrmengine/cdm/core/src/cdm_engine.cpp | 337 ++++++------ libwvdrmengine/cdm/core/src/cdm_session.cpp | 161 +++--- .../cdm/core/src/certificate_provisioning.cpp | 77 +-- .../cdm/core/src/client_identification.cpp | 23 +- .../cdm/core/src/crypto_session.cpp | 339 ++++++------ libwvdrmengine/cdm/core/src/license.cpp | 155 +++--- .../cdm/core/src/ota_keybox_provisioner.cpp | 39 +- libwvdrmengine/cdm/core/src/policy_engine.cpp | 10 +- .../cdm/core/src/service_certificate.cpp | 62 ++- .../cdm/core/src/system_id_extractor.cpp | 9 +- .../cdm/core/src/usage_table_header.cpp | 89 ++-- libwvdrmengine/cdm/core/src/wv_cdm_types.cpp | 6 +- .../cdm_engine_metrics_decorator_unittest.cpp | 36 +- .../cdm/core/test/cdm_session_unittest.cpp | 12 +- .../cdm/core/test/config_test_env.h | 10 + .../cdm/core/test/keybox_ota_test.cpp | 12 +- .../cdm/core/test/license_holder.cpp | 16 +- .../cdm/core/test/license_unittest.cpp | 18 +- .../core/test/ota_keybox_provisioner_test.cpp | 24 +- .../policy_engine_constraints_unittest.cpp | 31 +- .../cdm/core/test/policy_engine_unittest.cpp | 246 +++++---- .../cdm/core/test/policy_integration_test.cpp | 6 +- .../test/system_id_extractor_unittest.cpp | 23 +- libwvdrmengine/cdm/core/test/test_base.cpp | 21 +- .../cdm/core/test/test_printers.cpp | 4 +- libwvdrmengine/cdm/core/test/test_printers.h | 2 +- libwvdrmengine/cdm/core/test/url_request.cpp | 13 + libwvdrmengine/cdm/core/test/url_request.h | 2 + .../core/test/usage_table_header_unittest.cpp | 495 ++++++++++-------- .../cdm/metrics/src/attribute_handler.cpp | 7 + .../test/metrics_collections_unittest.cpp | 124 +++-- .../cdm/src/wv_content_decryption_module.cpp | 54 +- .../cdm/test/cdm_extended_duration_test.cpp | 18 +- libwvdrmengine/cdm/test/cdm_feature_test.cpp | 6 +- .../cdm/test/request_license_test.cpp | 291 +++++----- .../cdm/test/wv_cdm_metrics_test.cpp | 17 +- libwvdrmengine/include/mapErrors-inl.h | 5 + .../mediacrypto/src/WVCryptoPlugin.cpp | 6 +- .../test/WVCryptoPlugin_hal_test.cpp | 12 +- libwvdrmengine/mediadrm/src/WVDrmPlugin.cpp | 14 +- .../mediadrm/test/WVDrmPlugin_hal_test.cpp | 285 +++++----- libwvdrmengine/src/WVDrmFactory.cpp | 5 +- libwvdrmengine/src/wv_metrics.cpp | 4 +- .../tools/metrics_dump/src/wv_metrics.cpp | 2 +- 46 files changed, 1726 insertions(+), 1443 deletions(-) diff --git a/libwvdrmengine/cdm/core/include/cdm_engine_metrics_decorator.h b/libwvdrmengine/cdm/core/include/cdm_engine_metrics_decorator.h index 4d908af7..5d065d14 100644 --- a/libwvdrmengine/cdm/core/include/cdm_engine_metrics_decorator.h +++ b/libwvdrmengine/cdm/core/include/cdm_engine_metrics_decorator.h @@ -122,7 +122,7 @@ class CdmEngineMetricsImpl : public T { CdmKeySetId* key_set_id) override { if (license_type == nullptr) { LOGE("|license_type| cannot be null"); - return PARAMETER_NULL; + return CdmResponseType(PARAMETER_NULL); } CdmResponseType sts; diff --git a/libwvdrmengine/cdm/core/include/wv_cdm_types.h b/libwvdrmengine/cdm/core/include/wv_cdm_types.h index de671bc6..5f3bd533 100644 --- a/libwvdrmengine/cdm/core/include/wv_cdm_types.h +++ b/libwvdrmengine/cdm/core/include/wv_cdm_types.h @@ -50,7 +50,7 @@ enum CdmOfflineLicenseState : int32_t { kLicenseStateUnknown, }; -enum CdmResponseType : int32_t { +enum CdmResponseEnum : int32_t { NO_ERROR = 0, UNKNOWN_ERROR = 1, KEY_ADDED = 2, @@ -447,6 +447,41 @@ enum CdmResponseType : int32_t { // * android/include/mapErrors-inl.h }; +struct CdmResponseType { + CdmResponseType() : status_(NO_ERROR){}; + explicit CdmResponseType(CdmResponseEnum status) : status_(status){}; + explicit operator CdmResponseEnum() const { return status_; }; + explicit operator std::string() { + std::string str = "status = "; + str.append(std::to_string(static_cast(status_))); + return str; + } + CdmResponseEnum Enum() const { return status_; }; + constexpr explicit operator int() const { return status_; }; + bool operator==(CdmResponseEnum other) const { return status_ == other; } + bool operator!=(CdmResponseEnum other) const { return status_ != other; } + bool operator==(const CdmResponseType& other) const { + return status_ == other.Enum(); + } + bool operator!=(const CdmResponseType& other) const { + return status_ != other.Enum(); + } + + private: + CdmResponseEnum status_; + // CORE_DISALLOW_COPY_AND_ASSIGN(CdmResponseType); +}; + +static inline bool operator==(const CdmResponseEnum lhs, + const CdmResponseType& rhs) { + return lhs == rhs.Enum(); +} + +static inline bool operator!=(const CdmResponseEnum lhs, + const CdmResponseType& rhs) { + return !(lhs == rhs.Enum()); +} + enum CdmKeyStatus : int32_t { kKeyStatusKeyUnknown, kKeyStatusUsable, @@ -843,7 +878,7 @@ const char* CdmClientTokenTypeToString(CdmClientTokenType type); const char* CdmLicenseTypeToString(CdmLicenseType license_type); const char* CdmOfflineLicenseStateToString( CdmOfflineLicenseState license_state); -const char* CdmResponseTypeToString(CdmResponseType cdm_response_type); +const char* CdmResponseEnumToString(CdmResponseEnum cdm_response_enum); const char* CdmSecurityLevelToString(CdmSecurityLevel security_level); const char* CdmUsageEntryStorageTypeToString(CdmUsageEntryStorageType type); const char* RequestedSecurityLevelToString( diff --git a/libwvdrmengine/cdm/core/src/cdm_engine.cpp b/libwvdrmengine/cdm/core/src/cdm_engine.cpp index 726763c8..91c415a8 100644 --- a/libwvdrmengine/cdm/core/src/cdm_engine.cpp +++ b/libwvdrmengine/cdm/core/src/cdm_engine.cpp @@ -104,21 +104,21 @@ CdmResponseType CdmEngine::OpenSession(const CdmKeySystem& key_system, CdmSessionId* session_id) { if (!ValidateKeySystem(key_system)) { LOGI("Invalid key system: %s", IdToString(key_system)); - return INVALID_KEY_SYSTEM; + return CdmResponseType(INVALID_KEY_SYSTEM); } if (session_id == nullptr && forced_session_id == nullptr) { LOGE("Input |forced_session_id| and output |session_id| are both null"); - return PARAMETER_NULL; + return CdmResponseType(PARAMETER_NULL); } if (forced_session_id != nullptr) { if (forced_session_id->empty()) { // This should be enforce by the CE CDM code. - return EMPTY_SESSION_ID; + return CdmResponseType(EMPTY_SESSION_ID); } if (session_map_.Exists(*forced_session_id)) { - return DUPLICATE_SESSION_ID_SPECIFIED; + return CdmResponseType(DUPLICATE_SESSION_ID_SPECIFIED); } LOGD("forced_session_id = %s", IdPtrToString(forced_session_id)); } @@ -159,7 +159,7 @@ CdmResponseType CdmEngine::OpenSession(const CdmKeySystem& key_system, forced_level3 = true; } else { // OKP is required. - return NEED_PROVISIONING; + return CdmResponseType(NEED_PROVISIONING); } } else { std::unique_lock lock(okp_mutex_); @@ -189,7 +189,7 @@ CdmResponseType CdmEngine::OpenSession(const CdmKeySystem& key_system, std::unique_lock lock(session_map_lock_); session_map_.Add(id, new_session.release()); if (session_id) *session_id = id; - return NO_ERROR; + return CdmResponseType(NO_ERROR); } CdmResponseType CdmEngine::OpenKeySetSession( @@ -198,7 +198,7 @@ CdmResponseType CdmEngine::OpenKeySetSession( LOGI("key_set_id = %s", IdToString(key_set_id)); if (key_set_id.empty()) { LOGE("Invalid key set ID"); - return EMPTY_KEYSET_ID_ENG_1; + return CdmResponseType(EMPTY_KEYSET_ID_ENG_1); } // If in-use, release key set before re-opening, to avoid leaking @@ -225,7 +225,7 @@ CdmResponseType CdmEngine::OpenKeySetSession( release_key_sets_[key_set_id] = std::make_pair( session_id, clock_.GetCurrentTime() + kReleaseSessionTimeToLive); - return NO_ERROR; + return CdmResponseType(NO_ERROR); } CdmResponseType CdmEngine::CloseSession(const CdmSessionId& session_id) { @@ -233,10 +233,10 @@ CdmResponseType CdmEngine::CloseSession(const CdmSessionId& session_id) { std::unique_lock lock(session_map_lock_); if (!session_map_.CloseSession(session_id)) { LOGE("Session not found: session_id = %s", IdToString(session_id)); - return SESSION_NOT_FOUND_1; + return CdmResponseType(SESSION_NOT_FOUND_1); } metrics_->ConsolidateSessions(); - return NO_ERROR; + return CdmResponseType(NO_ERROR); } CdmResponseType CdmEngine::CloseKeySetSession(const CdmKeySetId& key_set_id) { @@ -247,7 +247,7 @@ CdmResponseType CdmEngine::CloseKeySetSession(const CdmKeySetId& key_set_id) { CdmReleaseKeySetMap::iterator iter = release_key_sets_.find(key_set_id); if (iter == release_key_sets_.end()) { LOGE("Key set not found: key_set_id = %s", IdToString(key_set_id)); - return KEYSET_ID_NOT_FOUND_1; + return CdmResponseType(KEYSET_ID_NOT_FOUND_1); } session_id = iter->second.first; } @@ -274,7 +274,7 @@ CdmResponseType CdmEngine::GenerateKeyRequest( CdmLicenseTypeToString(license_type)); if (key_request == nullptr) { LOGE("Output |key_request| is null"); - return PARAMETER_NULL; + return CdmResponseType(PARAMETER_NULL); } CdmSessionId id = session_id; @@ -284,19 +284,19 @@ CdmResponseType CdmEngine::GenerateKeyRequest( !Properties::AlwaysUseKeySetIds()) { if (key_set_id.empty()) { LOGE("Invalid key set ID"); - return EMPTY_KEYSET_ID_ENG_2; + return CdmResponseType(EMPTY_KEYSET_ID_ENG_2); } if (!session_id.empty()) { LOGE("Session ID should be empty: session_id = %s", IdToString(session_id)); - return INVALID_SESSION_ID; + return CdmResponseType(INVALID_SESSION_ID); } std::unique_lock lock(release_key_sets_lock_); CdmReleaseKeySetMap::iterator iter = release_key_sets_.find(key_set_id); if (iter == release_key_sets_.end()) { LOGE("Key set not found: key_set_id = %s", IdToString(key_set_id)); - return KEYSET_ID_NOT_FOUND_2; + return CdmResponseType(KEYSET_ID_NOT_FOUND_2); } id = iter->second.first; @@ -305,7 +305,7 @@ CdmResponseType CdmEngine::GenerateKeyRequest( std::shared_ptr session; if (!session_map_.FindSession(id, &session)) { LOGE("Session not found: session_id = %s", IdToString(id)); - return SESSION_NOT_FOUND_2; + return CdmResponseType(SESSION_NOT_FOUND_2); } key_request->message.clear(); @@ -342,7 +342,7 @@ CdmResponseType CdmEngine::GenerateKeyRequest( LOGD("key_request = (%zu) %s", key_request->message.size(), wvutil::Base64SafeEncode(key_request->message).c_str()); - return KEY_MESSAGE; + return CdmResponseType(KEY_MESSAGE); } CdmResponseType CdmEngine::AddKey(const CdmSessionId& session_id, @@ -353,7 +353,7 @@ CdmResponseType CdmEngine::AddKey(const CdmSessionId& session_id, IdPtrToString(key_set_id)); if (license_type == nullptr) { LOGE("Output |license_type| is null"); - return PARAMETER_NULL; + return CdmResponseType(PARAMETER_NULL); } CdmSessionId id = session_id; @@ -361,19 +361,19 @@ CdmResponseType CdmEngine::AddKey(const CdmSessionId& session_id, if (license_type_release) { if (key_set_id == nullptr) { LOGE("Input/output |key_set_id| is null"); - return PARAMETER_NULL; + return CdmResponseType(PARAMETER_NULL); } if (key_set_id->empty()) { LOGE("Invalid key set ID"); - return EMPTY_KEYSET_ID_ENG_3; + return CdmResponseType(EMPTY_KEYSET_ID_ENG_3); } std::unique_lock lock(release_key_sets_lock_); CdmReleaseKeySetMap::iterator iter = release_key_sets_.find(*key_set_id); if (iter == release_key_sets_.end()) { LOGE("Key set not found: key_set_id = %s", IdPtrToString(key_set_id)); - return KEYSET_ID_NOT_FOUND_3; + return CdmResponseType(KEYSET_ID_NOT_FOUND_3); } id = iter->second.first; } else { @@ -384,15 +384,15 @@ CdmResponseType CdmEngine::AddKey(const CdmSessionId& session_id, std::shared_ptr session; if (!session_map_.FindSession(id, &session)) { LOGE("Session not found: session_id = %s", IdToString(id)); - return SESSION_NOT_FOUND_3; + return CdmResponseType(SESSION_NOT_FOUND_3); } if (key_data.empty()) { LOGE("No key data"); - return EMPTY_KEY_DATA_1; + return CdmResponseType(EMPTY_KEY_DATA_1); } - CdmResponseType sts = KEY_ADDED; + CdmResponseType sts(KEY_ADDED); { // TODO(rfrias): Refactor. For now lock while adding keys to prevent // a race condition between this and the decryption thread. This may @@ -424,7 +424,7 @@ CdmResponseType CdmEngine::AddKey(const CdmSessionId& session_id, } } - switch (sts) { + switch (sts.Enum()) { case KEY_ADDED: break; case NEED_KEY: @@ -445,13 +445,13 @@ CdmResponseType CdmEngine::RestoreKey(const CdmSessionId& session_id, IdToString(key_set_id)); if (key_set_id.empty()) { LOGI("Invalid key set ID"); - return EMPTY_KEYSET_ID_ENG_4; + return CdmResponseType(EMPTY_KEYSET_ID_ENG_4); } std::shared_ptr session; if (!session_map_.FindSession(session_id, &session)) { LOGE("Session not found: session_id = %s", IdToString(session_id)); - return SESSION_NOT_FOUND_4; + return CdmResponseType(SESSION_NOT_FOUND_4); } int error_detail = NO_ERROR; @@ -472,10 +472,10 @@ CdmResponseType CdmEngine::RemoveKeys(const CdmSessionId& session_id) { std::unique_lock lock(session_map_lock_); if (!session_map_.FindSession(session_id, &session)) { LOGE("Session not found: session_id = %s", IdToString(session_id)); - return SESSION_NOT_FOUND_5; + return CdmResponseType(SESSION_NOT_FOUND_5); } session->RemoveKeys(); - return NO_ERROR; + return CdmResponseType(NO_ERROR); } CdmResponseType CdmEngine::RemoveLicense(const CdmSessionId& session_id) { @@ -484,7 +484,7 @@ CdmResponseType CdmEngine::RemoveLicense(const CdmSessionId& session_id) { std::unique_lock lock(session_map_lock_); if (!session_map_.FindSession(session_id, &session)) { LOGE("Session not found: session_id = %s", IdToString(session_id)); - return SESSION_NOT_FOUND_19; + return CdmResponseType(SESSION_NOT_FOUND_19); } return session->RemoveLicense(); } @@ -494,12 +494,12 @@ CdmResponseType CdmEngine::GenerateRenewalRequest( LOGI("session_id = %s", IdToString(session_id)); if (key_request == nullptr) { LOGE("Output |key_request| is null"); - return PARAMETER_NULL; + return CdmResponseType(PARAMETER_NULL); } std::shared_ptr session; if (!session_map_.FindSession(session_id, &session)) { LOGE("Session not found: session_id = %s", IdToString(session_id)); - return SESSION_NOT_FOUND_6; + return CdmResponseType(SESSION_NOT_FOUND_6); } key_request->message.clear(); const CdmResponseType sts = session->GenerateRenewalRequest(key_request); @@ -508,7 +508,7 @@ CdmResponseType CdmEngine::GenerateRenewalRequest( static_cast(sts)); return sts; } - return KEY_MESSAGE; + return CdmResponseType(KEY_MESSAGE); } CdmResponseType CdmEngine::RenewKey(const CdmSessionId& session_id, @@ -516,12 +516,12 @@ CdmResponseType CdmEngine::RenewKey(const CdmSessionId& session_id, LOGI("session_id = %s", IdToString(session_id)); if (key_data.empty()) { LOGE("No key data"); - return EMPTY_KEY_DATA_2; + return CdmResponseType(EMPTY_KEY_DATA_2); } std::shared_ptr session; if (!session_map_.FindSession(session_id, &session)) { LOGE("Session not found: session_id = %s", IdToString(session_id)); - return SESSION_NOT_FOUND_7; + return CdmResponseType(SESSION_NOT_FOUND_7); } CdmResponseType sts; M_TIME(sts = session->RenewKey(key_data), session->GetMetrics(), @@ -531,7 +531,7 @@ CdmResponseType CdmEngine::RenewKey(const CdmSessionId& session_id, static_cast(sts)); return sts; } - return KEY_ADDED; + return CdmResponseType(KEY_ADDED); } CdmResponseType CdmEngine::SetSessionServiceCertificate( @@ -540,7 +540,7 @@ CdmResponseType CdmEngine::SetSessionServiceCertificate( std::shared_ptr session; if (!session_map_.FindSession(session_id, &session)) { LOGE("Session not found: session_id = %s", IdToString(session_id)); - return SESSION_NOT_FOUND_22; + return CdmResponseType(SESSION_NOT_FOUND_22); } return session->SetServiceCertificate(service_certificate); } @@ -552,7 +552,7 @@ CdmResponseType CdmEngine::QueryStatus(RequestedSecurityLevel security_level, RequestedSecurityLevelToString(security_level), IdToString(query_token)); if (query_response == nullptr) { LOGE("Output |query_response| is null"); - return PARAMETER_NULL; + return CdmResponseType(PARAMETER_NULL); } std::unique_ptr crypto_session( CryptoSession::MakeCryptoSession(metrics_->GetCryptoMetrics())); @@ -586,9 +586,9 @@ CdmResponseType CdmEngine::QueryStatus(RequestedSecurityLevel security_level, default: LOGW("Unknown security level: %d", static_cast(found_security_level)); - return UNKNOWN_ERROR; + return CdmResponseType(UNKNOWN_ERROR); } - return NO_ERROR; + return CdmResponseType(NO_ERROR); } if (query_token == QUERY_KEY_CURRENT_HDCP_LEVEL || query_token == QUERY_KEY_MAX_HDCP_LEVEL) { @@ -603,7 +603,7 @@ CdmResponseType CdmEngine::QueryStatus(RequestedSecurityLevel security_level, } *query_response = MapHdcpVersion( query_token == QUERY_KEY_CURRENT_HDCP_LEVEL ? current_hdcp : max_hdcp); - return NO_ERROR; + return CdmResponseType(NO_ERROR); } if (query_token == QUERY_KEY_USAGE_SUPPORT) { bool supports_usage_reporting; @@ -614,7 +614,7 @@ CdmResponseType CdmEngine::QueryStatus(RequestedSecurityLevel security_level, LOGW("HasUsageInfoSupport failed"); metrics_->GetCryptoMetrics() ->crypto_session_usage_information_support_.SetError(got_info); - return UNKNOWN_ERROR; + return CdmResponseType(UNKNOWN_ERROR); } metrics_->GetCryptoMetrics() ->crypto_session_usage_information_support_.Record( @@ -622,7 +622,7 @@ CdmResponseType CdmEngine::QueryStatus(RequestedSecurityLevel security_level, *query_response = supports_usage_reporting ? QUERY_VALUE_TRUE : QUERY_VALUE_FALSE; - return NO_ERROR; + return CdmResponseType(NO_ERROR); } if (query_token == QUERY_KEY_NUMBER_OF_OPEN_SESSIONS) { size_t number_of_open_sessions; @@ -634,7 +634,7 @@ CdmResponseType CdmEngine::QueryStatus(RequestedSecurityLevel security_level, return status; } *query_response = std::to_string(number_of_open_sessions); - return NO_ERROR; + return CdmResponseType(NO_ERROR); } if (query_token == QUERY_KEY_MAX_NUMBER_OF_SESSIONS) { size_t maximum_number_of_sessions = 0; @@ -646,16 +646,16 @@ CdmResponseType CdmEngine::QueryStatus(RequestedSecurityLevel security_level, return status; } *query_response = std::to_string(maximum_number_of_sessions); - return NO_ERROR; + return CdmResponseType(NO_ERROR); } if (query_token == QUERY_KEY_OEMCRYPTO_API_VERSION) { uint32_t api_version; if (!crypto_session->GetApiVersion(security_level, &api_version)) { LOGW("GetApiVersion failed"); - return UNKNOWN_ERROR; + return CdmResponseType(UNKNOWN_ERROR); } *query_response = std::to_string(api_version); - return NO_ERROR; + return CdmResponseType(NO_ERROR); } if (query_token == QUERY_KEY_CURRENT_SRM_VERSION) { uint16_t current_srm_version; @@ -663,54 +663,54 @@ CdmResponseType CdmEngine::QueryStatus(RequestedSecurityLevel security_level, crypto_session->GetSrmVersion(¤t_srm_version); if (status == NO_ERROR) { *query_response = std::to_string(current_srm_version); - return NO_ERROR; + return CdmResponseType(NO_ERROR); } if (status == NO_SRM_VERSION) { // SRM is not supported or not applicable (ex. local display only). *query_response = QUERY_VALUE_NONE; - return NO_ERROR; + return CdmResponseType(NO_ERROR); } LOGW("GetCurrentSRMVersion failed: status = %d", static_cast(status)); return status; } if (query_token == QUERY_KEY_SRM_UPDATE_SUPPORT) { *query_response = QUERY_VALUE_FALSE; - return NO_ERROR; + return CdmResponseType(NO_ERROR); } if (query_token == QUERY_KEY_WVCDM_VERSION) { std::string cdm_version; if (!Properties::GetWVCdmVersion(&cdm_version)) { LOGW("GetWVCdmVersion failed"); - return UNKNOWN_ERROR; + return CdmResponseType(UNKNOWN_ERROR); } *query_response = cdm_version; - return NO_ERROR; + return CdmResponseType(NO_ERROR); } if (query_token == QUERY_KEY_RESOURCE_RATING_TIER) { uint32_t tier; if (!crypto_session->GetResourceRatingTier(security_level, &tier)) { LOGW("GetResourceRatingTier failed"); - return UNKNOWN_ERROR; + return CdmResponseType(UNKNOWN_ERROR); } *query_response = std::to_string(tier); - return NO_ERROR; + return CdmResponseType(NO_ERROR); } if (query_token == QUERY_KEY_OEMCRYPTO_BUILD_INFORMATION) { if (!crypto_session->GetBuildInformation(security_level, query_response)) { LOGW("GetBuildInformation failed"); query_response->clear(); - return UNKNOWN_ERROR; + return CdmResponseType(UNKNOWN_ERROR); } - return NO_ERROR; + return CdmResponseType(NO_ERROR); } if (query_token == QUERY_KEY_DECRYPT_HASH_SUPPORT) { uint32_t hash_support = 0; if (!crypto_session->GetDecryptHashSupport(security_level, &hash_support)) { LOGW("GetDecryptHashSupport failed"); - return UNKNOWN_ERROR; + return CdmResponseType(UNKNOWN_ERROR); } *query_response = std::to_string(hash_support); - return NO_ERROR; + return CdmResponseType(NO_ERROR); } if (query_token == QUERY_KEY_PROVISIONING_MODEL) { CdmClientTokenType token_type = kClientTokenUninitialized; @@ -738,16 +738,16 @@ CdmResponseType CdmEngine::QueryStatus(RequestedSecurityLevel security_level, default: LOGW("GetProvisioningMethod returned invalid method: token_type = %d", static_cast(token_type)); - return GET_PROVISIONING_METHOD_ERROR; + return CdmResponseType(GET_PROVISIONING_METHOD_ERROR); } - return NO_ERROR; + return CdmResponseType(NO_ERROR); } if (query_token == QUERY_KEY_MAX_USAGE_TABLE_ENTRIES) { size_t max_number_of_usage_entries; if (!crypto_session->GetMaximumUsageTableEntries( security_level, &max_number_of_usage_entries)) { LOGW("GetMaxUsageTableEntries failed"); - return UNKNOWN_ERROR; + return CdmResponseType(UNKNOWN_ERROR); } if (max_number_of_usage_entries == 0) { // Zero indicates that the table is dynamically allocated and does @@ -756,17 +756,17 @@ CdmResponseType CdmEngine::QueryStatus(RequestedSecurityLevel security_level, max_number_of_usage_entries = std::numeric_limits::max(); } *query_response = std::to_string(max_number_of_usage_entries); - return NO_ERROR; + return CdmResponseType(NO_ERROR); } if (query_token == QUERY_KEY_OEMCRYPTO_API_MINOR_VERSION) { uint32_t api_minor_version; if (!crypto_session->GetApiMinorVersion(security_level, &api_minor_version)) { LOGW("GetApiMinorVersion failed"); - return UNKNOWN_ERROR; + return CdmResponseType(UNKNOWN_ERROR); } *query_response = std::to_string(api_minor_version); - return NO_ERROR; + return CdmResponseType(NO_ERROR); } if (query_token == QUERY_KEY_ANALOG_OUTPUT_CAPABILITIES) { bool supported = false, can_disable = false, cgms_a = false; @@ -784,7 +784,7 @@ CdmResponseType CdmEngine::QueryStatus(RequestedSecurityLevel security_level, } else { *query_response = QUERY_VALUE_UNKNOWN; } - return NO_ERROR; + return CdmResponseType(NO_ERROR); } if (query_token == QUERY_KEY_CAN_DISABLE_ANALOG_OUTPUT) { bool supported = false, can_disable = false, cgms_a = false; @@ -794,7 +794,7 @@ CdmResponseType CdmEngine::QueryStatus(RequestedSecurityLevel security_level, } else { *query_response = QUERY_VALUE_UNKNOWN; } - return NO_ERROR; + return CdmResponseType(NO_ERROR); } if (query_token == QUERY_KEY_WATERMARKING_SUPPORT) { CdmWatermarkingSupport support; @@ -814,15 +814,15 @@ CdmResponseType CdmEngine::QueryStatus(RequestedSecurityLevel security_level, break; default: LOGW("Unknown watermarking support: %d", static_cast(support)); - return UNKNOWN_ERROR; + return CdmResponseType(UNKNOWN_ERROR); } - return NO_ERROR; + return CdmResponseType(NO_ERROR); } if (query_token == QUERY_KEY_PRODUCTION_READY) { CdmProductionReadiness readiness; if (!crypto_session->GetProductionReadiness(security_level, &readiness)) { LOGW("GetProductionReadiness failed"); - return UNKNOWN_ERROR; + return CdmResponseType(UNKNOWN_ERROR); } switch (readiness) { case kProductionReadinessUnknown: @@ -836,9 +836,9 @@ CdmResponseType CdmEngine::QueryStatus(RequestedSecurityLevel security_level, break; default: LOGW("Unknown readiness: %d", static_cast(readiness)); - return UNKNOWN_ERROR; + return CdmResponseType(UNKNOWN_ERROR); } - return NO_ERROR; + return CdmResponseType(NO_ERROR); } if (query_token == QUERY_KEY_SYSTEM_ID) { wvutil::FileSystem global_file_system; @@ -847,10 +847,10 @@ CdmResponseType CdmEngine::QueryStatus(RequestedSecurityLevel security_level, uint32_t system_id; if (!extractor.ExtractSystemId(&system_id)) { LOGW("ExtractSystemId failed"); - return UNKNOWN_ERROR; + return CdmResponseType(UNKNOWN_ERROR); } *query_response = std::to_string(system_id); - return NO_ERROR; + return CdmResponseType(NO_ERROR); } CdmResponseType status; @@ -868,7 +868,7 @@ CdmResponseType CdmEngine::QueryStatus(RequestedSecurityLevel security_level, ->crypto_session_get_device_unique_id_.Increment(status); if (status != NO_ERROR) return status; *query_response = device_id; - return NO_ERROR; + return CdmResponseType(NO_ERROR); } if (query_token == QUERY_KEY_PROVISIONING_ID) { std::string provisioning_id; @@ -878,10 +878,10 @@ CdmResponseType CdmEngine::QueryStatus(RequestedSecurityLevel security_level, return status; } *query_response = provisioning_id; - return NO_ERROR; + return CdmResponseType(NO_ERROR); } LOGW("Unknown status requested: query_token = %s", IdToString(query_token)); - return INVALID_QUERY_KEY; + return CdmResponseType(INVALID_QUERY_KEY); } CdmResponseType CdmEngine::QuerySessionStatus(const CdmSessionId& session_id, @@ -890,7 +890,7 @@ CdmResponseType CdmEngine::QuerySessionStatus(const CdmSessionId& session_id, std::shared_ptr session; if (!session_map_.FindSession(session_id, &session)) { LOGE("Session not found: session_id = %s", IdToString(session_id)); - return SESSION_NOT_FOUND_8; + return CdmResponseType(SESSION_NOT_FOUND_8); } return session->QueryStatus(query_response); } @@ -921,7 +921,7 @@ CdmResponseType CdmEngine::QueryKeyStatus(const CdmSessionId& session_id, std::shared_ptr session; if (!session_map_.FindSession(session_id, &session)) { LOGE("Session not found: session_id = %s", IdToString(session_id)); - return SESSION_NOT_FOUND_9; + return CdmResponseType(SESSION_NOT_FOUND_9); } return session->QueryKeyStatus(query_response); } @@ -933,12 +933,12 @@ CdmResponseType CdmEngine::QueryKeyAllowedUsage(const CdmSessionId& session_id, IdToString(key_id)); if (key_usage == nullptr) { LOGE("Output |key_usage| is null"); - return PARAMETER_NULL; + return CdmResponseType(PARAMETER_NULL); } std::shared_ptr session; if (!session_map_.FindSession(session_id, &session)) { LOGE("Session not found: session_id = %s", IdToString(session_id)); - return SESSION_NOT_FOUND_12; + return CdmResponseType(SESSION_NOT_FOUND_12); } return session->QueryKeyAllowedUsage(key_id, key_usage); } @@ -948,7 +948,7 @@ CdmResponseType CdmEngine::QueryKeyAllowedUsage(const std::string& key_id, LOGI("key_id = %s", IdToString(key_id)); if (!key_usage) { LOGE("Output |key_usage| is null"); - return PARAMETER_NULL; + return CdmResponseType(PARAMETER_NULL); } key_usage->Clear(); CdmSessionList sessions; @@ -964,7 +964,7 @@ CdmResponseType CdmEngine::QueryKeyAllowedUsage(const std::string& key_id, // Found another key. If usage settings do not match, fail. if (!key_usage->Equals(found_in_this_session)) { key_usage->Clear(); - return KEY_CONFLICT_1; + return CdmResponseType(KEY_CONFLICT_1); } } else { *key_usage = found_in_this_session; @@ -976,7 +976,7 @@ CdmResponseType CdmEngine::QueryKeyAllowedUsage(const std::string& key_id, return sts; } } - return (found) ? NO_ERROR : KEY_NOT_FOUND_2; + return (found) ? CdmResponseType(NO_ERROR) : CdmResponseType(KEY_NOT_FOUND_2); } CdmResponseType CdmEngine::QueryOemCryptoSessionId( @@ -985,7 +985,7 @@ CdmResponseType CdmEngine::QueryOemCryptoSessionId( std::shared_ptr session; if (!session_map_.FindSession(session_id, &session)) { LOGE("Session not found: session_id = %s", IdToString(session_id)); - return SESSION_NOT_FOUND_10; + return CdmResponseType(SESSION_NOT_FOUND_10); } return session->QueryOemCryptoSessionId(query_response); } @@ -1021,11 +1021,11 @@ CdmResponseType CdmEngine::GetProvisioningRequest( LOGI("cert_type = %s", CdmCertificateTypeToString(cert_type)); if (!request) { LOGE("Output |request| is null"); - return INVALID_PROVISIONING_REQUEST_PARAM_1; + return CdmResponseType(INVALID_PROVISIONING_REQUEST_PARAM_1); } if (!default_url) { LOGE("Output |default_url| is null"); - return INVALID_PROVISIONING_REQUEST_PARAM_2; + return CdmResponseType(INVALID_PROVISIONING_REQUEST_PARAM_2); } if (requested_security_level == kLevelDefault) { @@ -1041,7 +1041,7 @@ CdmResponseType CdmEngine::GetProvisioningRequest( // OKP is required. const CdmResponseType status = okp_provisioner_->GetProvisioningRequest(request, default_url); - if (status == NO_ERROR) return NO_ERROR; + if (status == NO_ERROR) return CdmResponseType(NO_ERROR); if (status == NOT_IMPLEMENTED_ERROR) { LOGW("OKP not supoprted, falling back to L3"); OkpTriggerFallback(); @@ -1097,22 +1097,22 @@ CdmResponseType CdmEngine::HandleProvisioningResponse( if (response.empty()) { LOGE("Empty provisioning response"); cert_provisioning_.reset(); - return EMPTY_PROVISIONING_RESPONSE; + return CdmResponseType(EMPTY_PROVISIONING_RESPONSE); } if (cert == nullptr) { LOGE("Output |cert| is null"); cert_provisioning_.reset(); - return INVALID_PROVISIONING_PARAMETERS_1; + return CdmResponseType(INVALID_PROVISIONING_PARAMETERS_1); } if (wrapped_key == nullptr) { LOGE("Output |wrapped_key| is null"); cert_provisioning_.reset(); - return INVALID_PROVISIONING_PARAMETERS_2; + return CdmResponseType(INVALID_PROVISIONING_PARAMETERS_2); } if (requested_security_level == kLevelDefault) { bool use_okp = false; - CdmResponseType okp_res = UNKNOWN_ERROR; + CdmResponseType okp_res(UNKNOWN_ERROR); { std::unique_lock lock(okp_mutex_); if (okp_provisioner_) { @@ -1146,14 +1146,14 @@ CdmResponseType CdmEngine::HandleProvisioningResponse( requested_security_level); if (NO_ERROR != status) { LOGE("Provisioning object missing and crypto session open failed"); - return EMPTY_PROVISIONING_CERTIFICATE_2; + return CdmResponseType(EMPTY_PROVISIONING_CERTIFICATE_2); } CdmSecurityLevel security_level = crypto_session->GetSecurityLevel(); if (!IsProvisioned(security_level)) { LOGE("Provisioning object missing"); - return EMPTY_PROVISIONING_CERTIFICATE_1; + return CdmResponseType(EMPTY_PROVISIONING_CERTIFICATE_1); } - return NO_ERROR; + return CdmResponseType(NO_ERROR); } const CdmResponseType ret = cert_provisioning_->HandleProvisioningResponse( @@ -1236,35 +1236,35 @@ CdmResponseType CdmEngine::Unprovision(CdmSecurityLevel security_level) { return res; } if (token_type == kClientTokenDrmCert) { - return DEVICE_CANNOT_REPROVISION; + return CdmResponseType(DEVICE_CANNOT_REPROVISION); } DeviceFiles handle(file_system_); if (!handle.Init(security_level)) { LOGE("Unable to initialize device files"); - return UNPROVISION_ERROR_1; + return CdmResponseType(UNPROVISION_ERROR_1); } // TODO(b/141705730): Remove usage entries during unprovisioning. if (!file_system_->IsGlobal()) { if (!handle.RemoveCertificate() || !handle.RemoveOemCertificate()) { LOGE("Unable to delete certificate"); - return UNPROVISION_ERROR_2; + return CdmResponseType(UNPROVISION_ERROR_2); } - return NO_ERROR; + return CdmResponseType(NO_ERROR); } if (!handle.DeleteAllFiles()) { LOGE("Unable to delete files"); - return UNPROVISION_ERROR_3; + return CdmResponseType(UNPROVISION_ERROR_3); } - return NO_ERROR; + return CdmResponseType(NO_ERROR); } CdmResponseType CdmEngine::ListStoredLicenses( CdmSecurityLevel security_level, std::vector* key_set_ids) { if (!key_set_ids) { LOGE("Output |key_set_ids| is null"); - return INVALID_PARAMETERS_ENG_22; + return CdmResponseType(INVALID_PARAMETERS_ENG_22); } if (security_level == kSecurityLevelL1 && OkpIsInFallbackMode()) { LOGD("OKP fallback to L3"); @@ -1273,13 +1273,13 @@ CdmResponseType CdmEngine::ListStoredLicenses( DeviceFiles handle(file_system_); if (!handle.Init(security_level)) { LOGE("Unable to initialize device files"); - return LIST_LICENSE_ERROR_1; + return CdmResponseType(LIST_LICENSE_ERROR_1); } if (!handle.ListLicenses(key_set_ids)) { LOGE("ListLicenses call failed"); - return LIST_LICENSE_ERROR_2; + return CdmResponseType(LIST_LICENSE_ERROR_2); } - return NO_ERROR; + return CdmResponseType(NO_ERROR); } CdmResponseType CdmEngine::ListUsageIds( @@ -1288,7 +1288,7 @@ CdmResponseType CdmEngine::ListUsageIds( std::vector* provider_session_tokens) { if (!ksids && !provider_session_tokens) { LOGE("Outputs |ksids| and |provider_session_tokens| are null"); - return INVALID_PARAMETERS_ENG_23; + return CdmResponseType(INVALID_PARAMETERS_ENG_23); } if (security_level == kSecurityLevelL1 && OkpIsInFallbackMode()) { LOGD("OKP fallback to L3"); @@ -1297,14 +1297,14 @@ CdmResponseType CdmEngine::ListUsageIds( DeviceFiles handle(file_system_); if (!handle.Init(security_level)) { LOGE("Unable to initialize device files"); - return LIST_USAGE_ERROR_1; + return CdmResponseType(LIST_USAGE_ERROR_1); } if (!handle.ListUsageIds(app_id, ksids, provider_session_tokens)) { LOGE("Failed: app_id = %s, security_level = %s", IdToString(app_id), CdmSecurityLevelToString(security_level)); - return LIST_USAGE_ERROR_2; + return CdmResponseType(LIST_USAGE_ERROR_2); } - return NO_ERROR; + return CdmResponseType(NO_ERROR); } CdmResponseType CdmEngine::DeleteUsageRecord(const std::string& app_id, @@ -1319,13 +1319,13 @@ CdmResponseType CdmEngine::DeleteUsageRecord(const std::string& app_id, DeviceFiles handle(file_system_); if (!handle.Init(security_level)) { LOGE("Unable to initialize device files"); - return DELETE_USAGE_ERROR_1; + return CdmResponseType(DELETE_USAGE_ERROR_1); } std::string provider_session_token; if (!handle.GetProviderSessionToken(app_id, key_set_id, &provider_session_token)) { LOGE("GetProviderSessionToken failed"); - return DELETE_USAGE_ERROR_2; + return CdmResponseType(DELETE_USAGE_ERROR_2); } return RemoveUsageInfo(app_id, provider_session_token); } @@ -1340,17 +1340,17 @@ CdmResponseType CdmEngine::GetOfflineLicenseState( DeviceFiles handle(file_system_); if (!handle.Init(security_level)) { LOGE("Cannot initialize device files"); - return GET_OFFLINE_LICENSE_STATE_ERROR_1; + return CdmResponseType(GET_OFFLINE_LICENSE_STATE_ERROR_1); } DeviceFiles::CdmLicenseData license_data; DeviceFiles::ResponseType sub_error_code = DeviceFiles::kNoError; if (!handle.RetrieveLicense(key_set_id, &license_data, &sub_error_code)) { LOGE("Failed to retrieve license state: key_set_id = %s", IdToString(key_set_id)); - return GET_OFFLINE_LICENSE_STATE_ERROR_2; + return CdmResponseType(GET_OFFLINE_LICENSE_STATE_ERROR_2); } *license_state = license_data.state; - return NO_ERROR; + return CdmResponseType(NO_ERROR); } CdmResponseType CdmEngine::RemoveOfflineLicense( @@ -1367,7 +1367,7 @@ CdmResponseType CdmEngine::RemoveOfflineLicense( if (!handle.Init(security_level)) { LOGE("Cannot initialize device files: security_level = %s", security_level == kSecurityLevelL3 ? "L3" : "Default"); - return REMOVE_OFFLINE_LICENSE_ERROR_1; + return CdmResponseType(REMOVE_OFFLINE_LICENSE_ERROR_1); } CdmResponseType sts = OpenKeySetSession(key_set_id, &property_set, @@ -1390,7 +1390,7 @@ CdmResponseType CdmEngine::RemoveOfflineLicense( CdmReleaseKeySetMap::iterator iter = release_key_sets_.find(key_set_id); if (iter == release_key_sets_.end()) { LOGE("Key set not found: key_set_id = %s", IdToString(key_set_id)); - sts = REMOVE_OFFLINE_LICENSE_ERROR_2; + sts = CdmResponseType(REMOVE_OFFLINE_LICENSE_ERROR_2); } else { session_id = iter->second.first; sts = RemoveLicense(session_id); @@ -1402,7 +1402,7 @@ CdmResponseType CdmEngine::RemoveOfflineLicense( // and the file should simply be deleted. LOGW("License usage entry is missing, deleting license file"); handle.DeleteLicense(key_set_id); - sts = NO_ERROR; + sts = CdmResponseType(NO_ERROR); } if (sts != NO_ERROR) { @@ -1422,7 +1422,7 @@ CdmResponseType CdmEngine::GetUsageInfo(const std::string& app_id, // try L3. CdmResponseType status = GetUsageInfo(app_id, ssid, kLevelDefault, error_detail, usage_info); - switch (status) { + switch (status.Enum()) { case NEED_PROVISIONING: case GET_USAGE_INFO_ERROR_1: case GET_USAGE_INFO_ERROR_2: @@ -1445,7 +1445,7 @@ CdmResponseType CdmEngine::GetUsageInfo(const std::string& app_id, } if (usage_info == nullptr) { LOGE("Output |usage_info| is null"); - return PARAMETER_NULL; + return CdmResponseType(PARAMETER_NULL); } usage_property_set_->set_security_level(security_level); usage_property_set_->set_app_id(app_id); @@ -1458,7 +1458,7 @@ CdmResponseType CdmEngine::GetUsageInfo(const std::string& app_id, DeviceFiles handle(file_system_); if (!handle.Init(usage_session_->GetSecurityLevel())) { LOGE("Device file init error"); - return GET_USAGE_INFO_ERROR_1; + return CdmResponseType(GET_USAGE_INFO_ERROR_1); } DeviceFiles::CdmUsageData usage_data; @@ -1474,12 +1474,12 @@ CdmResponseType CdmEngine::GetUsageInfo(const std::string& app_id, } if (!handle.Reset(usage_session_->GetSecurityLevel())) { LOGE("Device file init error"); - return GET_USAGE_INFO_ERROR_2; + return CdmResponseType(GET_USAGE_INFO_ERROR_2); } if (!handle.RetrieveUsageInfo(DeviceFiles::GetUsageInfoFileName(app_id), ssid, &usage_data)) { // No entry found for that ssid. - return USAGE_INFO_NOT_FOUND; + return CdmResponseType(USAGE_INFO_NOT_FOUND); } } @@ -1504,7 +1504,7 @@ CdmResponseType CdmEngine::GetUsageInfo(const std::string& app_id, return status; } - return KEY_MESSAGE; + return CdmResponseType(KEY_MESSAGE); } CdmResponseType CdmEngine::GetUsageInfo(const std::string& app_id, @@ -1513,12 +1513,12 @@ CdmResponseType CdmEngine::GetUsageInfo(const std::string& app_id, LOGI("app_id = %s", IdToString(app_id)); if (usage_info == nullptr) { LOGE("Output |usage_info| is null"); - return PARAMETER_NULL; + return CdmResponseType(PARAMETER_NULL); } // Return a random usage report from a random security level RequestedSecurityLevel security_level = wvutil::CdmRandom::RandomBool() ? kLevelDefault : kLevel3; - CdmResponseType status = UNKNOWN_ERROR; + CdmResponseType status(UNKNOWN_ERROR); do { status = GetUsageInfo(app_id, security_level, error_detail, usage_info); if (KEY_MESSAGE == status && !usage_info->empty()) { @@ -1530,8 +1530,9 @@ CdmResponseType CdmEngine::GetUsageInfo(const std::string& app_id, do { status = GetUsageInfo(app_id, security_level, error_detail, usage_info); if (NEED_PROVISIONING == status) - return NO_ERROR; // Valid scenario that one of the security - // levels has not been provisioned + return CdmResponseType( + NO_ERROR); // Valid scenario that one of the security + // levels has not been provisioned } while (KEY_CANCELED == status); return status; } @@ -1543,7 +1544,7 @@ CdmResponseType CdmEngine::GetUsageInfo( RequestedSecurityLevelToString(requested_security_level)); if (usage_info == nullptr) { LOGE("Output |usage_info| is null"); - return PARAMETER_NULL; + return CdmResponseType(PARAMETER_NULL); } if (requested_security_level == kLevelDefault && OkpIsInFallbackMode()) { LOGD("OKP fallback to L3"); @@ -1566,19 +1567,19 @@ CdmResponseType CdmEngine::GetUsageInfo( DeviceFiles handle(file_system_); if (!handle.Init(usage_session_->GetSecurityLevel())) { LOGE("Unable to initialize device files"); - return GET_USAGE_INFO_ERROR_3; + return CdmResponseType(GET_USAGE_INFO_ERROR_3); } std::vector usage_data; if (!handle.RetrieveUsageInfo(DeviceFiles::GetUsageInfoFileName(app_id), &usage_data)) { LOGE("Unable to read usage information"); - return GET_USAGE_INFO_ERROR_4; + return CdmResponseType(GET_USAGE_INFO_ERROR_4); } if (usage_data.empty()) { usage_info->clear(); - return NO_ERROR; + return CdmResponseType(NO_ERROR); } const size_t index = wvutil::CdmRandom::RandomInRange(usage_data.size() - 1); @@ -1597,7 +1598,7 @@ CdmResponseType CdmEngine::GetUsageInfo( usage_info->clear(); usage_info->push_back(request.message); - switch (status) { + switch (status.Enum()) { case KEY_MESSAGE: break; case KEY_CANCELED: // usage information not present in @@ -1622,7 +1623,7 @@ CdmResponseType CdmEngine::RemoveAllUsageInfo( } usage_property_set_->set_app_id(app_id); - CdmResponseType status = NO_ERROR; + CdmResponseType status(NO_ERROR); DeviceFiles handle(file_system_); if (handle.Init(cdm_security_level)) { const RequestedSecurityLevel security_level = @@ -1665,7 +1666,7 @@ CdmResponseType CdmEngine::RemoveAllUsageInfo( if (!handle.DeleteAllUsageInfoForApp( DeviceFiles::GetUsageInfoFileName(app_id), &provider_session_tokens)) { - status = REMOVE_ALL_USAGE_INFO_ERROR_5; + status = CdmResponseType(REMOVE_ALL_USAGE_INFO_ERROR_5); } } } @@ -1695,7 +1696,7 @@ CdmResponseType CdmEngine::RemoveUsageInfo( } usage_property_set_->set_app_id(app_id); - CdmResponseType status = NO_ERROR; + CdmResponseType status(NO_ERROR); for (int j = kSecurityLevelL1; j < kSecurityLevelUnknown; ++j) { DeviceFiles handle(file_system_); if (handle.Init(static_cast(j))) { @@ -1726,18 +1727,18 @@ CdmResponseType CdmEngine::RemoveUsageInfo( status = usage_session_->DeleteUsageEntry(usage_entry_number); if (!handle.DeleteUsageInfo(DeviceFiles::GetUsageInfoFileName(app_id), provider_session_token)) { - status = REMOVE_USAGE_INFO_ERROR_1; + status = CdmResponseType(REMOVE_USAGE_INFO_ERROR_1); } usage_session_.reset(); return status; } } else { LOGE("Failed to initialize L%d device files", j); - status = REMOVE_USAGE_INFO_ERROR_2; + status = CdmResponseType(REMOVE_USAGE_INFO_ERROR_2); } } usage_session_.reset(); - return REMOVE_USAGE_INFO_ERROR_3; + return CdmResponseType(REMOVE_USAGE_INFO_ERROR_3); } CdmResponseType CdmEngine::ReleaseUsageInfo( @@ -1745,12 +1746,12 @@ CdmResponseType CdmEngine::ReleaseUsageInfo( LOGI("message_size = %zu", message.size()); if (!usage_session_) { LOGE("Usage session not initialized"); - return RELEASE_USAGE_INFO_ERROR; + return CdmResponseType(RELEASE_USAGE_INFO_ERROR); } const CdmResponseType status = usage_session_->ReleaseKey(message); usage_session_.reset(); if (NO_ERROR != status) { - LOGE("ReleaseKey failed: status = %d", status); + LOGE("ReleaseKey failed: status = %d", static_cast(status)); } return status; } @@ -1763,23 +1764,23 @@ CdmResponseType CdmEngine::LoadUsageSession(const CdmKeySetId& key_set_id, assert(Properties::AlwaysUseKeySetIds()); if (key_set_id.empty()) { LOGE("Invalid key set ID"); - return EMPTY_KEYSET_ID_ENG_5; + return CdmResponseType(EMPTY_KEYSET_ID_ENG_5); } if (release_message == nullptr) { LOGE("Output |release_message| is null"); - return PARAMETER_NULL; + return CdmResponseType(PARAMETER_NULL); } std::shared_ptr session; if (!session_map_.FindSession(key_set_id, &session)) { LOGE("Session not found: key_set_id = %s", IdToString(key_set_id)); - return SESSION_NOT_FOUND_11; + return CdmResponseType(SESSION_NOT_FOUND_11); } DeviceFiles handle(file_system_); if (!handle.Init(session->GetSecurityLevel())) { LOGE("Unable to initialize device files"); - return LOAD_USAGE_INFO_FILE_ERROR; + return CdmResponseType(LOAD_USAGE_INFO_FILE_ERROR); } std::string app_id; @@ -1793,7 +1794,7 @@ CdmResponseType CdmEngine::LoadUsageSession(const CdmKeySetId& key_set_id, &(usage_data.usage_entry_number), &(usage_data.drm_certificate), &(usage_data.wrapped_private_key))) { LOGE("Unable to find usage information"); - return LOAD_USAGE_INFO_MISSING; + return CdmResponseType(LOAD_USAGE_INFO_MISSING); } int error_detail = NO_ERROR; @@ -1811,7 +1812,7 @@ CdmResponseType CdmEngine::LoadUsageSession(const CdmKeySetId& key_set_id, CdmKeyRequest request; status = session->GenerateReleaseRequest(&request); *release_message = std::move(request.message); - switch (status) { + switch (status.Enum()) { case KEY_MESSAGE: break; case KEY_CANCELED: @@ -1832,14 +1833,14 @@ CdmResponseType CdmEngine::DecryptV16( for (const CdmDecryptionSample& sample : parameters.samples) { if (sample.encrypt_buffer == nullptr) { LOGE("No src encrypt buffer"); - return INVALID_DECRYPT_PARAMETERS_ENG_2; + return CdmResponseType(INVALID_DECRYPT_PARAMETERS_ENG_2); } if (sample.decrypt_buffer == nullptr) { if (!parameters.is_secure && !Properties::Properties::oem_crypto_use_fifo()) { LOGE("No dest decrypt buffer"); - return INVALID_DECRYPT_PARAMETERS_ENG_4; + return CdmResponseType(INVALID_DECRYPT_PARAMETERS_ENG_4); } // else we must be level 1 direct and we don't need to return a buffer. } @@ -1866,12 +1867,12 @@ CdmResponseType CdmEngine::DecryptV16( } if (!session) { LOGE("Session not found: session_id = "); - return SESSION_NOT_FOUND_FOR_DECRYPT; + return CdmResponseType(SESSION_NOT_FOUND_FOR_DECRYPT); } } else { if (!session_map_.FindSession(session_id, &session)) { LOGE("Session not found: session_id = %s", IdToString(session_id)); - return SESSION_NOT_FOUND_FOR_DECRYPT; + return CdmResponseType(SESSION_NOT_FOUND_FOR_DECRYPT); } } @@ -1886,12 +1887,12 @@ CdmResponseType CdmEngine::GenericEncrypt(const std::string& session_id, std::string* out_buffer) { if (out_buffer == nullptr) { LOGE("Output |out_buffer| is null"); - return PARAMETER_NULL; + return CdmResponseType(PARAMETER_NULL); } std::shared_ptr session; if (!session_map_.FindSession(session_id, &session)) { LOGE("Session not found: session_id = %s", IdToString(session_id)); - return SESSION_NOT_FOUND_13; + return CdmResponseType(SESSION_NOT_FOUND_13); } return session->GenericEncrypt(in_buffer, key_id, iv, algorithm, out_buffer); } @@ -1904,12 +1905,12 @@ CdmResponseType CdmEngine::GenericDecrypt(const std::string& session_id, std::string* out_buffer) { if (out_buffer == nullptr) { LOGE("Output |out_buffer| is null"); - return PARAMETER_NULL; + return CdmResponseType(PARAMETER_NULL); } std::shared_ptr session; if (!session_map_.FindSession(session_id, &session)) { LOGE("Session not found: session_id = %s", IdToString(session_id)); - return SESSION_NOT_FOUND_14; + return CdmResponseType(SESSION_NOT_FOUND_14); } return session->GenericDecrypt(in_buffer, key_id, iv, algorithm, out_buffer); } @@ -1921,12 +1922,12 @@ CdmResponseType CdmEngine::GenericSign(const std::string& session_id, std::string* signature) { if (signature == nullptr) { LOGE("Output |signature| is null"); - return PARAMETER_NULL; + return CdmResponseType(PARAMETER_NULL); } std::shared_ptr session; if (!session_map_.FindSession(session_id, &session)) { LOGE("Session not found: session_id = %s", IdToString(session_id)); - return SESSION_NOT_FOUND_15; + return CdmResponseType(SESSION_NOT_FOUND_15); } return session->GenericSign(message, key_id, algorithm, signature); } @@ -1939,7 +1940,7 @@ CdmResponseType CdmEngine::GenericVerify(const std::string& session_id, std::shared_ptr session; if (!session_map_.FindSession(session_id, &session)) { LOGE("Session not found: session_id = %s", IdToString(session_id)); - return SESSION_NOT_FOUND_16; + return CdmResponseType(SESSION_NOT_FOUND_16); } return session->GenericVerify(message, key_id, algorithm, signature); } @@ -1949,15 +1950,15 @@ CdmResponseType CdmEngine::ParseDecryptHashString( uint32_t* frame_number, std::string* hash) { if (session_id == nullptr) { LOGE("Output |session_id| is null"); - return PARAMETER_NULL; + return CdmResponseType(PARAMETER_NULL); } if (frame_number == nullptr) { LOGE("Output |frame_number| is null"); - return PARAMETER_NULL; + return CdmResponseType(PARAMETER_NULL); } if (hash == nullptr) { LOGE("Output |hash| is null"); - return PARAMETER_NULL; + return CdmResponseType(PARAMETER_NULL); } std::stringstream ss; std::string token; @@ -1971,7 +1972,7 @@ CdmResponseType CdmEngine::ParseDecryptHashString( "Hash string has invalid format: " "Unexpected number of tokens: %zu (hash_string = %s)", tokens.size(), hash_string.c_str()); - return INVALID_DECRYPT_HASH_FORMAT; + return CdmResponseType(INVALID_DECRYPT_HASH_FORMAT); } for (size_t i = 0; i < tokens.size(); ++i) { @@ -1980,7 +1981,7 @@ CdmResponseType CdmEngine::ParseDecryptHashString( "Hash string has invalid format: token %zu of length 0: " "hash_string = %s", i, hash_string.c_str()); - return INVALID_DECRYPT_HASH_FORMAT; + return CdmResponseType(INVALID_DECRYPT_HASH_FORMAT); } } @@ -1989,15 +1990,15 @@ CdmResponseType CdmEngine::ParseDecryptHashString( if (!(iss >> *frame_number)) { LOGE("Error while trying to convert frame number to a numeric format: %s", hash_string.c_str()); - return INVALID_DECRYPT_HASH_FORMAT; + return CdmResponseType(INVALID_DECRYPT_HASH_FORMAT); } *hash = wvutil::a2bs_hex(tokens[2]); if (hash->empty()) { LOGE("Malformed hash: %s", hash_string.c_str()); - return INVALID_DECRYPT_HASH_FORMAT; + return CdmResponseType(INVALID_DECRYPT_HASH_FORMAT); } - return NO_ERROR; + return CdmResponseType(NO_ERROR); } CdmResponseType CdmEngine::SetDecryptHash(const CdmSessionId& session_id, @@ -2006,7 +2007,7 @@ CdmResponseType CdmEngine::SetDecryptHash(const CdmSessionId& session_id, LOGI("session_id = %s", IdToString(session_id)); std::shared_ptr session; if (!session_map_.FindSession(session_id, &session)) { - return SESSION_NOT_FOUND_20; + return CdmResponseType(SESSION_NOT_FOUND_20); } return session->SetDecryptHash(frame_number, hash); } @@ -2016,7 +2017,7 @@ CdmResponseType CdmEngine::GetDecryptHashError(const CdmSessionId& session_id, LOGI("session_id = %s", IdToString(session_id)); std::shared_ptr session; if (!session_map_.FindSession(session_id, &session)) { - return SESSION_NOT_FOUND_20; + return CdmResponseType(SESSION_NOT_FOUND_20); } return session->GetDecryptHashError(error_string); } @@ -2150,10 +2151,10 @@ CdmResponseType CdmEngine::SetPlaybackId(const CdmSessionId& session_id, std::shared_ptr session; if (!session_map_.FindSession(session_id, &session)) { LOGE("Session not found: session_id = %s", IdToString(session_id)); - return SESSION_NOT_FOUND_23; + return CdmResponseType(SESSION_NOT_FOUND_23); } session->GetMetrics()->playback_id_.Record(playback_id); - return NO_ERROR; + return CdmResponseType(NO_ERROR); } std::string CdmEngine::MapHdcpVersion(CryptoSession::HdcpCapability version) { diff --git a/libwvdrmengine/cdm/core/src/cdm_session.cpp b/libwvdrmengine/cdm/core/src/cdm_session.cpp index 87659180..dd4f40bf 100644 --- a/libwvdrmengine/cdm/core/src/cdm_session.cpp +++ b/libwvdrmengine/cdm/core/src/cdm_session.cpp @@ -29,7 +29,7 @@ #define RETURN_STATUS_IF_NULL(PARAM) \ if ((PARAM) == nullptr) { \ LOGE("Output parameter |" STRINGIFY(PARAM) "| not provided"); \ - return PARAMETER_NULL; \ + return CdmResponseType(PARAMETER_NULL); \ } #define RETURN_FALSE_IF_NULL(PARAM) \ @@ -46,7 +46,7 @@ const size_t kKeySetIdLength = 14; template void SetErrorDetail(int* error_detail, T error_code) { if (error_detail != nullptr) { - *error_detail = error_code; + *error_detail = static_cast(error_code); } } @@ -118,7 +118,7 @@ CdmResponseType CdmSession::Init(CdmClientPropertySet* cdm_client_property_set, bool forced_level3) { if (initialized_) { LOGE("Failed due to previous initialization"); - return REINIT_ERROR; + return CdmResponseType(REINIT_ERROR); } if ((cdm_client_property_set && cdm_client_property_set->security_level() == @@ -144,7 +144,7 @@ CdmResponseType CdmSession::Init(CdmClientPropertySet* cdm_client_property_set, if (!file_handle_->Init(security_level_)) { LOGE("Unable to initialize file handle"); - return SESSION_FILE_HANDLE_INIT_ERROR; + return CdmResponseType(SESSION_FILE_HANDLE_INIT_ERROR); } bool has_support = false; @@ -159,7 +159,7 @@ CdmResponseType CdmSession::Init(CdmClientPropertySet* cdm_client_property_set, // The actual validation and loading of a certificate will happen when // a key request is generated or an offline license is loaded. if (!file_handle_->HasCertificate(atsc_mode_enabled_)) - return NEED_PROVISIONING; + return CdmResponseType(NEED_PROVISIONING); if (forced_session_id) { key_set_id_ = *forced_session_id; @@ -178,7 +178,7 @@ CdmResponseType CdmSession::Init(CdmClientPropertySet* cdm_client_property_set, if (session_id_.empty()) { LOGE("Empty session ID"); - return EMPTY_SESSION_ID; + return CdmResponseType(EMPTY_SESSION_ID); } if (cdm_client_property_set) Properties::AddSessionPropertySet(session_id_, cdm_client_property_set); @@ -196,13 +196,13 @@ CdmResponseType CdmSession::Init(CdmClientPropertySet* cdm_client_property_set, if (!license_parser_->Init(Properties::UsePrivacyMode(session_id_), service_certificate, crypto_session_.get(), policy_engine_.get())) - return LICENSE_PARSER_INIT_ERROR; + return CdmResponseType(LICENSE_PARSER_INIT_ERROR); license_received_ = false; is_initial_decryption_ = true; initialized_ = true; closed_ = false; - return NO_ERROR; + return CdmResponseType(NO_ERROR); } CdmResponseType CdmSession::RestoreOfflineSession(const CdmKeySetId& key_set_id, @@ -210,7 +210,7 @@ CdmResponseType CdmSession::RestoreOfflineSession(const CdmKeySetId& key_set_id, int* error_detail) { if (!initialized_) { LOGE("CDM session not initialized"); - return NOT_INITIALIZED_ERROR; + return CdmResponseType(NOT_INITIALIZED_ERROR); } if (!key_set_id_.empty()) { file_handle_->UnreserveLicenseId(key_set_id_); @@ -219,7 +219,7 @@ CdmResponseType CdmSession::RestoreOfflineSession(const CdmKeySetId& key_set_id, LOGE( "Disallow multiple offline license restores or restoring a license if " "a license has already been loaded"); - return RESTORE_OFFLINE_LICENSE_ERROR_3; + return CdmResponseType(RESTORE_OFFLINE_LICENSE_ERROR_3); } key_set_id_ = key_set_id; @@ -233,8 +233,9 @@ CdmResponseType CdmSession::RestoreOfflineSession(const CdmKeySetId& key_set_id, DeviceFiles::ResponseTypeToString(sub_error_code), IdToString(key_set_id)); SetErrorDetail(error_detail, sub_error_code); - return sub_error_code == DeviceFiles::kFileNotFound ? KEYSET_ID_NOT_FOUND_4 - : GET_LICENSE_ERROR; + return sub_error_code == DeviceFiles::kFileNotFound + ? CdmResponseType(KEYSET_ID_NOT_FOUND_4) + : CdmResponseType(GET_LICENSE_ERROR); } offline_init_data_ = std::move(license_data.pssh_data); key_request_ = std::move(license_data.license_request); @@ -266,7 +267,7 @@ CdmResponseType CdmSession::RestoreOfflineSession(const CdmKeySetId& key_set_id, LOGE("Invalid offline license state: state = %s, license_type = %s", CdmOfflineLicenseStateToString(license_data.state), CdmLicenseTypeToString(license_type)); - return GET_RELEASED_LICENSE_ERROR; + return CdmResponseType(GET_RELEASED_LICENSE_ERROR); } std::string provider_session_token; @@ -278,7 +279,7 @@ CdmResponseType CdmSession::RestoreOfflineSession(const CdmKeySetId& key_set_id, sign_fake_request = true; // TODO(b/169483174): remove this line. } else if (!VerifyOfflineUsageEntry()) { LOGE("License usage entry is invalid, cannot restore"); - return LICENSE_USAGE_ENTRY_MISSING; + return CdmResponseType(LICENSE_USAGE_ENTRY_MISSING); } else { CdmResponseType sts = usage_table_header_->LoadEntry( crypto_session_.get(), usage_entry_, usage_entry_number_); @@ -286,7 +287,7 @@ CdmResponseType CdmSession::RestoreOfflineSession(const CdmKeySetId& key_set_id, if (sts == LOAD_USAGE_ENTRY_INVALID_SESSION) { LOGE("License loaded in different session: key_set_id = %s", IdToString(key_set_id)); - return USAGE_ENTRY_ALREADY_LOADED; + return CdmResponseType(USAGE_ENTRY_ALREADY_LOADED); } if (sts != NO_ERROR) { LOGE("Failed to load usage entry: status = %d", static_cast(sts)); @@ -317,8 +318,8 @@ CdmResponseType CdmSession::RestoreOfflineSession(const CdmKeySetId& key_set_id, license_data.drm_certificate, key_request_, key_response_); if (result != NO_ERROR) { - SetErrorDetail(error_detail, result); - return RELEASE_LICENSE_ERROR_1; + SetErrorDetail(error_detail, result.Enum()); + return CdmResponseType(RELEASE_LICENSE_ERROR_1); } } else { result = license_parser_->RestoreOfflineLicense( @@ -327,8 +328,8 @@ CdmResponseType CdmSession::RestoreOfflineSession(const CdmKeySetId& key_set_id, license_data.last_playback_time, license_data.grace_period_end_time, this); if (result != NO_ERROR) { - SetErrorDetail(error_detail, result); - return RESTORE_OFFLINE_LICENSE_ERROR_2; + SetErrorDetail(error_detail, result.Enum()); + return CdmResponseType(RESTORE_OFFLINE_LICENSE_ERROR_2); } } @@ -348,14 +349,14 @@ CdmResponseType CdmSession::RestoreOfflineSession(const CdmKeySetId& key_set_id, is_offline_ = true; is_release_ = license_type == kLicenseTypeRelease; has_license_been_restored_ = true; - return KEY_ADDED; + return CdmResponseType(KEY_ADDED); } CdmResponseType CdmSession::RestoreUsageSession( const DeviceFiles::CdmUsageData& usage_data, int* error_detail) { if (!initialized_) { LOGE("CDM session not initialized"); - return NOT_INITIALIZED_ERROR; + return CdmResponseType(NOT_INITIALIZED_ERROR); } if (!key_set_id_.empty()) { file_handle_->UnreserveLicenseId(key_set_id_); @@ -371,7 +372,7 @@ CdmResponseType CdmSession::RestoreUsageSession( usage_data.drm_certificate, usage_data.wrapped_private_key); if (status != NO_ERROR) return status; - CdmResponseType sts = NO_ERROR; + CdmResponseType sts(NO_ERROR); if (supports_usage_info()) { sts = usage_table_header_->LoadEntry(crypto_session_.get(), usage_entry_, usage_entry_number_); @@ -387,7 +388,7 @@ CdmResponseType CdmSession::RestoreUsageSession( if (sts != NO_ERROR) { SetErrorDetail(error_detail, sts); - return RELEASE_LICENSE_ERROR_2; + return CdmResponseType(RELEASE_LICENSE_ERROR_2); } if (supports_usage_info()) { @@ -405,7 +406,7 @@ CdmResponseType CdmSession::RestoreUsageSession( license_received_ = true; is_offline_ = false; is_release_ = true; - return KEY_ADDED; + return CdmResponseType(KEY_ADDED); } // This is a thin wrapper that initiates the latency metric. @@ -429,7 +430,7 @@ CdmResponseType CdmSession::GenerateKeyRequestInternal( const CdmAppParameterMap& app_parameters, CdmKeyRequest* key_request) { if (!initialized_) { LOGE("CDM session not initialized"); - return NOT_INITIALIZED_ERROR; + return CdmResponseType(NOT_INITIALIZED_ERROR); } RETURN_STATUS_IF_NULL(key_request); @@ -457,7 +458,7 @@ CdmResponseType CdmSession::GenerateKeyRequestInternal( return license_parser_->HandleEmbeddedKeyData(init_data); default: LOGE("Unrecognized license type: %d", static_cast(license_type)); - return INVALID_LICENSE_TYPE; + return CdmResponseType(INVALID_LICENSE_TYPE); } if (is_release_) { @@ -479,15 +480,15 @@ CdmResponseType CdmSession::GenerateKeyRequestInternal( if (!init_data.is_supported()) { LOGW("Unsupported init data type: %s", init_data.type().c_str()); - return UNSUPPORTED_INIT_DATA; + return CdmResponseType(UNSUPPORTED_INIT_DATA); } if (init_data.IsEmpty() && !license_parser_->HasInitData()) { LOGW("Init data absent"); - return INIT_DATA_NOT_FOUND; + return CdmResponseType(INIT_DATA_NOT_FOUND); } if (is_offline_ && key_set_id_.empty()) { LOGE("Key set ID not set"); - return KEY_REQUEST_ERROR_1; + return CdmResponseType(KEY_REQUEST_ERROR_1); } // Attempt to load provisioned private key if available. CdmResponseType status = LoadPrivateKey(); @@ -504,7 +505,7 @@ CdmResponseType CdmSession::GenerateKeyRequestInternal( offline_init_data_ = init_data.data(); offline_release_server_url_ = key_request->url; } - return KEY_MESSAGE; + return CdmResponseType(KEY_MESSAGE); } // This thin wrapper allows us to update metrics. @@ -518,12 +519,12 @@ CdmResponseType CdmSession::AddKey(const CdmKeyResponse& key_response) { CdmResponseType CdmSession::AddKeyInternal(const CdmKeyResponse& key_response) { if (!initialized_) { LOGE("Not initialized"); - return NOT_INITIALIZED_ERROR; + return CdmResponseType(NOT_INITIALIZED_ERROR); } if (is_release_) { const CdmResponseType sts = ReleaseKey(key_response); - return (sts == NO_ERROR) ? KEY_ADDED : sts; + return (sts == NO_ERROR) ? CdmResponseType(KEY_ADDED) : sts; } if (license_received_) { // renewal return RenewKey(key_response); @@ -571,7 +572,8 @@ CdmResponseType CdmSession::AddKeyInternal(const CdmKeyResponse& key_response) { } } - if (sts != KEY_ADDED) return (sts == KEY_ERROR) ? ADD_KEY_ERROR : sts; + if (sts != KEY_ADDED) + return (sts == KEY_ERROR) ? CdmResponseType(ADD_KEY_ERROR) : sts; license_received_ = true; key_response_ = key_response; @@ -594,13 +596,13 @@ CdmResponseType CdmSession::AddKeyInternal(const CdmKeyResponse& key_response) { } has_license_been_loaded_ = true; - return KEY_ADDED; + return CdmResponseType(KEY_ADDED); } CdmResponseType CdmSession::QueryStatus(CdmQueryMap* query_response) { if (!initialized_) { LOGE("CDM session not initialized"); - return NOT_INITIALIZED_ERROR; + return CdmResponseType(NOT_INITIALIZED_ERROR); } RETURN_STATUS_IF_NULL(query_response); @@ -623,9 +625,9 @@ CdmResponseType CdmSession::QueryStatus(CdmQueryMap* query_response) { QUERY_VALUE_SECURITY_LEVEL_UNKNOWN; break; default: - return INVALID_QUERY_KEY; + return CdmResponseType(INVALID_QUERY_KEY); } - return NO_ERROR; + return CdmResponseType(NO_ERROR); } CdmResponseType CdmSession::SetServiceCertificate( @@ -646,19 +648,19 @@ CdmResponseType CdmSession::QueryOemCryptoSessionId( CdmQueryMap* query_response) { if (!initialized_) { LOGE("CDM session not initialized"); - return NOT_INITIALIZED_ERROR; + return CdmResponseType(NOT_INITIALIZED_ERROR); } RETURN_STATUS_IF_NULL(query_response); (*query_response)[QUERY_KEY_OEMCRYPTO_SESSION_ID] = std::to_string(crypto_session_->oec_session_id()); - return NO_ERROR; + return CdmResponseType(NO_ERROR); } // Decrypt() - Accept encrypted buffer and return decrypted data. CdmResponseType CdmSession::Decrypt(const CdmDecryptionParametersV16& params) { if (!initialized_) { - return NOT_INITIALIZED_ERROR; + return CdmResponseType(NOT_INITIALIZED_ERROR); } bool is_protected = std::any_of( @@ -677,18 +679,19 @@ CdmResponseType CdmSession::Decrypt(const CdmDecryptionParametersV16& params) { // the security level is not high enough yet. if (is_protected) { if (!policy_engine_->CanDecryptContent(params.key_id)) { - if (policy_engine_->IsLicenseForFuture()) return DECRYPT_NOT_READY; + if (policy_engine_->IsLicenseForFuture()) + return CdmResponseType(DECRYPT_NOT_READY); if (!policy_engine_->IsSufficientOutputProtection(params.key_id)) { LOGE("Key use prohibited as HDCP or resolution requirements not met"); - return INSUFFICIENT_OUTPUT_PROTECTION; + return CdmResponseType(INSUFFICIENT_OUTPUT_PROTECTION); } - return NEED_KEY; + return CdmResponseType(NEED_KEY); } if (!policy_engine_->CanUseKeyForSecurityLevel(params.key_id)) { LOGE( "Key use prohibited as security level requirements in the policy" " not met"); - return KEY_PROHIBITED_FOR_SECURITY_LEVEL; + return CdmResponseType(KEY_PROHIBITED_FOR_SECURITY_LEVEL); } } @@ -715,7 +718,7 @@ CdmResponseType CdmSession::Decrypt(const CdmDecryptionParametersV16& params) { const int64_t current_time = clock.GetCurrentTime(); if (policy_engine_->HasLicenseOrRentalOrPlaybackDurationExpired( current_time)) { - return NEED_KEY; + return CdmResponseType(NEED_KEY); } } @@ -728,7 +731,7 @@ CdmResponseType CdmSession::Decrypt(const CdmDecryptionParametersV16& params) { CdmResponseType CdmSession::GenerateRenewalRequest(CdmKeyRequest* key_request) { if (!initialized_) { LOGE("CDM session not initialized"); - return NOT_INITIALIZED_ERROR; + return CdmResponseType(NOT_INITIALIZED_ERROR); } RETURN_STATUS_IF_NULL(key_request); @@ -744,14 +747,14 @@ CdmResponseType CdmSession::GenerateRenewalRequest(CdmKeyRequest* key_request) { } key_request_type_ = key_request->type; license_request_latency_.Start(); // Start or restart timer. - return KEY_MESSAGE; + return CdmResponseType(KEY_MESSAGE); } // RenewKey() - Accept renewal response and update key info. CdmResponseType CdmSession::RenewKey(const CdmKeyResponse& key_response) { if (!initialized_) { LOGE("CDM session not initialized"); - return NOT_INITIALIZED_ERROR; + return CdmResponseType(NOT_INITIALIZED_ERROR); } CdmResponseType sts = license_parser_->HandleKeyUpdateResponse( /* is renewal */ true, @@ -760,20 +763,21 @@ CdmResponseType CdmSession::RenewKey(const CdmKeyResponse& key_response) { // Record the timing on success. UpdateRequestLatencyTiming(sts); - if (sts != KEY_ADDED) return (sts == KEY_ERROR) ? RENEW_KEY_ERROR_1 : sts; + if (sts != KEY_ADDED) + return (sts == KEY_ERROR) ? CdmResponseType(RENEW_KEY_ERROR_1) : sts; if (is_offline_) { offline_key_renewal_response_ = key_response; if (!StoreLicense(kLicenseStateActive, nullptr /* error_detail */)) - return RENEW_KEY_ERROR_2; + return CdmResponseType(RENEW_KEY_ERROR_2); } - return KEY_ADDED; + return CdmResponseType(KEY_ADDED); } CdmResponseType CdmSession::GenerateReleaseRequest(CdmKeyRequest* key_request) { if (!initialized_) { LOGE("CDM session not initialized"); - return NOT_INITIALIZED_ERROR; + return CdmResponseType(NOT_INITIALIZED_ERROR); } RETURN_STATUS_IF_NULL(key_request); is_release_ = true; @@ -798,24 +802,24 @@ CdmResponseType CdmSession::GenerateReleaseRequest(CdmKeyRequest* key_request) { if (is_offline_) { // Mark license as being released if (!StoreLicense(kLicenseStateReleasing, nullptr)) - return RELEASE_KEY_REQUEST_ERROR; + return CdmResponseType(RELEASE_KEY_REQUEST_ERROR); } else if (!usage_provider_session_token_.empty()) { if (supports_usage_info()) { - if (!UpdateUsageInfo()) return RELEASE_USAGE_INFO_FAILED; + if (!UpdateUsageInfo()) return CdmResponseType(RELEASE_USAGE_INFO_FAILED); } } key_request_type_ = key_request->type; license_request_latency_.Start(); // Start or restart timer. - return KEY_MESSAGE; + return CdmResponseType(KEY_MESSAGE); } // ReleaseKey() - Accept release response and release license. CdmResponseType CdmSession::ReleaseKey(const CdmKeyResponse& key_response) { if (!initialized_) { LOGE("CDM session not initialized"); - return NOT_INITIALIZED_ERROR; + return CdmResponseType(NOT_INITIALIZED_ERROR); } CdmResponseType sts = license_parser_->HandleKeyUpdateResponse( /* is renewal */ false, @@ -823,7 +827,8 @@ CdmResponseType CdmSession::ReleaseKey(const CdmKeyResponse& key_response) { // Record the timing on success. UpdateRequestLatencyTiming(sts); - if (sts != KEY_ADDED) return (sts == KEY_ERROR) ? RELEASE_KEY_ERROR : sts; + if (sts != KEY_ADDED) + return (sts == KEY_ERROR) ? CdmResponseType(RELEASE_KEY_ERROR) : sts; return RemoveLicense(); } @@ -831,11 +836,11 @@ CdmResponseType CdmSession::ReleaseKey(const CdmKeyResponse& key_response) { CdmResponseType CdmSession::DeleteUsageEntry(uint32_t usage_entry_number) { if (!initialized_) { LOGE("CDM session not initialized"); - return NOT_INITIALIZED_ERROR; + return CdmResponseType(NOT_INITIALIZED_ERROR); } if (!supports_usage_info()) { LOGE("Cannot delete entry, usage table not supported"); - return INCORRECT_USAGE_SUPPORT_TYPE_1; + return CdmResponseType(INCORRECT_USAGE_SUPPORT_TYPE_1); } // The usage entry cannot be deleted if it has a crypto session handling @@ -856,7 +861,7 @@ CdmResponseType CdmSession::DeleteUsageEntry(uint32_t usage_entry_number) { if (usage_table_header_ == nullptr) { LOGE("Usage table header unavailable"); - return INCORRECT_USAGE_SUPPORT_TYPE_1; + return CdmResponseType(INCORRECT_USAGE_SUPPORT_TYPE_1); } sts = usage_table_header_->InvalidateEntry( @@ -910,32 +915,32 @@ bool CdmSession::GenerateKeySetId(bool atsc_mode_enabled, CdmResponseType CdmSession::StoreLicense() { if (is_temporary_) { LOGE("Session type prohibits storage"); - return STORAGE_PROHIBITED; + return CdmResponseType(STORAGE_PROHIBITED); } if (is_offline_) { if (key_set_id_.empty()) { LOGE("No key set ID"); - return EMPTY_KEYSET_ID; + return CdmResponseType(EMPTY_KEYSET_ID); } if (!license_parser_->is_offline()) { LOGE("License policy prohibits storage"); - return OFFLINE_LICENSE_PROHIBITED; + return CdmResponseType(OFFLINE_LICENSE_PROHIBITED); } if (!StoreLicense(kLicenseStateActive, nullptr)) { LOGE("Unable to store license"); - return STORE_LICENSE_ERROR_1; + return CdmResponseType(STORE_LICENSE_ERROR_1); } - return NO_ERROR; + return CdmResponseType(NO_ERROR); } // if (is_offline_) std::string provider_session_token = license_parser_->provider_session_token(); if (provider_session_token.empty()) { LOGE("No provider session token and not offline"); - return STORE_LICENSE_ERROR_2; + return CdmResponseType(STORE_LICENSE_ERROR_2); } std::string app_id; @@ -955,9 +960,9 @@ CdmResponseType CdmSession::StoreLicense() { file_handle_->DeleteAllUsageInfoForApp( DeviceFiles::GetUsageInfoFileName(app_id), &provider_session_tokens); - return STORE_USAGE_INFO_ERROR; + return CdmResponseType(STORE_USAGE_INFO_ERROR); } - return NO_ERROR; + return CdmResponseType(NO_ERROR); } bool CdmSession::StoreLicense(CdmOfflineLicenseState state, int* error_detail) { @@ -995,7 +1000,7 @@ CdmResponseType CdmSession::RemoveKeys() { crypto_metrics_, crypto_session_open_, sts, requested_security_level_); policy_engine_.reset( new PolicyEngine(session_id_, nullptr, crypto_session_.get())); - return NO_ERROR; + return CdmResponseType(NO_ERROR); } CdmResponseType CdmSession::RemoveLicense() { @@ -1005,7 +1010,7 @@ CdmResponseType CdmSession::RemoveLicense() { } DeleteLicenseFile(); } - return NO_ERROR; + return CdmResponseType(NO_ERROR); } bool CdmSession::DeleteLicenseFile() { @@ -1054,10 +1059,10 @@ CdmResponseType CdmSession::UpdateUsageEntryInformation() { LOGE("Unexpected state: usage_support = %s, PST present = %s, ", supports_usage_info() ? "true" : "false", has_provider_session_token() ? "yes" : "no"); - return INCORRECT_USAGE_SUPPORT_TYPE_2; + return CdmResponseType(INCORRECT_USAGE_SUPPORT_TYPE_2); } - CdmResponseType sts = NO_ERROR; + CdmResponseType sts(NO_ERROR); // TODO(blueeyes): Add measurements to all UpdateEntry calls in a way that // allos us to isolate this particular use case within // UpdateUsageEntryInformation. @@ -1073,7 +1078,7 @@ CdmResponseType CdmSession::UpdateUsageEntryInformation() { else if (!usage_provider_session_token_.empty()) UpdateUsageInfo(); - return NO_ERROR; + return CdmResponseType(NO_ERROR); } CdmResponseType CdmSession::GenericEncrypt(const std::string& in_buffer, @@ -1190,7 +1195,7 @@ CdmResponseType CdmSession::LoadPrivateKey() { if (file_handle_->RetrieveCertificate(atsc_mode_enabled_, &drm_certificate, &private_key, nullptr, &system_id) != DeviceFiles::kCertificateValid) { - return NEED_PROVISIONING; + return CdmResponseType(NEED_PROVISIONING); } return LoadPrivateKey(drm_certificate, private_key); @@ -1208,7 +1213,7 @@ CdmResponseType CdmSession::LoadPrivateOrLegacyKey( if (file_handle_->RetrieveLegacyCertificate( &drm_certificate, &wrapped_private_key, nullptr, nullptr) != DeviceFiles::kCertificateValid) - return NEED_PROVISIONING; + return CdmResponseType(NEED_PROVISIONING); return LoadPrivateKey(drm_certificate, wrapped_private_key); } @@ -1221,19 +1226,19 @@ CdmResponseType CdmSession::LoadPrivateKey( crypto_metrics_, crypto_session_load_certificate_private_key_, load_cert_sts); - switch (load_cert_sts) { + switch (load_cert_sts.Enum()) { case NO_ERROR: metrics_->drm_certificate_key_type_.Record( DrmKeyTypeToMetricValue(private_key.type())); drm_certificate_ = drm_certificate; wrapped_private_key_ = std::move(private_key); - return NO_ERROR; + return CdmResponseType(NO_ERROR); case SESSION_LOST_STATE_ERROR: case SYSTEM_INVALIDATED_ERROR: return load_cert_sts; default: - return NEED_PROVISIONING; + return CdmResponseType(NEED_PROVISIONING); } } diff --git a/libwvdrmengine/cdm/core/src/certificate_provisioning.cpp b/libwvdrmengine/cdm/core/src/certificate_provisioning.cpp index 6d6ef6a9..9a55654d 100644 --- a/libwvdrmengine/cdm/core/src/certificate_provisioning.cpp +++ b/libwvdrmengine/cdm/core/src/certificate_provisioning.cpp @@ -123,7 +123,7 @@ CdmResponseType CertificateProvisioning::SetSpoidParameter( ProvisioningRequest* request) { if (!request) { LOGE("Output parameter |request| is not provided"); - return PARAMETER_NULL; + return CdmResponseType(PARAMETER_NULL); } if (!spoid.empty()) { // Use the SPOID that has been pre-provided @@ -133,7 +133,7 @@ CdmResponseType CertificateProvisioning::SetSpoidParameter( LOGE( "Failed to set provider ID: " "Service certificate provider ID is empty"); - return SERVICE_CERTIFICATE_PROVIDER_ID_EMPTY; + return CdmResponseType(SERVICE_CERTIFICATE_PROVIDER_ID_EMPTY); } request->set_provider_id(service_certificate_->provider_id()); } else if (origin != EMPTY_ORIGIN) { @@ -149,7 +149,7 @@ CdmResponseType CertificateProvisioning::SetSpoidParameter( } request->set_stable_id(device_unique_id + origin); } // No else clause, by design. It is valid to do nothing. - return NO_ERROR; + return CdmResponseType(NO_ERROR); } // Return the provisioning protocol version - dictated by OEMCrypto @@ -191,7 +191,7 @@ CdmResponseType CertificateProvisioning::GetProvisioningRequestInternal( if (!request || !default_url) { LOGE("Output parameter |%s| is not provided", request ? "default_url" : "request"); - return CERT_PROVISIONING_REQUEST_ERROR_1; + return CdmResponseType(CERT_PROVISIONING_REQUEST_ERROR_1); } default_url->assign(kProvisioningServerUrl); @@ -223,7 +223,7 @@ CdmResponseType CertificateProvisioning::GetProvisioningRequestInternal( if (status != NO_ERROR) { LOGE("Failed to generate a nonce: status = %d", static_cast(status)); return status == NONCE_GENERATION_ERROR - ? CERT_PROVISIONING_NONCE_GENERATION_ERROR + ? CdmResponseType(CERT_PROVISIONING_NONCE_GENERATION_ERROR) : status; } @@ -243,7 +243,7 @@ CdmResponseType CertificateProvisioning::GetProvisioningRequestInternal( break; default: LOGE("Unknown certificate type: %d", static_cast(cert_type)); - return CERT_PROVISIONING_INVALID_CERT_TYPE; + return CdmResponseType(CERT_PROVISIONING_INVALID_CERT_TYPE); } cert_type_ = cert_type; @@ -269,7 +269,7 @@ CdmResponseType CertificateProvisioning::GetProvisioningRequestInternal( if (request_signature.empty()) { LOGE("Request signature is empty"); - return CERT_PROVISIONING_REQUEST_ERROR_4; + return CdmResponseType(CERT_PROVISIONING_REQUEST_ERROR_4); } SignedProvisioningMessage signed_provisioning_msg; @@ -289,7 +289,7 @@ CdmResponseType CertificateProvisioning::GetProvisioningRequestInternal( } else { *request = std::move(serialized_request); } - return NO_ERROR; + return CdmResponseType(NO_ERROR); } CdmResponseType CertificateProvisioning::GetProvisioning40RequestInternal( @@ -298,19 +298,19 @@ CdmResponseType CertificateProvisioning::GetProvisioning40RequestInternal( std::string* default_url) { if (!crypto_session_->IsOpen()) { LOGE("Crypto session is not open"); - return PROVISIONING_4_CRYPTO_SESSION_NOT_OPEN; + return CdmResponseType(PROVISIONING_4_CRYPTO_SESSION_NOT_OPEN); } if (file_system == nullptr) { LOGE("file_system is nullptr but is required in provisioning 4"); - return PROVISIONING_4_FILE_SYSTEM_IS_NULL; + return CdmResponseType(PROVISIONING_4_FILE_SYSTEM_IS_NULL); } const CdmSecurityLevel security_level = crypto_session_->GetSecurityLevel(); wvutil::FileSystem global_file_system; DeviceFiles global_file_handle(&global_file_system); if (!global_file_handle.Init(security_level)) { LOGE("Failed to initialize global DeviceFiles"); - return PROVISIONING_4_FAILED_TO_INITIALIZE_DEVICE_FILES; + return CdmResponseType(PROVISIONING_4_FAILED_TO_INITIALIZE_DEVICE_FILES); } ProvisioningRequest provisioning_request; @@ -415,7 +415,7 @@ CdmResponseType CertificateProvisioning::GetProvisioning40RequestInternal( } else { *request = std::move(serialized_request); } - return NO_ERROR; + return CdmResponseType(NO_ERROR); } CdmResponseType CertificateProvisioning::FillEncryptedClientId( @@ -433,7 +433,7 @@ CertificateProvisioning::FillEncryptedClientIdWithAdditionalParameter( ProvisioningRequest& provisioning_request, const ServiceCertificate& service_certificate) { if (!crypto_session_->IsOpen()) { - return UNKNOWN_ERROR; + return CdmResponseType(UNKNOWN_ERROR); } wvcdm::ClientIdentification id; @@ -447,7 +447,7 @@ CertificateProvisioning::FillEncryptedClientIdWithAdditionalParameter( if (!service_certificate.has_certificate()) { LOGE("Service certificate not staged"); - return CERT_PROVISIONING_EMPTY_SERVICE_CERTIFICATE; + return CdmResponseType(CERT_PROVISIONING_EMPTY_SERVICE_CERTIFICATE); } // Encrypt client identification @@ -461,7 +461,7 @@ CdmResponseType CertificateProvisioning::HandleProvisioning40Response( ProvisioningResponse provisioning_response; if (response_message.empty() || !provisioning_response.ParseFromString(response_message)) { - return PROVISIONING_4_RESPONSE_FAILED_TO_PARSE_MESSAGE; + return CdmResponseType(PROVISIONING_4_RESPONSE_FAILED_TO_PARSE_MESSAGE); } if (provisioning_response.has_status() && provisioning_response.status() != ProvisioningResponse::NO_ERROR) { @@ -469,9 +469,9 @@ CdmResponseType CertificateProvisioning::HandleProvisioning40Response( switch (provisioning_response.status()) { case ProvisioningResponse::REVOKED_DEVICE_CREDENTIALS: case ProvisioningResponse::REVOKED_DEVICE_SERIES: - return DEVICE_REVOKED; + return CdmResponseType(DEVICE_REVOKED); default: - return PROVISIONING_4_RESPONSE_HAS_ERROR_STATUS; + return CdmResponseType(PROVISIONING_4_RESPONSE_HAS_ERROR_STATUS); } } @@ -479,12 +479,12 @@ CdmResponseType CertificateProvisioning::HandleProvisioning40Response( provisioning_response.device_certificate(); if (device_certificate.empty()) { LOGE("Provisioning response has no certificate"); - return PROVISIONING_4_RESPONSE_HAS_NO_CERTIFICATE; + return CdmResponseType(PROVISIONING_4_RESPONSE_HAS_NO_CERTIFICATE); } if (provisioning_40_wrapped_private_key_.empty()) { LOGE("No private key was generated"); - return PROVISIONING_4_NO_PRIVATE_KEY; + return CdmResponseType(PROVISIONING_4_NO_PRIVATE_KEY); } const CryptoWrappedKey private_key(provisioning_40_key_type_, provisioning_40_wrapped_private_key_); @@ -495,7 +495,7 @@ CdmResponseType CertificateProvisioning::HandleProvisioning40Response( DeviceFiles global_file_handle(&global_file_system); if (!global_file_handle.Init(security_level)) { LOGE("Failed to initialize global DeviceFiles"); - return PROVISIONING_4_FAILED_TO_INITIALIZE_DEVICE_FILES_2; + return CdmResponseType(PROVISIONING_4_FAILED_TO_INITIALIZE_DEVICE_FILES_2); } // Check the stage of the provisioning by checking if an OEM cert is already @@ -505,23 +505,24 @@ CdmResponseType CertificateProvisioning::HandleProvisioning40Response( if (!global_file_handle.StoreOemCertificate(device_certificate, private_key)) { LOGE("Failed to store provisioning 4 OEM certificate"); - return PROVISIONING_4_FAILED_TO_STORE_OEM_CERTIFICATE; + return CdmResponseType(PROVISIONING_4_FAILED_TO_STORE_OEM_CERTIFICATE); } } else { // The response is assumed to be an DRM cert. DeviceFiles per_origin_file_handle(file_system); if (!per_origin_file_handle.Init(security_level)) { LOGE("Failed to initialize per-origin DeviceFiles"); - return PROVISIONING_4_FAILED_TO_INITIALIZE_DEVICE_FILES_3; + return CdmResponseType( + PROVISIONING_4_FAILED_TO_INITIALIZE_DEVICE_FILES_3); } if (!per_origin_file_handle.StoreCertificate(device_certificate, private_key)) { LOGE("Failed to store provisioning 4 DRM certificate"); - return PROVISIONING_4_FAILED_TO_STORE_DRM_CERTIFICATE; + return CdmResponseType(PROVISIONING_4_FAILED_TO_STORE_DRM_CERTIFICATE); } } - return NO_ERROR; + return CdmResponseType(NO_ERROR); } // The response message consists of a device certificate and the @@ -537,7 +538,7 @@ CdmResponseType CertificateProvisioning::HandleProvisioningResponse( std::string* wrapped_key) { if (response_message.empty()) { LOGE("Provisioning response message is empty"); - return CERT_PROVISIONING_RESPONSE_ERROR_1; + return CdmResponseType(CERT_PROVISIONING_RESPONSE_ERROR_1); } std::string response; @@ -551,7 +552,7 @@ CdmResponseType CertificateProvisioning::HandleProvisioningResponse( if (!result || response.empty()) { LOGE("Provisioning response message is an invalid JSON/base64 string: %s", response.c_str()); - return CERT_PROVISIONING_RESPONSE_ERROR_1; + return CdmResponseType(CERT_PROVISIONING_RESPONSE_ERROR_1); } } @@ -561,7 +562,7 @@ CdmResponseType CertificateProvisioning::HandleProvisioningResponse( SignedProvisioningMessage signed_response; if (!signed_response.ParseFromString(response)) { LOGE("Failed to parse signed provisioining response"); - return CERT_PROVISIONING_RESPONSE_ERROR_2; + return CdmResponseType(CERT_PROVISIONING_RESPONSE_ERROR_2); } if (signed_response.provisioning_type() == @@ -585,7 +586,7 @@ CdmResponseType CertificateProvisioning::HandleProvisioningResponse( error = true; } - if (error) return CERT_PROVISIONING_RESPONSE_ERROR_3; + if (error) return CdmResponseType(CERT_PROVISIONING_RESPONSE_ERROR_3); const std::string& signed_message = signed_response.message(); const std::string& signature = signed_response.signature(); @@ -594,7 +595,7 @@ CdmResponseType CertificateProvisioning::HandleProvisioningResponse( ProvisioningResponse provisioning_response; if (!provisioning_response.ParseFromString(signed_message)) { LOGE("Failed to parse provisioning response"); - return CERT_PROVISIONING_RESPONSE_ERROR_4; + return CdmResponseType(CERT_PROVISIONING_RESPONSE_ERROR_4); } if (provisioning_response.has_status()) { @@ -607,9 +608,9 @@ CdmResponseType CertificateProvisioning::HandleProvisioningResponse( break; case ProvisioningResponse::REVOKED_DEVICE_CREDENTIALS: case ProvisioningResponse::REVOKED_DEVICE_SERIES: - return DEVICE_REVOKED; + return CdmResponseType(DEVICE_REVOKED); default: - return CERT_PROVISIONING_RESPONSE_ERROR_10; + return CdmResponseType(CERT_PROVISIONING_RESPONSE_ERROR_10); } } @@ -632,19 +633,19 @@ CdmResponseType CertificateProvisioning::HandleProvisioningResponse( if (cert_type_ == kCertificateX509) { *cert = device_cert_data; *wrapped_key = private_key.key(); - return NO_ERROR; + return CdmResponseType(NO_ERROR); } // Need to parse cert for key type. SignedDrmCertificate signed_device_cert; if (!signed_device_cert.ParseFromString(device_cert_data)) { LOGE("Failed to parse signed DRM certificate"); - return CERT_PROVISIONING_RESPONSE_ERROR_9; + return CdmResponseType(CERT_PROVISIONING_RESPONSE_ERROR_9); } DrmCertificate device_cert; if (!device_cert.ParseFromString(signed_device_cert.drm_certificate())) { LOGE("Failed to parse DRM certificate"); - return CERT_PROVISIONING_RESPONSE_ERROR_9; + return CdmResponseType(CERT_PROVISIONING_RESPONSE_ERROR_9); } if (!device_cert.has_algorithm()) { LOGW("DRM certificate does not specify algorithm type, assuming RSA"); @@ -662,7 +663,7 @@ CdmResponseType CertificateProvisioning::HandleProvisioningResponse( default: LOGE("Unknown DRM key type: algorithm = %d", static_cast(device_cert.algorithm())); - return CERT_PROVISIONING_RESPONSE_ERROR_9; + return CdmResponseType(CERT_PROVISIONING_RESPONSE_ERROR_9); } } @@ -671,14 +672,14 @@ CdmResponseType CertificateProvisioning::HandleProvisioningResponse( DeviceFiles handle(file_system); if (!handle.Init(security_level)) { LOGE("Failed to initialize DeviceFiles"); - return CERT_PROVISIONING_RESPONSE_ERROR_7; + return CdmResponseType(CERT_PROVISIONING_RESPONSE_ERROR_7); } if (!handle.StoreCertificate(device_cert_data, private_key)) { LOGE("Failed to store provisioning certificate"); - return CERT_PROVISIONING_RESPONSE_ERROR_8; + return CdmResponseType(CERT_PROVISIONING_RESPONSE_ERROR_8); } - return NO_ERROR; + return CdmResponseType(NO_ERROR); } // Provisioning response is a base64-encoded protobuf, optionally within a diff --git a/libwvdrmengine/cdm/core/src/client_identification.cpp b/libwvdrmengine/cdm/core/src/client_identification.cpp index f3ae6ddc..70a8d325 100644 --- a/libwvdrmengine/cdm/core/src/client_identification.cpp +++ b/libwvdrmengine/cdm/core/src/client_identification.cpp @@ -72,39 +72,39 @@ CdmResponseType ClientIdentification::InitForProvisioningRequest( const std::string& client_token, CryptoSession* crypto_session) { if (crypto_session == nullptr) { LOGE("Crypto session not provided"); - return PARAMETER_NULL; + return CdmResponseType(PARAMETER_NULL); } is_license_request_ = false; client_token_ = client_token; crypto_session_ = crypto_session; - return NO_ERROR; + return CdmResponseType(NO_ERROR); } CdmResponseType ClientIdentification::InitForLicenseRequest( const std::string& client_token, CryptoSession* crypto_session) { if (crypto_session == nullptr) { LOGE("Crypto session not provided"); - return PARAMETER_NULL; + return CdmResponseType(PARAMETER_NULL); } if (client_token.empty()) { LOGE("Client token is empty"); - return PARAMETER_NULL; + return CdmResponseType(PARAMETER_NULL); } is_license_request_ = true; client_token_ = client_token; crypto_session_ = crypto_session; - return NO_ERROR; + return CdmResponseType(NO_ERROR); } CdmResponseType ClientIdentification::InitForOtaKeyboxProvisioning( CryptoSession* crypto_session) { if (crypto_session == nullptr) { LOGE("Crypto session not provided"); - return PARAMETER_NULL; + return CdmResponseType(PARAMETER_NULL); } is_okp_request_ = true; crypto_session_ = crypto_session; - return NO_ERROR; + return CdmResponseType(NO_ERROR); } /* @@ -131,7 +131,7 @@ CdmResponseType ClientIdentification::Prepare( video_widevine::ClientIdentification::TokenType token_type; if (!GetProvisioningTokenType(&token_type)) { LOGE("Failed to get provisioning token type"); - return CLIENT_IDENTIFICATION_TOKEN_ERROR_1; + return CdmResponseType(CLIENT_IDENTIFICATION_TOKEN_ERROR_1); } client_id->set_type(token_type); @@ -140,8 +140,7 @@ CdmResponseType ClientIdentification::Prepare( CdmResponseType status = crypto_session_->GetProvisioningToken(&token, &additional_token); if (status != NO_ERROR) { - LOGE("Failed to get provisioning token: status = %d", - static_cast(status)); + LOGE("Failed to get provisioning token: status = %d", status.Enum()); return status; } client_id->set_token(token); @@ -221,7 +220,7 @@ CdmResponseType ClientIdentification::Prepare( if (is_okp_request_) { // Capabilities is not important for OTA keybox provisionining. - return NO_ERROR; + return CdmResponseType(NO_ERROR); } ClientCapabilities* client_capabilities = @@ -365,7 +364,7 @@ CdmResponseType ClientIdentification::Prepare( } } - return NO_ERROR; + return CdmResponseType(NO_ERROR); } bool ClientIdentification::GetProvisioningTokenType( diff --git a/libwvdrmengine/cdm/core/src/crypto_session.cpp b/libwvdrmengine/cdm/core/src/crypto_session.cpp index 879d2d6f..ee43181c 100644 --- a/libwvdrmengine/cdm/core/src/crypto_session.cpp +++ b/libwvdrmengine/cdm/core/src/crypto_session.cpp @@ -33,22 +33,36 @@ // Example: STRINGIFY(this_argument) -> "this_argument" #define STRINGIFY(PARAM) #PARAM +namespace { +bool WrapIfNecessary(bool ret_value) { return ret_value; } + +wvcdm::CdmResponseType WrapIfNecessary(wvcdm::CdmResponseEnum ret_value) { + return wvcdm::CdmResponseType(ret_value); +} + +wvcdm::CdmSecurityLevel WrapIfNecessary(wvcdm::CdmSecurityLevel ret_value) { + return ret_value; +} + +OEMCryptoResult WrapIfNecessary(OEMCryptoResult ret_value) { return ret_value; } +} // namespace + #define RETURN_IF_NULL(PARAM, ret_value) \ if ((PARAM) == nullptr) { \ LOGE("Output parameter |" STRINGIFY(PARAM) "| not provided"); \ - return ret_value; \ + return WrapIfNecessary(ret_value); \ } #define RETURN_IF_UNINITIALIZED(ret_value) \ if (!IsInitialized()) { \ LOGE("Crypto session is not initialized"); \ - return ret_value; \ + return WrapIfNecessary(ret_value); \ } #define RETURN_IF_NOT_OPEN(ret_value) \ if (!open_) { \ LOGE("Crypto session is not open"); \ - return ret_value; \ + return WrapIfNecessary(ret_value); \ } #ifdef HAS_DUAL_KEY @@ -104,7 +118,7 @@ constexpr size_t kMaxExternalDeviceIdLength = 64; // are not universal but are OEMCrypto method specific. Those will be // specified in the CryptoSession method rather than here. CdmResponseType MapOEMCryptoResult(OEMCryptoResult result, - CdmResponseType default_status, + CdmResponseEnum default_status, const char* crypto_session_method) { if (result != OEMCrypto_SUCCESS) { LOGE("Mapping OEMCrypto result: crypto_session_method = %s, result = %d", @@ -114,17 +128,17 @@ CdmResponseType MapOEMCryptoResult(OEMCryptoResult result, switch (result) { case OEMCrypto_SUCCESS: - return NO_ERROR; + return CdmResponseType(NO_ERROR); case OEMCrypto_ERROR_NOT_IMPLEMENTED: - return NOT_IMPLEMENTED_ERROR; + return CdmResponseType(NOT_IMPLEMENTED_ERROR); case OEMCrypto_ERROR_TOO_MANY_SESSIONS: - return INSUFFICIENT_CRYPTO_RESOURCES; + return CdmResponseType(INSUFFICIENT_CRYPTO_RESOURCES); case OEMCrypto_ERROR_SESSION_LOST_STATE: - return SESSION_LOST_STATE_ERROR; + return CdmResponseType(SESSION_LOST_STATE_ERROR); case OEMCrypto_ERROR_SYSTEM_INVALIDATED: - return SYSTEM_INVALIDATED_ERROR; + return CdmResponseType(SYSTEM_INVALIDATED_ERROR); default: - return default_status; + return CdmResponseType(default_status); } } @@ -323,10 +337,10 @@ CdmResponseType CryptoSession::GetProvisioningMethod( LOGE("OEMCrypto_GetProvisioningMethod failed: method = %d", static_cast(method)); metrics_->oemcrypto_provisioning_method_.SetError(method); - return GET_PROVISIONING_METHOD_ERROR; + return CdmResponseType(GET_PROVISIONING_METHOD_ERROR); } *token_type = type; - return NO_ERROR; + return CdmResponseType(NO_ERROR); } void CryptoSession::Init() { @@ -531,7 +545,7 @@ CdmResponseType CryptoSession::GetTokenFromKeybox( if (requested_security_level_ != kLevelDefault) return false; return needs_keybox_provisioning_; }); - if (keybox_provisioning_required) return NEED_PROVISIONING; + if (keybox_provisioning_required) return CdmResponseType(NEED_PROVISIONING); size_t key_data_length = KEYBOX_KEY_DATA_SIZE; key_data->assign(key_data_length, '\0'); @@ -545,7 +559,7 @@ CdmResponseType CryptoSession::GetTokenFromKeybox( }); if (OEMCrypto_SUCCESS == status) { key_data->resize(key_data_length); - return NO_ERROR; + return CdmResponseType(NO_ERROR); } key_data->clear(); return MapOEMCryptoResult(status, GET_TOKEN_FROM_KEYBOX_ERROR, @@ -567,7 +581,7 @@ CdmResponseType CryptoSession::GetTokenFromOemCert( oem_cert->assign(oem_token_); return true; }); - if (cache_success) return NO_ERROR; + if (cache_success) return CdmResponseType(NO_ERROR); size_t oem_cert_length = CERTIFICATE_DATA_SIZE; oem_cert->assign(oem_cert_length, '\0'); @@ -592,7 +606,7 @@ CdmResponseType CryptoSession::GetTokenFromOemCert( oem_cert->resize(oem_cert_length); WithOecSessionLock("GetTokenFromOemCert - set cache", [&] { oem_token_ = *oem_cert; }); - return NO_ERROR; + return CdmResponseType(NO_ERROR); } oem_cert->clear(); return MapOEMCryptoResult(status, GET_TOKEN_FROM_OEM_CERT_ERROR, @@ -610,17 +624,18 @@ CdmResponseType CryptoSession::GetProvisioningToken( RequestedSecurityLevel requested_security_level, std::string* token, std::string* additional_token) { if (token == nullptr || additional_token == nullptr) { - metrics_->crypto_session_get_token_.Increment(PARAMETER_NULL); + metrics_->crypto_session_get_token_.Increment( + CdmResponseType(PARAMETER_NULL)); RETURN_IF_NULL(token, PARAMETER_NULL); RETURN_IF_NULL(additional_token, PARAMETER_NULL); } if (!IsInitialized()) { metrics_->crypto_session_get_token_.Increment( - CRYPTO_SESSION_NOT_INITIALIZED); - return CRYPTO_SESSION_NOT_INITIALIZED; + CdmResponseType(CRYPTO_SESSION_NOT_INITIALIZED)); + return CdmResponseType(CRYPTO_SESSION_NOT_INITIALIZED); } - CdmResponseType status = UNKNOWN_CLIENT_TOKEN_TYPE; + CdmResponseType status(UNKNOWN_CLIENT_TOKEN_TYPE); if (pre_provision_token_type_ == kClientTokenKeybox) { status = GetTokenFromKeybox(requested_security_level, token); } else if (pre_provision_token_type_ == kClientTokenOemCert) { @@ -703,7 +718,7 @@ CdmResponseType CryptoSession::GetInternalDeviceUniqueId( // implemented, so the OEMCrypto can continue to report the same device ID. if (sts == OEMCrypto_SUCCESS) { device_id->resize(device_id_length); - return NO_ERROR; + return CdmResponseType(NO_ERROR); } device_id->clear(); @@ -728,7 +743,7 @@ CdmResponseType CryptoSession::GetInternalDeviceUniqueId( LOGD("Using null device ID"); constexpr size_t kKeyboxDeviceIdLength = 32; device_id->assign(kKeyboxDeviceIdLength, '\0'); - return NO_ERROR; + return CdmResponseType(NO_ERROR); } return MapOEMCryptoResult(sts, GET_DEVICE_ID_ERROR, @@ -746,7 +761,7 @@ CdmResponseType CryptoSession::GetExternalDeviceUniqueId( // the large OEM Public Cert to a smaller value. *device_id = Sha256Hash(*device_id); } - return NO_ERROR; + return CdmResponseType(NO_ERROR); } bool CryptoSession::GetApiVersion(uint32_t* version) { @@ -823,7 +838,7 @@ CdmResponseType CryptoSession::GetProvisioningId(std::string* provisioning_id) { (*provisioning_id)[i] = ~value; } - return NO_ERROR; + return CdmResponseType(NO_ERROR); } if (pre_provision_token_type_ == kClientTokenKeybox) { std::string token; @@ -834,15 +849,15 @@ CdmResponseType CryptoSession::GetProvisioningId(std::string* provisioning_id) { if (token.size() < 24) { LOGE("Keybox token size too small: %zu", token.size()); - return KEYBOX_TOKEN_TOO_SHORT; + return CdmResponseType(KEYBOX_TOKEN_TOO_SHORT); } provisioning_id->assign(reinterpret_cast(&token[8]), 16); - return NO_ERROR; + return CdmResponseType(NO_ERROR); } LOGE("Unsupported pre-provision token type: %d", static_cast(pre_provision_token_type_)); - return UNKNOWN_CLIENT_TOKEN_TYPE; + return CdmResponseType(UNKNOWN_CLIENT_TOKEN_TYPE); } uint8_t CryptoSession::GetSecurityPatchLevel() { @@ -859,7 +874,7 @@ CdmResponseType CryptoSession::Open( LOGD("Opening crypto session: requested_security_level = %s", RequestedSecurityLevelToString(requested_security_level)); RETURN_IF_UNINITIALIZED(CRYPTO_SESSION_NOT_INITIALIZED); - if (open_) return NO_ERROR; + if (open_) return CdmResponseType(NO_ERROR); if (!SetUpUsageTableHeader(requested_security_level)) { // Ignore errors since we do not know when a session is opened, @@ -922,9 +937,9 @@ CdmResponseType CryptoSession::Open( if (!GetApiVersion(&api_version_)) { LOGE("Failed to get API version"); - return USAGE_SUPPORT_GET_API_FAILED; + return CdmResponseType(USAGE_SUPPORT_GET_API_FAILED); } - return NO_ERROR; + return CdmResponseType(NO_ERROR); } void CryptoSession::Close() { @@ -992,7 +1007,7 @@ CdmResponseType CryptoSession::PrepareAndSignLicenseRequest( if (static_cast(sts) == kRsaSsaPssSignatureLengthError) { LOGE("OEMCrypto PrepareAndSignLicenseRequest result = %d", static_cast(sts)); - return NEED_PROVISIONING; + return CdmResponseType(NEED_PROVISIONING); } return MapOEMCryptoResult(sts, GENERATE_SIGNATURE_ERROR, "PrepareAndSignLicenseRequest"); @@ -1019,7 +1034,7 @@ CdmResponseType CryptoSession::PrepareAndSignLicenseRequest( *core_message = std::move(combined_message); // Truncate combined message to only contain the core message. core_message->resize(core_message_length); - return NO_ERROR; + return CdmResponseType(NO_ERROR); } // TODO(b/174412779): Remove when b/170704368 is fixed. // Temporary workaround. If this error is returned the only way to @@ -1027,7 +1042,7 @@ CdmResponseType CryptoSession::PrepareAndSignLicenseRequest( if (static_cast(sts) == kRsaSsaPssSignatureLengthError) { LOGE("OEMCrypto PrepareAndSignLicenseRequest result = %d", static_cast(sts)); - return NEED_PROVISIONING; + return CdmResponseType(NEED_PROVISIONING); } return MapOEMCryptoResult(sts, GENERATE_SIGNATURE_ERROR, "PrepareAndSignLicenseRequest"); @@ -1042,7 +1057,7 @@ CdmResponseType CryptoSession::UseSecondaryKey(bool dual_key) { return MapOEMCryptoResult(sts, LOAD_KEY_ERROR, "UseSecondaryKey"); #else - return NO_ERROR; + return CdmResponseType(NO_ERROR); #endif } @@ -1070,13 +1085,13 @@ CdmResponseType CryptoSession::LoadLicense(const std::string& signed_message, switch (sts) { case OEMCrypto_SUCCESS: - return KEY_ADDED; + return CdmResponseType(KEY_ADDED); case OEMCrypto_ERROR_BUFFER_TOO_LARGE: LOGE("LoadLicense buffer too large: size = %zu", combined_message.size()); - return LOAD_LICENSE_ERROR; + return CdmResponseType(LOAD_LICENSE_ERROR); case OEMCrypto_ERROR_TOO_MANY_KEYS: LOGE("Too many keys in license"); - return INSUFFICIENT_CRYPTO_RESOURCES; + return CdmResponseType(INSUFFICIENT_CRYPTO_RESOURCES); default: break; } @@ -1089,11 +1104,11 @@ CdmResponseType CryptoSession::PrepareAndSignRenewalRequest( LOGV("Preparing and signing renewal request: id = %u", oec_session_id_); if (signature == nullptr) { LOGE("Output parameter |signature| not provided"); - return PARAMETER_NULL; + return CdmResponseType(PARAMETER_NULL); } if (core_message == nullptr) { LOGE("Output parameter |core_message| not provided"); - return PARAMETER_NULL; + return CdmResponseType(PARAMETER_NULL); } OEMCryptoResult sts; @@ -1139,7 +1154,7 @@ CdmResponseType CryptoSession::PrepareAndSignRenewalRequest( *core_message = std::move(combined_message); // Truncate combined message to only contain the core message. core_message->resize(core_message_length); - return NO_ERROR; + return CdmResponseType(NO_ERROR); } return MapOEMCryptoResult(sts, GENERATE_SIGNATURE_ERROR, "PrepareAndSignRenewalRequest"); @@ -1161,11 +1176,11 @@ CdmResponseType CryptoSession::LoadRenewal(const std::string& signed_message, metrics_, oemcrypto_load_renewal_, sts); }); if (sts == OEMCrypto_SUCCESS) { - return KEY_ADDED; + return CdmResponseType(KEY_ADDED); } if (sts == OEMCrypto_ERROR_BUFFER_TOO_LARGE) { LOGE("Buffer too large: size = %zu", combined_message.size()); - return LOAD_RENEWAL_ERROR; + return CdmResponseType(LOAD_RENEWAL_ERROR); } return MapOEMCryptoResult(sts, LOAD_RENEWAL_ERROR, "LoadRenewal"); } @@ -1176,11 +1191,11 @@ CdmResponseType CryptoSession::PrepareAndSignProvisioningRequest( LOGV("Preparing and signing provisioning request: id = %u", oec_session_id_); if (signature == nullptr) { LOGE("Output parameter |signature| not provided"); - return PARAMETER_NULL; + return CdmResponseType(PARAMETER_NULL); } if (core_message == nullptr) { LOGE("Output parameter |core_message| not provided"); - return PARAMETER_NULL; + return CdmResponseType(PARAMETER_NULL); } if (pre_provision_token_type_ == kClientTokenKeybox) { @@ -1194,7 +1209,7 @@ CdmResponseType CryptoSession::PrepareAndSignProvisioningRequest( } } else { LOGE("Unknown method %d", pre_provision_token_type_); - return UNKNOWN_CLIENT_TOKEN_TYPE; + return CdmResponseType(UNKNOWN_CLIENT_TOKEN_TYPE); } OEMCryptoResult sts; @@ -1240,7 +1255,7 @@ CdmResponseType CryptoSession::PrepareAndSignProvisioningRequest( *core_message = std::move(combined_message); // Truncate combined message to only contain the core message. core_message->resize(core_message_length); - return NO_ERROR; + return CdmResponseType(NO_ERROR); } return MapOEMCryptoResult(sts, GENERATE_SIGNATURE_ERROR, "PrepareAndSignProvisioningRequest"); @@ -1254,19 +1269,19 @@ CdmResponseType CryptoSession::LoadEntitledContentKeys( switch (sts) { case OEMCrypto_SUCCESS: - return KEY_ADDED; + return CdmResponseType(KEY_ADDED); case OEMCrypto_ERROR_INSUFFICIENT_RESOURCES: - return INSUFFICIENT_CRYPTO_RESOURCES; + return CdmResponseType(INSUFFICIENT_CRYPTO_RESOURCES); case OEMCrypto_ERROR_INVALID_CONTEXT: - return NOT_AN_ENTITLEMENT_SESSION; + return CdmResponseType(NOT_AN_ENTITLEMENT_SESSION); case OEMCrypto_KEY_NOT_ENTITLED: - return NO_MATCHING_ENTITLEMENT_KEY; + return CdmResponseType(NO_MATCHING_ENTITLEMENT_KEY); case OEMCrypto_ERROR_SESSION_LOST_STATE: - return SESSION_LOST_STATE_ERROR; + return CdmResponseType(SESSION_LOST_STATE_ERROR); case OEMCrypto_ERROR_SYSTEM_INVALIDATED: - return SYSTEM_INVALIDATED_ERROR; + return CdmResponseType(SYSTEM_INVALIDATED_ERROR); default: - return LOAD_ENTITLED_CONTENT_KEYS_ERROR; + return CdmResponseType(LOAD_ENTITLED_CONTENT_KEYS_ERROR); } } @@ -1310,11 +1325,12 @@ CdmResponseType CryptoSession::GetBootCertificateChain( LOGV("requested_security_level = %s", RequestedSecurityLevelToString(requested_security_level)); if (pre_provision_token_type_ != kClientTokenBootCertChain) { - return PROVISIONING_TYPE_IS_NOT_BOOT_CERTIFICATE_CHAIN_ERROR; + return CdmResponseType( + PROVISIONING_TYPE_IS_NOT_BOOT_CERTIFICATE_CHAIN_ERROR); } if (requested_security_level != kLevelDefault) { LOGE("CDM only supports L1 BCC"); - return NOT_IMPLEMENTED_ERROR; + return CdmResponseType(NOT_IMPLEMENTED_ERROR); } size_t bcc_length = 0; @@ -1340,7 +1356,7 @@ CdmResponseType CryptoSession::GetBootCertificateChain( } bcc->resize(bcc_length); additional_signature->resize(additional_signature_length); - return NO_ERROR; + return CdmResponseType(NO_ERROR); } CdmResponseType CryptoSession::GenerateCertificateKeyPair( @@ -1402,10 +1418,10 @@ CdmResponseType CryptoSession::GenerateCertificateKeyPair( } else { LOGE("Unexpected key type returned from GenerateCertificateKeyPair: %d", static_cast(oemcrypto_key_type)); - return GENERATE_CERTIFICATE_KEY_PAIR_UNKNOWN_TYPE_ERROR; + return CdmResponseType(GENERATE_CERTIFICATE_KEY_PAIR_UNKNOWN_TYPE_ERROR); } - return NO_ERROR; + return CdmResponseType(NO_ERROR); } CdmResponseType CryptoSession::LoadOemCertificatePrivateKey( @@ -1442,36 +1458,36 @@ CdmResponseType CryptoSession::SelectKey(const std::string& key_id, switch (sts) { // SelectKey errors. case OEMCrypto_SUCCESS: - return NO_ERROR; + return CdmResponseType(NO_ERROR); case OEMCrypto_ERROR_KEY_EXPIRED: - return NEED_KEY; + return CdmResponseType(NEED_KEY); case OEMCrypto_ERROR_INVALID_SESSION: - return INVALID_SESSION_1; + return CdmResponseType(INVALID_SESSION_1); case OEMCrypto_ERROR_NO_DEVICE_KEY: - return NO_DEVICE_KEY_1; + return CdmResponseType(NO_DEVICE_KEY_1); case OEMCrypto_ERROR_NO_CONTENT_KEY: - return NO_CONTENT_KEY_2; + return CdmResponseType(NO_CONTENT_KEY_2); case OEMCrypto_ERROR_CONTROL_INVALID: case OEMCrypto_ERROR_KEYBOX_INVALID: - return UNKNOWN_SELECT_KEY_ERROR_2; + return CdmResponseType(UNKNOWN_SELECT_KEY_ERROR_2); case OEMCrypto_ERROR_INSUFFICIENT_RESOURCES: - return INSUFFICIENT_CRYPTO_RESOURCES; + return CdmResponseType(INSUFFICIENT_CRYPTO_RESOURCES); case OEMCrypto_ERROR_UNKNOWN_FAILURE: - return UNKNOWN_SELECT_KEY_ERROR_1; + return CdmResponseType(UNKNOWN_SELECT_KEY_ERROR_1); case OEMCrypto_ERROR_ANALOG_OUTPUT: - return ANALOG_OUTPUT_ERROR; + return CdmResponseType(ANALOG_OUTPUT_ERROR); case OEMCrypto_ERROR_INSUFFICIENT_HDCP: - return INSUFFICIENT_OUTPUT_PROTECTION; + return CdmResponseType(INSUFFICIENT_OUTPUT_PROTECTION); // LoadEntitledContentKeys errors. // |key_session_| may make calls to OEMCrypto_LoadEntitledContentKeys // if the key selected has not yet been loaded. case OEMCrypto_ERROR_INVALID_CONTEXT: - return NOT_AN_ENTITLEMENT_SESSION; + return CdmResponseType(NOT_AN_ENTITLEMENT_SESSION); case OEMCrypto_KEY_NOT_ENTITLED: - return NO_MATCHING_ENTITLEMENT_KEY; + return CdmResponseType(NO_MATCHING_ENTITLEMENT_KEY); // Obsolete errors. case OEMCrypto_KEY_NOT_LOADED: - return NO_CONTENT_KEY_3; + return CdmResponseType(NO_CONTENT_KEY_3); // Catch all else. default: return MapOEMCryptoResult(sts, UNKNOWN_SELECT_KEY_ERROR_2, "SelectKey"); @@ -1524,7 +1540,7 @@ CdmResponseType CryptoSession::GenerateRsaSignature(const std::string& message, if (OEMCrypto_SUCCESS == sts) { // Trim signature buffer and done signature->resize(length); - return NO_ERROR; + return CdmResponseType(NO_ERROR); } if (OEMCrypto_ERROR_SHORT_BUFFER != sts) { break; @@ -1565,22 +1581,23 @@ size_t CryptoSession::GetMaxSubsampleRegionSize() { CdmResponseType CryptoSession::Decrypt( const CdmDecryptionParametersV16& params) { if (!is_destination_buffer_type_valid_) { - if (!SetDestinationBufferType()) return UNKNOWN_ERROR; + if (!SetDestinationBufferType()) return CdmResponseType(UNKNOWN_ERROR); } OEMCryptoBufferType output_descriptor_type = params.is_secure ? destination_buffer_type_ : OEMCrypto_BufferType_Clear; if (params.is_secure && output_descriptor_type == OEMCrypto_BufferType_Clear) { - return SECURE_BUFFER_REQUIRED; + return CdmResponseType(SECURE_BUFFER_REQUIRED); } - if (params.samples.size() == 0) return CANNOT_DECRYPT_ZERO_SAMPLES; + if (params.samples.size() == 0) + return CdmResponseType(CANNOT_DECRYPT_ZERO_SAMPLES); if (std::any_of(std::begin(params.samples), std::end(params.samples), [](const CdmDecryptionSample& sample) -> bool { return sample.subsamples.size() == 0; })) { - return CANNOT_DECRYPT_ZERO_SUBSAMPLES; + return CdmResponseType(CANNOT_DECRYPT_ZERO_SUBSAMPLES); } // Convert all the sample and subsample definitions to OEMCrypto structs. @@ -1671,11 +1688,12 @@ CdmResponseType CryptoSession::Decrypt( // Check that the total size is valid if (sample_size != oec_sample.buffers.input_data_length) - return SAMPLE_AND_SUBSAMPLE_SIZE_MISMATCH; + return CdmResponseType(SAMPLE_AND_SUBSAMPLE_SIZE_MISMATCH); // Set up the sample's IV if (is_any_subsample_protected) { - if (sizeof(oec_sample.iv) != sample.iv.size()) return INVALID_IV_SIZE; + if (sizeof(oec_sample.iv) != sample.iv.size()) + return CdmResponseType(INVALID_IV_SIZE); memcpy(oec_sample.iv, sample.iv.data(), sizeof(oec_sample.iv)); } else { memset(oec_sample.iv, 0, sizeof(oec_sample.iv)); @@ -1732,28 +1750,28 @@ CdmResponseType CryptoSession::Decrypt( switch (sts) { case OEMCrypto_SUCCESS: case OEMCrypto_WARNING_MIXED_OUTPUT_PROTECTION: - return NO_ERROR; + return CdmResponseType(NO_ERROR); case OEMCrypto_ERROR_INSUFFICIENT_RESOURCES: - return INSUFFICIENT_CRYPTO_RESOURCES; + return CdmResponseType(INSUFFICIENT_CRYPTO_RESOURCES); case OEMCrypto_ERROR_KEY_EXPIRED: - return NEED_KEY; + return CdmResponseType(NEED_KEY); case OEMCrypto_ERROR_INVALID_SESSION: - return INVALID_SESSION_2; + return CdmResponseType(INVALID_SESSION_2); case OEMCrypto_ERROR_DECRYPT_FAILED: case OEMCrypto_ERROR_UNKNOWN_FAILURE: - return DECRYPT_ERROR; + return CdmResponseType(DECRYPT_ERROR); case OEMCrypto_ERROR_INSUFFICIENT_HDCP: - return INSUFFICIENT_OUTPUT_PROTECTION; + return CdmResponseType(INSUFFICIENT_OUTPUT_PROTECTION); case OEMCrypto_ERROR_ANALOG_OUTPUT: - return ANALOG_OUTPUT_ERROR; + return CdmResponseType(ANALOG_OUTPUT_ERROR); case OEMCrypto_ERROR_OUTPUT_TOO_LARGE: - return OUTPUT_TOO_LARGE_ERROR; + return CdmResponseType(OUTPUT_TOO_LARGE_ERROR); case OEMCrypto_ERROR_SESSION_LOST_STATE: - return SESSION_LOST_STATE_ERROR; + return CdmResponseType(SESSION_LOST_STATE_ERROR); case OEMCrypto_ERROR_SYSTEM_INVALIDATED: - return SYSTEM_INVALIDATED_ERROR; + return CdmResponseType(SYSTEM_INVALIDATED_ERROR); default: - return UNKNOWN_ERROR; + return CdmResponseType(UNKNOWN_ERROR); } } @@ -1816,15 +1834,15 @@ CdmResponseType CryptoSession::DeactivateUsageInformation( switch (status) { case OEMCrypto_SUCCESS: - return NO_ERROR; + return CdmResponseType(NO_ERROR); case OEMCrypto_ERROR_INVALID_CONTEXT: - return KEY_CANCELED; + return CdmResponseType(KEY_CANCELED); case OEMCrypto_ERROR_SESSION_LOST_STATE: - return SESSION_LOST_STATE_ERROR; + return CdmResponseType(SESSION_LOST_STATE_ERROR); case OEMCrypto_ERROR_SYSTEM_INVALIDATED: - return SYSTEM_INVALIDATED_ERROR; + return CdmResponseType(SYSTEM_INVALIDATED_ERROR); default: - return DEACTIVATE_USAGE_ENTRY_ERROR; + return CdmResponseType(DEACTIVATE_USAGE_ENTRY_ERROR); } } @@ -1880,12 +1898,13 @@ CdmResponseType CryptoSession::GenerateUsageReport( "Parsed usage report smaller than expected: " "usage_length = %zu, report_size = %zu", usage_length, pst_report.report_size()); - return NO_ERROR; // usage report available but no duration information + return CdmResponseType( + NO_ERROR); // usage report available but no duration information } if (kUnused == pst_report.status()) { *usage_duration_status = kUsageDurationPlaybackNotBegun; - return NO_ERROR; + return CdmResponseType(NO_ERROR); } LOGV("OEMCrypto_PST_Report.status: %d\n", static_cast(pst_report.status())); @@ -1905,7 +1924,7 @@ CdmResponseType CryptoSession::GenerateUsageReport( if (kInactiveUnused == pst_report.status()) { *usage_duration_status = kUsageDurationPlaybackNotBegun; - return NO_ERROR; + return CdmResponseType(NO_ERROR); } // Before OEMCrypto v13, When usage report state is inactive, we have to // deduce whether the license was ever used. @@ -1914,13 +1933,13 @@ CdmResponseType CryptoSession::GenerateUsageReport( pst_report.seconds_since_license_received() < pst_report.seconds_since_first_decrypt())) { *usage_duration_status = kUsageDurationPlaybackNotBegun; - return NO_ERROR; + return CdmResponseType(NO_ERROR); } *usage_duration_status = kUsageDurationsValid; *seconds_since_started = pst_report.seconds_since_first_decrypt(); *seconds_since_last_played = pst_report.seconds_since_last_decrypt(); - return NO_ERROR; + return CdmResponseType(NO_ERROR); } bool CryptoSession::IsAntiRollbackHwPresent() { @@ -1965,7 +1984,7 @@ CdmResponseType CryptoSession::LoadProvisioning( LOGV("Loading provisioning certificate: id = %u", oec_session_id_); if (wrapped_private_key == nullptr) { LOGE("Missing wrapped |wrapped_private_key|"); - return PARAMETER_NULL; + return CdmResponseType(PARAMETER_NULL); } const std::string combined_message = core_message + signed_message; @@ -2003,7 +2022,7 @@ CdmResponseType CryptoSession::LoadProvisioning( if (status == OEMCrypto_SUCCESS) { wrapped_private_key->resize(wrapped_private_key_length); - return NO_ERROR; + return CdmResponseType(NO_ERROR); } wrapped_private_key->clear(); return MapOEMCryptoResult(status, LOAD_PROVISIONING_ERROR, @@ -2137,13 +2156,13 @@ CdmResponseType CryptoSession::GetSrmVersion(uint16_t* srm_version) { // returned. switch (status) { case OEMCrypto_SUCCESS: - return NO_ERROR; + return CdmResponseType(NO_ERROR); case OEMCrypto_LOCAL_DISPLAY_ONLY: LOGD("No SRM: Local display only"); - return NO_SRM_VERSION; + return CdmResponseType(NO_SRM_VERSION); case OEMCrypto_ERROR_NOT_IMPLEMENTED: LOGD("No SRM: Not implemented"); - return NO_SRM_VERSION; + return CdmResponseType(NO_SRM_VERSION); default: return MapOEMCryptoResult(status, GET_SRM_VERSION_ERROR, "GetCurrentSRMVersion"); @@ -2366,15 +2385,15 @@ CdmResponseType CryptoSession::GetDecryptHashError(std::string* error_string) { error_string->assign(std::to_string(sts)); error_string->append(","); error_string->append(std::to_string(failed_frame_number)); - return NO_ERROR; + return CdmResponseType(NO_ERROR); case OEMCrypto_ERROR_SESSION_LOST_STATE: - return SESSION_LOST_STATE_ERROR; + return CdmResponseType(SESSION_LOST_STATE_ERROR); case OEMCrypto_ERROR_SYSTEM_INVALIDATED: - return SYSTEM_INVALIDATED_ERROR; + return CdmResponseType(SYSTEM_INVALIDATED_ERROR); case OEMCrypto_ERROR_UNKNOWN_FAILURE: case OEMCrypto_ERROR_NOT_IMPLEMENTED: default: - return GET_DECRYPT_HASH_ERROR; + return CdmResponseType(GET_DECRYPT_HASH_ERROR); } } @@ -2389,7 +2408,7 @@ CdmResponseType CryptoSession::GenericEncrypt(const std::string& in_buffer, OEMCrypto_Algorithm oec_algorithm = OEMCrypto_AES_CBC_128_NO_PADDING; if (iv.size() != GenericEncryptionBlockSize(algorithm) || !GetGenericEncryptionAlgorithm(algorithm, &oec_algorithm)) { - return INVALID_PARAMETERS_ENG_13; + return CdmResponseType(INVALID_PARAMETERS_ENG_13); } if (out_buffer->size() < in_buffer.size()) { @@ -2422,20 +2441,20 @@ CdmResponseType CryptoSession::GenericEncrypt(const std::string& in_buffer, switch (sts) { case OEMCrypto_SUCCESS: - return NO_ERROR; + return CdmResponseType(NO_ERROR); case OEMCrypto_ERROR_KEY_EXPIRED: - return NEED_KEY; + return CdmResponseType(NEED_KEY); case OEMCrypto_ERROR_NO_CONTENT_KEY: case OEMCrypto_KEY_NOT_LOADED: // obsolete in v15. - return KEY_NOT_FOUND_3; + return CdmResponseType(KEY_NOT_FOUND_3); case OEMCrypto_ERROR_OUTPUT_TOO_LARGE: - return OUTPUT_TOO_LARGE_ERROR; + return CdmResponseType(OUTPUT_TOO_LARGE_ERROR); case OEMCrypto_ERROR_SESSION_LOST_STATE: - return SESSION_LOST_STATE_ERROR; + return CdmResponseType(SESSION_LOST_STATE_ERROR); case OEMCrypto_ERROR_SYSTEM_INVALIDATED: - return SYSTEM_INVALIDATED_ERROR; + return CdmResponseType(SYSTEM_INVALIDATED_ERROR); default: - return UNKNOWN_ERROR; + return CdmResponseType(UNKNOWN_ERROR); } } @@ -2450,7 +2469,7 @@ CdmResponseType CryptoSession::GenericDecrypt(const std::string& in_buffer, OEMCrypto_Algorithm oec_algorithm = OEMCrypto_AES_CBC_128_NO_PADDING; if (iv.size() != GenericEncryptionBlockSize(algorithm) || !GetGenericEncryptionAlgorithm(algorithm, &oec_algorithm)) { - return INVALID_PARAMETERS_ENG_14; + return CdmResponseType(INVALID_PARAMETERS_ENG_14); } if (out_buffer->size() < in_buffer.size()) { @@ -2483,20 +2502,20 @@ CdmResponseType CryptoSession::GenericDecrypt(const std::string& in_buffer, switch (sts) { case OEMCrypto_SUCCESS: - return NO_ERROR; + return CdmResponseType(NO_ERROR); case OEMCrypto_ERROR_KEY_EXPIRED: - return NEED_KEY; + return CdmResponseType(NEED_KEY); case OEMCrypto_ERROR_NO_CONTENT_KEY: case OEMCrypto_KEY_NOT_LOADED: // obsolete in v15. - return KEY_NOT_FOUND_4; + return CdmResponseType(KEY_NOT_FOUND_4); case OEMCrypto_ERROR_OUTPUT_TOO_LARGE: - return OUTPUT_TOO_LARGE_ERROR; + return CdmResponseType(OUTPUT_TOO_LARGE_ERROR); case OEMCrypto_ERROR_SESSION_LOST_STATE: - return SESSION_LOST_STATE_ERROR; + return CdmResponseType(SESSION_LOST_STATE_ERROR); case OEMCrypto_ERROR_SYSTEM_INVALIDATED: - return SYSTEM_INVALIDATED_ERROR; + return CdmResponseType(SYSTEM_INVALIDATED_ERROR); default: - return UNKNOWN_ERROR; + return CdmResponseType(UNKNOWN_ERROR); } } @@ -2509,7 +2528,7 @@ CdmResponseType CryptoSession::GenericSign(const std::string& message, OEMCrypto_Algorithm oec_algorithm = OEMCrypto_HMAC_SHA256; if (!GetGenericSigningAlgorithm(algorithm, &oec_algorithm)) { - return INVALID_PARAMETERS_ENG_15; + return CdmResponseType(INVALID_PARAMETERS_ENG_15); } OEMCryptoResult sts; @@ -2538,7 +2557,7 @@ CdmResponseType CryptoSession::GenericSign(const std::string& message, if (OEMCrypto_SUCCESS == sts) { // Trim signature buffer and done signature->resize(length); - return NO_ERROR; + return CdmResponseType(NO_ERROR); } if (OEMCrypto_ERROR_SHORT_BUFFER != sts) { break; @@ -2552,18 +2571,18 @@ CdmResponseType CryptoSession::GenericSign(const std::string& message, switch (sts) { case OEMCrypto_ERROR_KEY_EXPIRED: - return NEED_KEY; + return CdmResponseType(NEED_KEY); case OEMCrypto_ERROR_NO_CONTENT_KEY: case OEMCrypto_KEY_NOT_LOADED: // obsolete in v15. - return KEY_NOT_FOUND_5; + return CdmResponseType(KEY_NOT_FOUND_5); case OEMCrypto_ERROR_OUTPUT_TOO_LARGE: - return OUTPUT_TOO_LARGE_ERROR; + return CdmResponseType(OUTPUT_TOO_LARGE_ERROR); case OEMCrypto_ERROR_SESSION_LOST_STATE: - return SESSION_LOST_STATE_ERROR; + return CdmResponseType(SESSION_LOST_STATE_ERROR); case OEMCrypto_ERROR_SYSTEM_INVALIDATED: - return SYSTEM_INVALIDATED_ERROR; + return CdmResponseType(SYSTEM_INVALIDATED_ERROR); default: - return UNKNOWN_ERROR; + return CdmResponseType(UNKNOWN_ERROR); } } @@ -2575,7 +2594,7 @@ CdmResponseType CryptoSession::GenericVerify(const std::string& message, OEMCrypto_Algorithm oec_algorithm = OEMCrypto_HMAC_SHA256; if (!GetGenericSigningAlgorithm(algorithm, &oec_algorithm)) { - return INVALID_PARAMETERS_ENG_16; + return CdmResponseType(INVALID_PARAMETERS_ENG_16); } // TODO(jfore): We need to select a key with a cipher mode and algorithm @@ -2602,20 +2621,20 @@ CdmResponseType CryptoSession::GenericVerify(const std::string& message, switch (sts) { case OEMCrypto_SUCCESS: - return NO_ERROR; + return CdmResponseType(NO_ERROR); case OEMCrypto_ERROR_KEY_EXPIRED: - return NEED_KEY; + return CdmResponseType(NEED_KEY); case OEMCrypto_ERROR_NO_CONTENT_KEY: case OEMCrypto_KEY_NOT_LOADED: // obsolete in v15. - return KEY_NOT_FOUND_6; + return CdmResponseType(KEY_NOT_FOUND_6); case OEMCrypto_ERROR_OUTPUT_TOO_LARGE: - return OUTPUT_TOO_LARGE_ERROR; + return CdmResponseType(OUTPUT_TOO_LARGE_ERROR); case OEMCrypto_ERROR_SESSION_LOST_STATE: - return SESSION_LOST_STATE_ERROR; + return CdmResponseType(SESSION_LOST_STATE_ERROR); case OEMCrypto_ERROR_SYSTEM_INVALIDATED: - return SYSTEM_INVALIDATED_ERROR; + return CdmResponseType(SYSTEM_INVALIDATED_ERROR); default: - return UNKNOWN_ERROR; + return CdmResponseType(UNKNOWN_ERROR); } } @@ -2653,7 +2672,7 @@ CdmResponseType CryptoSession::CreateUsageTableHeader( switch (result) { case OEMCrypto_SUCCESS: usage_table_header->resize(usage_table_header_size); - return NO_ERROR; + return CdmResponseType(NO_ERROR); default: return MapOEMCryptoResult(result, CREATE_USAGE_TABLE_ERROR, "CreateUsageTableHeader"); @@ -2686,18 +2705,18 @@ CdmResponseType CryptoSession::LoadUsageTableHeader( switch (result) { case OEMCrypto_SUCCESS: case OEMCrypto_WARNING_GENERATION_SKEW: - return NO_ERROR; + return CdmResponseType(NO_ERROR); case OEMCrypto_ERROR_GENERATION_SKEW: - return LOAD_USAGE_HEADER_GENERATION_SKEW; + return CdmResponseType(LOAD_USAGE_HEADER_GENERATION_SKEW); case OEMCrypto_ERROR_SIGNATURE_FAILURE: - return LOAD_USAGE_HEADER_SIGNATURE_FAILURE; + return CdmResponseType(LOAD_USAGE_HEADER_SIGNATURE_FAILURE); case OEMCrypto_ERROR_BAD_MAGIC: - return LOAD_USAGE_HEADER_BAD_MAGIC; + return CdmResponseType(LOAD_USAGE_HEADER_BAD_MAGIC); case OEMCrypto_ERROR_SYSTEM_INVALIDATED: - return SYSTEM_INVALIDATED_ERROR; + return CdmResponseType(SYSTEM_INVALIDATED_ERROR); case OEMCrypto_ERROR_UNKNOWN_FAILURE: default: - return LOAD_USAGE_HEADER_UNKNOWN_ERROR; + return CdmResponseType(LOAD_USAGE_HEADER_UNKNOWN_ERROR); } } @@ -2732,9 +2751,9 @@ CdmResponseType CryptoSession::ShrinkUsageTableHeader( switch (result) { case OEMCrypto_SUCCESS: usage_table_header->resize(usage_table_header_len); - return NO_ERROR; + return CdmResponseType(NO_ERROR); case OEMCrypto_ERROR_ENTRY_IN_USE: - return SHRINK_USAGE_TABLE_HEADER_ENTRY_IN_USE; + return CdmResponseType(SHRINK_USAGE_TABLE_HEADER_ENTRY_IN_USE); default: return MapOEMCryptoResult(result, SHRINK_USAGE_TABLE_HEADER_UNKNOWN_ERROR, "ShrinkUsageTableHeader"); @@ -2759,15 +2778,15 @@ CdmResponseType CryptoSession::CreateUsageEntry(uint32_t* entry_number) { switch (result) { case OEMCrypto_SUCCESS: - return NO_ERROR; + return CdmResponseType(NO_ERROR); case OEMCrypto_ERROR_INSUFFICIENT_RESOURCES: - return INSUFFICIENT_CRYPTO_RESOURCES; + return CdmResponseType(INSUFFICIENT_CRYPTO_RESOURCES); case OEMCrypto_ERROR_SESSION_LOST_STATE: - return SESSION_LOST_STATE_ERROR; + return CdmResponseType(SESSION_LOST_STATE_ERROR); case OEMCrypto_ERROR_SYSTEM_INVALIDATED: - return SYSTEM_INVALIDATED_ERROR; + return CdmResponseType(SYSTEM_INVALIDATED_ERROR); default: - return CREATE_USAGE_ENTRY_UNKNOWN_ERROR; + return CdmResponseType(CREATE_USAGE_ENTRY_UNKNOWN_ERROR); } } @@ -2796,17 +2815,17 @@ CdmResponseType CryptoSession::LoadUsageEntry( switch (result) { case OEMCrypto_SUCCESS: case OEMCrypto_WARNING_GENERATION_SKEW: - return NO_ERROR; + return CdmResponseType(NO_ERROR); case OEMCrypto_ERROR_INVALID_SESSION: // This case is special, as it could imply that the provided // session ID is invalid (CDM internal bug), or that the entry // being loaded is already in use in a different session. // It is up to the caller to handle this. - return LOAD_USAGE_ENTRY_INVALID_SESSION; + return CdmResponseType(LOAD_USAGE_ENTRY_INVALID_SESSION); case OEMCrypto_ERROR_GENERATION_SKEW: - return LOAD_USAGE_ENTRY_GENERATION_SKEW; + return CdmResponseType(LOAD_USAGE_ENTRY_GENERATION_SKEW); case OEMCrypto_ERROR_SIGNATURE_FAILURE: - return LOAD_USAGE_ENTRY_SIGNATURE_FAILURE; + return CdmResponseType(LOAD_USAGE_ENTRY_SIGNATURE_FAILURE); default: return MapOEMCryptoResult(result, LOAD_USAGE_ENTRY_UNKNOWN_ERROR, "LoadUsageEntry"); @@ -2868,7 +2887,7 @@ CdmResponseType CryptoSession::MoveUsageEntry(uint32_t new_entry_number) { case OEMCrypto_ERROR_ENTRY_IN_USE: LOGW("OEMCrypto_MoveEntry failed: Destination index in use: index = %u", new_entry_number); - return MOVE_USAGE_ENTRY_DESTINATION_IN_USE; + return CdmResponseType(MOVE_USAGE_ENTRY_DESTINATION_IN_USE); default: return MapOEMCryptoResult(result, MOVE_USAGE_ENTRY_UNKNOWN_ERROR, "MoveUsageEntry"); @@ -3219,7 +3238,7 @@ CdmResponseType CryptoSession::PrepareOtaProvisioningRequest( "PrepareOtaProvisioningRequest"); if (buffer_length == 0) { LOGE("OTA request size is zero"); - return UNKNOWN_ERROR; + return CdmResponseType(UNKNOWN_ERROR); } request->resize(buffer_length); uint8_t* buf = reinterpret_cast(&request->front()); diff --git a/libwvdrmengine/cdm/core/src/license.cpp b/libwvdrmengine/cdm/core/src/license.cpp index d701fa5a..9e060bdc 100644 --- a/libwvdrmengine/cdm/core/src/license.cpp +++ b/libwvdrmengine/cdm/core/src/license.cpp @@ -261,7 +261,7 @@ CdmResponseType CdmLicense::PrepareKeyRequest( CdmKeyMessage* signed_request, std::string* server_url) { if (!initialized_) { LOGE("CdmLicense not initialized"); - return LICENSE_PARSER_NOT_INITIALIZED_4; + return CdmResponseType(LICENSE_PARSER_NOT_INITIALIZED_4); } client_token_ = client_token; if (init_data.IsEmpty() && stored_init_data_) { @@ -273,19 +273,19 @@ CdmResponseType CdmLicense::PrepareKeyRequest( wrapped_keys_ = init_data.ExtractWrappedKeys(); if (!init_data.is_supported()) { LOGE("Unsupported init data type: type = %s", init_data.type().c_str()); - return INVALID_PARAMETERS_LIC_3; + return CdmResponseType(INVALID_PARAMETERS_LIC_3); } if (init_data.IsEmpty()) { LOGE("Init data is empty"); - return INVALID_PARAMETERS_LIC_4; + return CdmResponseType(INVALID_PARAMETERS_LIC_4); } if (signed_request == nullptr) { LOGE("Output parameter |signed_request| not provided"); - return INVALID_PARAMETERS_LIC_6; + return CdmResponseType(INVALID_PARAMETERS_LIC_6); } if (server_url == nullptr) { LOGE("Output parameter |server_url| not provided"); - return INVALID_PARAMETERS_LIC_7; + return CdmResponseType(INVALID_PARAMETERS_LIC_7); } // If privacy mode and no service certificate, depending on platform @@ -293,17 +293,18 @@ CdmResponseType CdmLicense::PrepareKeyRequest( if (use_privacy_mode_ && !service_certificate_.has_certificate()) { if (!Properties::allow_service_certificate_requests()) { LOGE("Privacy mode failure: No service certificate"); - return PRIVACY_MODE_ERROR_1; + return CdmResponseType(PRIVACY_MODE_ERROR_1); } stored_init_data_.reset(new InitializationData(init_data)); if (!ServiceCertificate::GetRequest(signed_request)) { LOGE("Failed to prepare service certificated request"); - return LICENSE_REQUEST_SERVICE_CERTIFICATE_GENERATION_ERROR; + return CdmResponseType( + LICENSE_REQUEST_SERVICE_CERTIFICATE_GENERATION_ERROR); } - return KEY_MESSAGE; + return CdmResponseType(KEY_MESSAGE); } const std::string& request_id = crypto_session_->request_id(); @@ -325,14 +326,14 @@ CdmResponseType CdmLicense::PrepareKeyRequest( // of the license response. status = crypto_session_->GenerateNonce(&license_nonce_); - switch (status) { + switch (status.Enum()) { case NO_ERROR: break; case SESSION_LOST_STATE_ERROR: case SYSTEM_INVALIDATED_ERROR: return status; default: - return LICENSE_REQUEST_NONCE_GENERATION_ERROR; + return CdmResponseType(LICENSE_REQUEST_NONCE_GENERATION_ERROR); } license_request.set_key_control_nonce(license_nonce_); license_request.set_protocol_version(video_widevine::VERSION_2_1); @@ -358,7 +359,7 @@ CdmResponseType CdmLicense::PrepareKeyRequest( if (license_request_signature.empty()) { LOGE("License request signature is empty"); signed_request->clear(); - return EMPTY_LICENSE_REQUEST; + return CdmResponseType(EMPTY_LICENSE_REQUEST); } // Put serialized license request and signature together @@ -371,7 +372,7 @@ CdmResponseType CdmLicense::PrepareKeyRequest( signed_message.SerializeToString(signed_request); *server_url = server_url_; - return KEY_MESSAGE; + return CdmResponseType(KEY_MESSAGE); } // TODO(b/166007195): Remove this. @@ -381,7 +382,7 @@ CdmResponseType CdmLicense::PrepareKeyUpdateReload(CdmSession* cdm_session) { LOGW("Unknown API Version"); api_version = 16; } - if (api_version != 16) return NO_ERROR; + if (api_version != 16) return CdmResponseType(NO_ERROR); // To work around b/166010609, we ask OEMCrypto to prepare an unused renewal // request. This lets the ODK library update its clock saying when the renewal // was signed. @@ -399,26 +400,26 @@ CdmResponseType CdmLicense::PrepareKeyUpdateRequest( std::string* server_url) { if (!initialized_) { LOGE("CdmLicense not initialized"); - return LICENSE_PARSER_NOT_INITIALIZED_1; + return CdmResponseType(LICENSE_PARSER_NOT_INITIALIZED_1); } if (signed_request == nullptr) { LOGE("Output parameter |signed_request| not provided"); - return INVALID_PARAMETERS_LIC_1; + return CdmResponseType(INVALID_PARAMETERS_LIC_1); } if (server_url == nullptr) { LOGE("Output parameter |server_url| not provided"); - return INVALID_PARAMETERS_LIC_2; + return CdmResponseType(INVALID_PARAMETERS_LIC_2); } if (is_renewal && !policy_engine_->CanRenew()) { LOGE("License renewal prohibited"); - return LICENSE_RENEWAL_PROHIBITED; + return CdmResponseType(LICENSE_RENEWAL_PROHIBITED); } if (renew_with_client_id_) { if (use_privacy_mode_ && !service_certificate_.has_certificate()) { LOGE("Privacy mode failure: No service certificate"); - return PRIVACY_MODE_ERROR_2; + return CdmResponseType(PRIVACY_MODE_ERROR_2); } } @@ -465,7 +466,7 @@ CdmResponseType CdmLicense::PrepareKeyUpdateRequest( if (NO_ERROR == status) current_license->set_session_usage_table_entry(usage_report); else - return GENERATE_USAGE_REPORT_ERROR; + return CdmResponseType(GENERATE_USAGE_REPORT_ERROR); } } @@ -495,7 +496,7 @@ CdmResponseType CdmLicense::PrepareKeyUpdateRequest( if (license_request_signature.empty()) { LOGE("License request signature is empty"); - return EMPTY_LICENSE_RENEWAL; + return CdmResponseType(EMPTY_LICENSE_RENEWAL); } // Put serialize license request and signature together @@ -507,27 +508,27 @@ CdmResponseType CdmLicense::PrepareKeyUpdateRequest( signed_message.SerializeToString(signed_request); *server_url = server_url_; - return KEY_MESSAGE; + return CdmResponseType(KEY_MESSAGE); } CdmResponseType CdmLicense::HandleKeyResponse( bool is_restore, const CdmKeyResponse& license_response) { if (!initialized_) { LOGE("CdmLicense not initialized"); - return LICENSE_PARSER_NOT_INITIALIZED_2; + return CdmResponseType(LICENSE_PARSER_NOT_INITIALIZED_2); } // Clear the latest service version when we receive a new response. latest_service_version_.Clear(); if (license_response.empty()) { LOGE("License response is empty"); - return EMPTY_LICENSE_RESPONSE_1; + return CdmResponseType(EMPTY_LICENSE_RESPONSE_1); } SignedMessage signed_response; if (!signed_response.ParseFromString(license_response)) { LOGE("Unable to parse signed license response"); - return INVALID_LICENSE_RESPONSE; + return CdmResponseType(INVALID_LICENSE_RESPONSE); } latest_service_version_ = signed_response.service_version_info(); @@ -540,7 +541,7 @@ CdmResponseType CdmLicense::HandleKeyResponse( if (status != NO_ERROR) return status; status = service_certificate_.Init(signed_certificate); - return (status == NO_ERROR) ? NEED_KEY : status; + return (status == NO_ERROR) ? CdmResponseType(NEED_KEY) : status; } if (signed_response.type() == SignedMessage::ERROR_RESPONSE) @@ -549,12 +550,12 @@ CdmResponseType CdmLicense::HandleKeyResponse( if (signed_response.type() != SignedMessage::LICENSE) { LOGE("Unrecognized signed message type: type = %d", static_cast(signed_response.type())); - return INVALID_LICENSE_TYPE; + return CdmResponseType(INVALID_LICENSE_TYPE); } if (!signed_response.has_signature()) { LOGE("License response is not signed"); - return LICENSE_RESPONSE_NOT_SIGNED; + return CdmResponseType(LICENSE_RESPONSE_NOT_SIGNED); } const std::string& signed_message = signed_response.msg(); @@ -564,12 +565,12 @@ CdmResponseType CdmLicense::HandleKeyResponse( License license; if (!license.ParseFromString(signed_message)) { LOGE("Unable to parse license response"); - return LICENSE_RESPONSE_PARSE_ERROR_1; + return CdmResponseType(LICENSE_RESPONSE_PARSE_ERROR_1); } if (!signed_response.has_session_key()) { LOGE("Signed response has no session keys present"); - return SESSION_KEYS_NOT_FOUND; + return CdmResponseType(SESSION_KEYS_NOT_FOUND); } CdmResponseType status = crypto_session_->GenerateDerivedKeys( key_request_, signed_response.session_key()); @@ -597,7 +598,7 @@ CdmResponseType CdmLicense::HandleKeyResponse( "MAC key/IV size error: expected = %zu/%zu, " "actual = %zu/%zu (key/iv)", kLicenseMacKeySize, KEY_IV_SIZE, mac_keys.size(), mac_key_iv.size()); - return KEY_SIZE_ERROR_1; + return CdmResponseType(KEY_SIZE_ERROR_1); } } @@ -614,7 +615,7 @@ CdmResponseType CdmLicense::HandleKeyResponse( } if (key_array.empty()) { LOGE("No content keys"); - return NO_CONTENT_KEY; + return CdmResponseType(NO_CONTENT_KEY); } license_key_type_ = key_type; @@ -645,7 +646,7 @@ CdmResponseType CdmLicense::HandleKeyResponse( crypto_session_->UseSecondaryKey(signed_response.using_secondary_key()); if (status != NO_ERROR) return status; - CdmResponseType resp = NO_CONTENT_KEY; + CdmResponseType resp(NO_CONTENT_KEY); if (kLicenseKeyTypeEntitlement == key_type) { resp = HandleEntitlementKeyResponse(is_restore, signed_message, core_message, @@ -661,17 +662,17 @@ CdmResponseType CdmLicense::HandleKeyUpdateResponse( bool is_renewal, bool is_restore, const CdmKeyResponse& license_response) { if (!initialized_) { LOGE("CdmLicense not initialized"); - return LICENSE_PARSER_NOT_INITIALIZED_3; + return CdmResponseType(LICENSE_PARSER_NOT_INITIALIZED_3); } if (license_response.empty()) { LOGE("License response is empty"); - return EMPTY_LICENSE_RESPONSE_2; + return CdmResponseType(EMPTY_LICENSE_RESPONSE_2); } SignedMessage signed_response; if (!signed_response.ParseFromString(license_response)) { LOGE("Unable to parse signed message"); - return LICENSE_RESPONSE_PARSE_ERROR_2; + return CdmResponseType(LICENSE_RESPONSE_PARSE_ERROR_2); } switch (signed_response.type()) { @@ -682,7 +683,7 @@ CdmResponseType CdmLicense::HandleKeyUpdateResponse( default: LOGE("Unrecognized signed message type: type = %d", static_cast(signed_response.type())); - return INVALID_LICENSE_TYPE; + return CdmResponseType(INVALID_LICENSE_TYPE); } const std::string& signed_message = signed_response.msg(); @@ -691,23 +692,23 @@ CdmResponseType CdmLicense::HandleKeyUpdateResponse( if (is_renewal && core_message.empty()) { LOGE("Renewal response is missing |core_message| field"); - return CORE_MESSAGE_NOT_FOUND; + return CdmResponseType(CORE_MESSAGE_NOT_FOUND); } if (signature.empty()) { LOGE("Update key response is missing signature"); - return SIGNATURE_NOT_FOUND; + return CdmResponseType(SIGNATURE_NOT_FOUND); } License license; if (!license.ParseFromString(signed_message)) { LOGE("Unable to parse license from signed message"); - return LICENSE_RESPONSE_PARSE_ERROR_3; + return CdmResponseType(LICENSE_RESPONSE_PARSE_ERROR_3); } if (!license.has_id()) { LOGE("License ID not present"); - return LICENSE_ID_NOT_FOUND; + return CdmResponseType(LICENSE_ID_NOT_FOUND); } if (license.policy().has_always_include_client_id()) { @@ -715,9 +716,10 @@ CdmResponseType CdmLicense::HandleKeyUpdateResponse( } if (!is_renewal) { - if (!license.id().has_provider_session_token()) return KEY_ADDED; + if (!license.id().has_provider_session_token()) + return CdmResponseType(KEY_ADDED); provider_session_token_ = license.id().provider_session_token(); - return KEY_ADDED; + return CdmResponseType(KEY_ADDED); } if (license.policy().has_renewal_server_url() && @@ -753,12 +755,12 @@ CdmResponseType CdmLicense::RestoreOfflineLicense( CdmSession* cdm_session) { if (license_request.empty()) { LOGE("License request is empty"); - return EMPTY_LICENSE_REQUEST_2; + return CdmResponseType(EMPTY_LICENSE_REQUEST_2); } if (license_response.empty()) { LOGE("License response is empty"); - return EMPTY_LICENSE_RESPONSE_3; + return CdmResponseType(EMPTY_LICENSE_RESPONSE_3); } client_token_ = client_token; @@ -766,14 +768,14 @@ CdmResponseType CdmLicense::RestoreOfflineLicense( SignedMessage signed_request; if (!signed_request.ParseFromString(license_request)) { LOGE("Failed to parse license request"); - return PARSE_REQUEST_ERROR_1; + return CdmResponseType(PARSE_REQUEST_ERROR_1); } if (signed_request.type() != SignedMessage::LICENSE_REQUEST) { LOGE("Unexpected license request type: expected = %d, actual = %d", static_cast(SignedMessage::LICENSE_REQUEST), static_cast(signed_request.type())); - return INVALID_LICENSE_REQUEST_TYPE_1; + return CdmResponseType(INVALID_LICENSE_REQUEST_TYPE_1); } key_request_ = signed_request.msg(); @@ -832,7 +834,7 @@ CdmResponseType CdmLicense::RestoreOfflineLicense( policy_engine_->RestorePlaybackTimes(playback_start_time, last_playback_time, grace_period_end_time); - return NO_ERROR; + return CdmResponseType(NO_ERROR); } CdmResponseType CdmLicense::RestoreLicenseForRelease( @@ -840,12 +842,12 @@ CdmResponseType CdmLicense::RestoreLicenseForRelease( const CdmKeyResponse& license_response) { if (license_request.empty()) { LOGE("License request is empty"); - return EMPTY_LICENSE_REQUEST_3; + return CdmResponseType(EMPTY_LICENSE_REQUEST_3); } if (license_response.empty()) { LOGE("License response is empty"); - return EMPTY_LICENSE_RESPONSE_4; + return CdmResponseType(EMPTY_LICENSE_RESPONSE_4); } client_token_ = client_token; @@ -853,14 +855,14 @@ CdmResponseType CdmLicense::RestoreLicenseForRelease( SignedMessage signed_request; if (!signed_request.ParseFromString(license_request)) { LOGE("Failed to parse signed license request"); - return PARSE_REQUEST_ERROR_2; + return CdmResponseType(PARSE_REQUEST_ERROR_2); } if (signed_request.type() != SignedMessage::LICENSE_REQUEST) { LOGE("Unexpected signed license request type: expected = %d, actual = %d", static_cast(SignedMessage::LICENSE_REQUEST), static_cast(signed_request.type())); - return INVALID_LICENSE_REQUEST_TYPE_2; + return CdmResponseType(INVALID_LICENSE_REQUEST_TYPE_2); } key_request_ = signed_request.msg(); @@ -868,30 +870,30 @@ CdmResponseType CdmLicense::RestoreLicenseForRelease( SignedMessage signed_response; if (!signed_response.ParseFromString(license_response)) { LOGE("Failed to parse signed license response"); - return LICENSE_RESPONSE_PARSE_ERROR_4; + return CdmResponseType(LICENSE_RESPONSE_PARSE_ERROR_4); } if (SignedMessage::LICENSE != signed_response.type()) { LOGE("Unexpected signed license response type: expected = %d, actual = %d", static_cast(SignedMessage::LICENSE), static_cast(signed_response.type())); - return INVALID_LICENSE_TYPE_2; + return CdmResponseType(INVALID_LICENSE_TYPE_2); } if (!signed_response.has_signature()) { LOGE("License response is not signed"); - return SIGNATURE_NOT_FOUND_2; + return CdmResponseType(SIGNATURE_NOT_FOUND_2); } if (!signed_response.has_oemcrypto_core_message()) { LOGE("License response is missing core message"); - return CORE_MESSAGE_NOT_FOUND; + return CdmResponseType(CORE_MESSAGE_NOT_FOUND); } License license; if (!license.ParseFromString(signed_response.msg())) { LOGE("Failed to parse license response"); - return LICENSE_RESPONSE_PARSE_ERROR_5; + return CdmResponseType(LICENSE_RESPONSE_PARSE_ERROR_5); } if (license.has_provider_client_token()) @@ -905,12 +907,12 @@ CdmResponseType CdmLicense::RestoreLicenseForRelease( if (!signed_response.has_session_key()) { LOGE("No session keys present"); - return SESSION_KEYS_NOT_FOUND_2; + return CdmResponseType(SESSION_KEYS_NOT_FOUND_2); } if (!license.id().has_provider_session_token()) { CdmResponseType result = HandleKeyResponse(false, license_response); - return result == KEY_ADDED ? NO_ERROR : result; + return result == KEY_ADDED ? CdmResponseType(NO_ERROR) : result; } if (license.policy().has_renewal_server_url()) @@ -919,7 +921,7 @@ CdmResponseType CdmLicense::RestoreLicenseForRelease( // If the policy engine already has keys, they will now expire. // If the policy engine does not already have keys, this will not add any. policy_engine_->SetLicenseForRelease(license); - return NO_ERROR; + return CdmResponseType(NO_ERROR); } bool CdmLicense::IsKeyLoaded(const KeyId& key_id) { @@ -967,19 +969,20 @@ CdmResponseType CdmLicense::HandleKeyErrorResponse( LicenseError license_error; if (!license_error.ParseFromString(signed_message.msg())) { LOGE("Failed to parse license error response"); - return KEY_ERROR; + return CdmResponseType(KEY_ERROR); } + // TODO(b/261185349) Add new field in CdmResponseType to handle license_error switch (license_error.error_code()) { case LicenseError::INVALID_DRM_DEVICE_CERTIFICATE: - return NEED_PROVISIONING; + return CdmResponseType(NEED_PROVISIONING); case LicenseError::REVOKED_DRM_DEVICE_CERTIFICATE: - return DEVICE_REVOKED; + return CdmResponseType(DEVICE_REVOKED); case LicenseError::SERVICE_UNAVAILABLE: default: LOGW("Unknown error type: error_code = %d", static_cast(license_error.error_code())); - return KEY_ERROR; + return CdmResponseType(KEY_ERROR); } } @@ -989,7 +992,7 @@ CdmResponseType CdmLicense::PrepareClientId( wvcdm::ClientIdentification id; if (client_token_.empty()) { LOGE("Client token not set when preparing client ID"); - return CLIENT_TOKEN_NOT_SET; + return CdmResponseType(CLIENT_TOKEN_NOT_SET); } CdmResponseType status = @@ -1004,7 +1007,7 @@ CdmResponseType CdmLicense::PrepareClientId( if (Properties::UsePrivacyMode(session_id_)) { if (!service_certificate_.has_certificate()) { LOGE("Service certificate not staged"); - return PRIVACY_MODE_ERROR_3; + return CdmResponseType(PRIVACY_MODE_ERROR_3); } EncryptedClientIdentification* encrypted_client_id = license_request->mutable_encrypted_client_id(); @@ -1017,7 +1020,7 @@ CdmResponseType CdmLicense::PrepareClientId( } return status; } - return NO_ERROR; + return CdmResponseType(NO_ERROR); } CdmResponseType CdmLicense::PrepareContentId( @@ -1035,11 +1038,11 @@ CdmResponseType CdmLicense::PrepareContentId( widevine_pssh_data->add_pssh_data(init_data.data()); } else { LOGE("ISO-CENC init data not available"); - return CENC_INIT_DATA_UNAVAILABLE; + return CdmResponseType(CENC_INIT_DATA_UNAVAILABLE); } if (!SetTypeAndId(license_type, request_id, widevine_pssh_data)) { - return PREPARE_CENC_CONTENT_ID_FAILED; + return CdmResponseType(PREPARE_CENC_CONTENT_ID_FAILED); } } else if (init_data.is_webm()) { LicenseRequest_ContentIdentification_WebmKeyId* webm_key_id = @@ -1049,17 +1052,17 @@ CdmResponseType CdmLicense::PrepareContentId( webm_key_id->set_header(init_data.data()); } else { LOGE("WebM init data not available"); - return WEBM_INIT_DATA_UNAVAILABLE; + return CdmResponseType(WEBM_INIT_DATA_UNAVAILABLE); } if (!SetTypeAndId(license_type, request_id, webm_key_id)) { - return PREPARE_WEBM_CONTENT_ID_FAILED; + return CdmResponseType(PREPARE_WEBM_CONTENT_ID_FAILED); } } else { LOGE("Unsupported init data type: type = %s", init_data.type().c_str()); - return UNSUPPORTED_INIT_DATA_FORMAT; + return CdmResponseType(UNSUPPORTED_INIT_DATA_FORMAT); } - return NO_ERROR; + return CdmResponseType(NO_ERROR); } CdmResponseType CdmLicense::HandleContentKeyResponse( @@ -1068,7 +1071,7 @@ CdmResponseType CdmLicense::HandleContentKeyResponse( const video_widevine::License& license) { if (key_array.empty()) { LOGE("No content keys provided"); - return NO_CONTENT_KEY; + return CdmResponseType(NO_CONTENT_KEY); } const CdmResponseType resp = crypto_session_->LoadLicense( msg, core_message, signature, kLicenseKeyTypeContent); @@ -1088,7 +1091,7 @@ CdmResponseType CdmLicense::HandleEntitlementKeyResponse( const video_widevine::License& license) { if (key_array.empty()) { LOGE("No entitlement keys provided"); - return NO_CONTENT_KEY; + return CdmResponseType(NO_CONTENT_KEY); } const CdmResponseType resp = crypto_session_->LoadLicense( msg, core_message, signature, kLicenseKeyTypeEntitlement); @@ -1120,7 +1123,7 @@ CdmResponseType CdmLicense::HandleNewEntitledKeys( "Entitled content key too small: " "expected = %zu, actual = %zu (bytes)", CONTENT_KEY_SIZE, content_key.size()); - return KEY_SIZE_ERROR_2; + return CdmResponseType(KEY_SIZE_ERROR_2); } else if (content_key.size() > CONTENT_KEY_SIZE) { content_key.resize(CONTENT_KEY_SIZE); } @@ -1142,7 +1145,7 @@ CdmResponseType CdmLicense::HandleNewEntitledKeys( loaded_keys_.insert(wk.key_id()); } policy_engine_->SetEntitledLicenseKeys(wrapped_keys); - return KEY_ADDED; + return CdmResponseType(KEY_ADDED); } template diff --git a/libwvdrmengine/cdm/core/src/ota_keybox_provisioner.cpp b/libwvdrmengine/cdm/core/src/ota_keybox_provisioner.cpp index 1cbf035d..f22a4896 100644 --- a/libwvdrmengine/cdm/core/src/ota_keybox_provisioner.cpp +++ b/libwvdrmengine/cdm/core/src/ota_keybox_provisioner.cpp @@ -129,21 +129,21 @@ CdmResponseType OtaKeyboxProvisioner::GetProvisioningRequest( std::string* request, std::string* default_url) { if (request == nullptr) { LOGE("Output |request| is null"); - return PARAMETER_NULL; + return CdmResponseType(PARAMETER_NULL); } if (default_url == nullptr) { LOGE("Output |default_url| is null"); - return PARAMETER_NULL; + return CdmResponseType(PARAMETER_NULL); } if (IsProvisioned()) { LOGW("Already provisioned"); CleanUp(); - return OKP_ALREADY_PROVISIONED; + return CdmResponseType(OKP_ALREADY_PROVISIONED); } if (!crypto_session_) { LOGE("Crypto session has been released, OKP unavailable"); // Caller should not reuse provisioner after failure. - return UNKNOWN_ERROR; + return CdmResponseType(UNKNOWN_ERROR); } // Step 1: Generate raw request from OEMCrypto. std::string ota_request_data; @@ -155,8 +155,7 @@ CdmResponseType OtaKeyboxProvisioner::GetProvisioningRequest( CleanUp(); return result; } else if (result != NO_ERROR) { - LOGE("Failed to generate OKP request: status = %d", - static_cast(result)); + LOGE("Failed to generate OKP request: status = %d", result.Enum()); return result; } // Step 2: Wrap in ProvisioningRequest. @@ -165,7 +164,7 @@ CdmResponseType OtaKeyboxProvisioner::GetProvisioningRequest( result = client_id_.Prepare(kEmptyAppParameters, kEmptyString, client_id); if (result != NO_ERROR) { LOGW("Failed to prepare client ID, continuing without: result = %d", - static_cast(result)); + result.Enum()); client_id->Clear(); } LOGI("OTA request generated"); @@ -189,36 +188,36 @@ CdmResponseType OtaKeyboxProvisioner::GetProvisioningRequest( request_generated_ = true; CertificateProvisioning::GetProvisioningServerUrl(default_url); - return NO_ERROR; + return CdmResponseType(NO_ERROR); } CdmResponseType OtaKeyboxProvisioner::HandleProvisioningResponse( const std::string& response) { if (response.empty()) { LOGE("Signed provisioning message is empty"); - return EMPTY_PROVISIONING_RESPONSE; + return CdmResponseType(EMPTY_PROVISIONING_RESPONSE); } if (IsProvisioned()) { LOGD("Already provisioned"); response_received_ = true; CleanUp(); - return NO_ERROR; + return CdmResponseType(NO_ERROR); } if (!request_generated_) { LOGE("Received response without generating request"); - return UNKNOWN_ERROR; + return CdmResponseType(UNKNOWN_ERROR); } if (!crypto_session_) { LOGE("Crypto session has been released, OKP unavailable"); // Caller should not reuse provisioner after failure. - return UNKNOWN_ERROR; + return CdmResponseType(UNKNOWN_ERROR); } std::string decoded_response; if (!wvcdm::Properties::provisioning_messages_are_binary()) { if (!CertificateProvisioning::ExtractAndDecodeSignedMessage( response, &decoded_response)) { LOGE("Failed to extract OKP provisioning response"); - return PARSE_OKP_RESPONSE_ERROR; + return CdmResponseType(PARSE_OKP_RESPONSE_ERROR); } } else { decoded_response = response; @@ -227,38 +226,38 @@ CdmResponseType OtaKeyboxProvisioner::HandleProvisioningResponse( SignedProvisioningMessage signed_response; if (!signed_response.ParseFromString(decoded_response)) { LOGE("Failed to parse SignedProvisioningMessage"); - return PARSE_OKP_RESPONSE_ERROR; + return CdmResponseType(PARSE_OKP_RESPONSE_ERROR); } if (!signed_response.has_message()) { LOGE("Signed response is missing message"); - return PARSE_OKP_RESPONSE_ERROR; + return CdmResponseType(PARSE_OKP_RESPONSE_ERROR); } if (signed_response.provisioning_type() != SignedProvisioningMessage::ANDROID_ATTESTATION_KEYBOX_OTA) { LOGE("Unexpected protocol type/version: protocol_type = %d", static_cast(signed_response.provisioning_type())); - return PARSE_OKP_RESPONSE_ERROR; + return CdmResponseType(PARSE_OKP_RESPONSE_ERROR); } // Step 2: Unwrap from ProvisioningResponse. ProvisioningResponse prov_response; if (!prov_response.ParseFromString(signed_response.message())) { LOGE("Failed to parse ProvisioningResponse"); - return PARSE_OKP_RESPONSE_ERROR; + return CdmResponseType(PARSE_OKP_RESPONSE_ERROR); } if (!prov_response.has_android_ota_keybox_response()) { LOGE("Missing OTA keybox response message"); - return PARSE_OKP_RESPONSE_ERROR; + return CdmResponseType(PARSE_OKP_RESPONSE_ERROR); } const OtaResponse& ota_response = prov_response.android_ota_keybox_response(); if (!ota_response.has_ota_response()) { LOGE("Missing OTA keybox response data"); - return PARSE_OKP_RESPONSE_ERROR; + return CdmResponseType(PARSE_OKP_RESPONSE_ERROR); } // Step 3: Load response. const std::string ota_response_data = ota_response.ota_response(); if (ota_response_data.empty()) { LOGE("Raw OTA response is empty"); - return PARSE_OKP_RESPONSE_ERROR; + return CdmResponseType(PARSE_OKP_RESPONSE_ERROR); } const CdmResponseType result = crypto_session_->LoadOtaProvisioning( kProductionKeybox, ota_response_data); diff --git a/libwvdrmengine/cdm/core/src/policy_engine.cpp b/libwvdrmengine/cdm/core/src/policy_engine.cpp index f566c2ab..6306dbfc 100644 --- a/libwvdrmengine/cdm/core/src/policy_engine.cpp +++ b/libwvdrmengine/cdm/core/src/policy_engine.cpp @@ -283,7 +283,7 @@ CdmResponseType PolicyEngine::Query(CdmQueryMap* query_response) { if (license_state_ == kLicenseStateInitial) { query_response->clear(); - return NO_ERROR; + return CdmResponseType(NO_ERROR); } (*query_response)[QUERY_KEY_LICENSE_TYPE] = @@ -307,19 +307,19 @@ CdmResponseType PolicyEngine::Query(CdmQueryMap* query_response) { (*query_response)[QUERY_KEY_RENEWAL_SERVER_URL] = policy_timers_->get_policy().renewal_server_url(); - return NO_ERROR; + return CdmResponseType(NO_ERROR); } CdmResponseType PolicyEngine::QueryKeyAllowedUsage( const KeyId& key_id, CdmKeyAllowedUsage* key_usage) { if (key_usage == nullptr) { LOGE("Output parameter |key_usage| not provided"); - return PARAMETER_NULL; + return CdmResponseType(PARAMETER_NULL); } if (license_keys_->GetAllowedUsage(key_id, key_usage)) { - return NO_ERROR; + return CdmResponseType(NO_ERROR); } - return KEY_NOT_FOUND_1; + return CdmResponseType(KEY_NOT_FOUND_1); } bool PolicyEngine::CanUseKeyForSecurityLevel(const KeyId& key_id) { diff --git a/libwvdrmengine/cdm/core/src/service_certificate.cpp b/libwvdrmengine/cdm/core/src/service_certificate.cpp index 2d2947bf..bcd94d06 100644 --- a/libwvdrmengine/cdm/core/src/service_certificate.cpp +++ b/libwvdrmengine/cdm/core/src/service_certificate.cpp @@ -143,17 +143,17 @@ CdmResponseType ServiceCertificate::Init(const std::string& certificate) { SignedDrmCertificate signed_root_cert; if (!signed_root_cert.ParseFromString(root_cert_str)) { LOGE("Failed to deserialize signed root certificate"); - return DEVICE_CERTIFICATE_ERROR_1; + return CdmResponseType(DEVICE_CERTIFICATE_ERROR_1); } DrmCertificate root_cert; if (!root_cert.ParseFromString(signed_root_cert.drm_certificate())) { LOGE("Failed to deserialize root certificate"); - return DEVICE_CERTIFICATE_ERROR_1; + return CdmResponseType(DEVICE_CERTIFICATE_ERROR_1); } RsaPublicKey root_key; if (!root_key.Init(root_cert.public_key())) { LOGE("Failed to load root certificate public key"); - return DEVICE_CERTIFICATE_ERROR_1; + return CdmResponseType(DEVICE_CERTIFICATE_ERROR_1); } // Load the provided service certificate. @@ -161,7 +161,7 @@ CdmResponseType ServiceCertificate::Init(const std::string& certificate) { SignedDrmCertificate signed_service_cert; if (!signed_service_cert.ParseFromString(certificate)) { LOGE("Failed to parse signed service certificate"); - return DEVICE_CERTIFICATE_ERROR_2; + return CdmResponseType(DEVICE_CERTIFICATE_ERROR_2); } #ifdef ACCEPT_TEST_CERT @@ -170,14 +170,14 @@ CdmResponseType ServiceCertificate::Init(const std::string& certificate) { if (!root_key.VerifySignature(signed_service_cert.drm_certificate(), signed_service_cert.signature())) { LOGE("Failed to verify service certificate signature"); - return DEVICE_CERTIFICATE_ERROR_3; + return CdmResponseType(DEVICE_CERTIFICATE_ERROR_3); } #endif DrmCertificate service_cert; if (!service_cert.ParseFromString(signed_service_cert.drm_certificate())) { LOGE("Failed to parse service certificate"); - return DEVICE_CERTIFICATE_ERROR_2; + return CdmResponseType(DEVICE_CERTIFICATE_ERROR_2); } if (service_cert.type() != video_widevine::DrmCertificate_Type_SERVICE) { LOGE( @@ -185,7 +185,7 @@ CdmResponseType ServiceCertificate::Init(const std::string& certificate) { "type = %d, expected_type = %d", static_cast(service_cert.type()), static_cast(video_widevine::DrmCertificate_Type_SERVICE)); - return DEVICE_CERTIFICATE_ERROR_3; + return CdmResponseType(DEVICE_CERTIFICATE_ERROR_3); } // Service certificate passes all checks - set up its RSA public key. @@ -193,7 +193,7 @@ CdmResponseType ServiceCertificate::Init(const std::string& certificate) { if (!public_key_->Init(service_cert.public_key())) { public_key_.reset(); LOGE("Failed to load service certificate public key"); - return DEVICE_CERTIFICATE_ERROR_2; + return CdmResponseType(DEVICE_CERTIFICATE_ERROR_2); } // Have service certificate and its public key - keep relevant fields. @@ -202,33 +202,34 @@ CdmResponseType ServiceCertificate::Init(const std::string& certificate) { provider_id_ = service_cert.provider_id(); has_certificate_ = true; - return NO_ERROR; + return CdmResponseType(NO_ERROR); } CdmResponseType ServiceCertificate::VerifySignedMessage( const std::string& message, const std::string& signature) const { if (!public_key_) { LOGE("Service certificate not set"); - return DEVICE_CERTIFICATE_ERROR_4; + return CdmResponseType(DEVICE_CERTIFICATE_ERROR_4); } if (!public_key_->VerifySignature(message, signature)) - return CLIENT_ID_RSA_ENCRYPT_ERROR; // TODO(tinskip): Need new error code. + return CdmResponseType( + CLIENT_ID_RSA_ENCRYPT_ERROR); // TODO(tinskip): Need new error code. - return NO_ERROR; + return CdmResponseType(NO_ERROR); } CdmResponseType ServiceCertificate::EncryptRsaOaep( const std::string& plaintext, std::string* ciphertext) const { if (!public_key_) { LOGE("Service certificate not set"); - return DEVICE_CERTIFICATE_ERROR_4; + return CdmResponseType(DEVICE_CERTIFICATE_ERROR_4); } if (!public_key_->Encrypt(plaintext, ciphertext)) - return CLIENT_ID_RSA_ENCRYPT_ERROR; + return CdmResponseType(CLIENT_ID_RSA_ENCRYPT_ERROR); - return NO_ERROR; + return CdmResponseType(NO_ERROR); } CdmResponseType ServiceCertificate::EncryptClientId( @@ -245,8 +246,9 @@ CdmResponseType ServiceCertificate::EncryptClientId( if (status != NO_ERROR) { LOGE("GetRandom failed for key: status = %d", static_cast(status)); - return (status == RANDOM_GENERATION_ERROR) ? CLIENT_ID_GENERATE_RANDOM_ERROR - : status; + return (status == RANDOM_GENERATION_ERROR) + ? CdmResponseType(CLIENT_ID_GENERATE_RANDOM_ERROR) + : status; } status = @@ -254,15 +256,17 @@ CdmResponseType ServiceCertificate::EncryptClientId( if (status != NO_ERROR) { LOGE("GetRandom failed for IV: status = %d", static_cast(status)); - return (status == RANDOM_GENERATION_ERROR) ? CLIENT_ID_GENERATE_RANDOM_ERROR - : status; + return (status == RANDOM_GENERATION_ERROR) + ? CdmResponseType(CLIENT_ID_GENERATE_RANDOM_ERROR) + : status; } std::string id, enc_id, enc_key; clear_client_id->SerializeToString(&id); AesCbcKey aes; - if (!aes.Init(key)) return CLIENT_ID_AES_INIT_ERROR; - if (!aes.Encrypt(id, &enc_id, &iv)) return CLIENT_ID_AES_ENCRYPT_ERROR; + if (!aes.Init(key)) return CdmResponseType(CLIENT_ID_AES_INIT_ERROR); + if (!aes.Encrypt(id, &enc_id, &iv)) + return CdmResponseType(CLIENT_ID_AES_ENCRYPT_ERROR); CdmResponseType encrypt_result = EncryptRsaOaep(key, &enc_key); if (encrypt_result != NO_ERROR) return encrypt_result; @@ -270,7 +274,7 @@ CdmResponseType ServiceCertificate::EncryptClientId( encrypted_client_id->set_encrypted_client_id_iv(iv); encrypted_client_id->set_encrypted_privacy_key(enc_key); encrypted_client_id->set_encrypted_client_id(enc_id); - return NO_ERROR; + return CdmResponseType(NO_ERROR); } bool ServiceCertificate::GetRequest(CdmKeyMessage* request) { @@ -288,39 +292,39 @@ CdmResponseType ServiceCertificate::ParseResponse(const std::string& response, std::string* certificate) { if (response.empty()) { LOGE("Response is empty"); - return EMPTY_RESPONSE_ERROR_1; + return CdmResponseType(EMPTY_RESPONSE_ERROR_1); } if (certificate == nullptr) { LOGE("Output parameter |certificate| not provided"); - return INVALID_PARAMETERS_ENG_24; + return CdmResponseType(INVALID_PARAMETERS_ENG_24); } SignedMessage signed_response; if (!signed_response.ParseFromString(response)) { LOGE("Failed to parse signed response"); - return PARSE_RESPONSE_ERROR_1; + return CdmResponseType(PARSE_RESPONSE_ERROR_1); } if (signed_response.type() == SignedMessage::ERROR_RESPONSE) { LicenseError license_error; if (!license_error.ParseFromString(signed_response.msg())) { LOGE("Failed to parse license error"); - return PARSE_RESPONSE_ERROR_2; + return CdmResponseType(PARSE_RESPONSE_ERROR_2); } LOGE("Server response contains error: error_code = %d", static_cast(license_error.error_code())); - return PARSE_RESPONSE_ERROR_3; + return CdmResponseType(PARSE_RESPONSE_ERROR_3); } if (signed_response.type() != SignedMessage::SERVICE_CERTIFICATE) { LOGE("Unexpected response type: type = %d, expected_type = %d", static_cast(signed_response.type()), static_cast(SignedMessage::SERVICE_CERTIFICATE)); - return PARSE_RESPONSE_ERROR_4; + return CdmResponseType(PARSE_RESPONSE_ERROR_4); } certificate->assign(signed_response.msg()); - return NO_ERROR; + return CdmResponseType(NO_ERROR); } } // namespace wvcdm diff --git a/libwvdrmengine/cdm/core/src/system_id_extractor.cpp b/libwvdrmengine/cdm/core/src/system_id_extractor.cpp index 33da5757..9c0e3678 100644 --- a/libwvdrmengine/cdm/core/src/system_id_extractor.cpp +++ b/libwvdrmengine/cdm/core/src/system_id_extractor.cpp @@ -53,8 +53,7 @@ bool SystemIdExtractor::ExtractSystemId(uint32_t* system_id) { crypto_session_->GetProvisioningMethod(security_level_, &type); if (status != NO_ERROR) { LOGE("Failed to get provisioning method: security_level = %s, status = %d", - RequestedSecurityLevelToString(security_level_), - static_cast(status)); + RequestedSecurityLevelToString(security_level_), status.Enum()); return false; } bool success = false; @@ -122,8 +121,7 @@ bool SystemIdExtractor::ExtractSystemIdProv20(uint32_t* system_id) { } if (status != NO_ERROR) { LOGE("Failed to get keybox data: security_level = %s, status = %d", - RequestedSecurityLevelToString(security_level_), - static_cast(status)); + RequestedSecurityLevelToString(security_level_), status.Enum()); return false; } if (!ExtractSystemIdFromKeyboxData(key_data, system_id)) { @@ -139,8 +137,7 @@ bool SystemIdExtractor::ExtractSystemIdProv30(uint32_t* system_id) { crypto_session_->GetTokenFromOemCert(security_level_, &oem_cert); if (status != NO_ERROR) { LOGE("Failed to get OEM certificate: security_level = %s, status = %d", - RequestedSecurityLevelToString(security_level_), - static_cast(status)); + RequestedSecurityLevelToString(security_level_), status.Enum()); return false; } if (!ExtractSystemIdFromOemCert(oem_cert, system_id)) { diff --git a/libwvdrmengine/cdm/core/src/usage_table_header.cpp b/libwvdrmengine/cdm/core/src/usage_table_header.cpp index f0cc7969..0e8cffd6 100644 --- a/libwvdrmengine/cdm/core/src/usage_table_header.cpp +++ b/libwvdrmengine/cdm/core/src/usage_table_header.cpp @@ -205,8 +205,7 @@ bool UsageTableHeader::RestoreTable(CryptoSession* const crypto_session) { const CdmResponseType status = crypto_session->LoadUsageTableHeader( requested_security_level_, usage_table_header_); if (status != NO_ERROR) { - LOGE("Failed to load usage table header: sts = %d", - static_cast(status)); + LOGE("Failed to load usage table header: sts = %d", status.Enum()); return false; } @@ -300,7 +299,7 @@ CdmResponseType UsageTableHeader::AddEntry( return status; } StoreTable(); - return NO_ERROR; + return CdmResponseType(NO_ERROR); } CdmResponseType UsageTableHeader::LoadEntry(CryptoSession* crypto_session, @@ -315,7 +314,7 @@ CdmResponseType UsageTableHeader::LoadEntry(CryptoSession* crypto_session, "Requested usage entry number is larger than table size: " "usage_entry_number = %u, table_size = %zu", usage_entry_number, usage_entry_info_.size()); - return USAGE_INVALID_LOAD_ENTRY; + return CdmResponseType(USAGE_INVALID_LOAD_ENTRY); } } metrics::CryptoMetrics* metrics = crypto_session->GetCryptoMetrics(); @@ -339,7 +338,7 @@ CdmResponseType UsageTableHeader::UpdateEntry(uint32_t usage_entry_number, if (usage_entry_number >= usage_entry_info_.size()) { LOGE("Usage entry number %u is larger than usage entry size %zu", usage_entry_number, usage_entry_info_.size()); - return USAGE_INVALID_PARAMETERS_2; + return CdmResponseType(USAGE_INVALID_PARAMETERS_2); } CdmResponseType status = @@ -349,7 +348,7 @@ CdmResponseType UsageTableHeader::UpdateEntry(uint32_t usage_entry_number, usage_entry_info_[usage_entry_number].last_use_time = GetCurrentTime(); StoreTable(); - return NO_ERROR; + return CdmResponseType(NO_ERROR); } CdmResponseType UsageTableHeader::InvalidateEntry( @@ -372,7 +371,7 @@ CdmResponseType UsageTableHeader::InvalidateEntryInternal( "Usage entry number is larger than table size: " "usage_entry_number = %u, table_size = %zu", usage_entry_number, usage_entry_info_.size()); - return USAGE_INVALID_PARAMETERS_1; + return CdmResponseType(USAGE_INVALID_PARAMETERS_1); } usage_entry_info_[usage_entry_number].Clear(); @@ -395,13 +394,13 @@ CdmResponseType UsageTableHeader::InvalidateEntryInternal( } if (status == SYSTEM_INVALIDATED_ERROR) { LOGE("Invalidate entry failed due to system invalidation error"); - return SYSTEM_INVALIDATED_ERROR; + return CdmResponseType(SYSTEM_INVALIDATED_ERROR); } } else { StoreTable(); } - return NO_ERROR; + return CdmResponseType(NO_ERROR); } size_t UsageTableHeader::UsageInfoCount() const { @@ -426,7 +425,7 @@ bool UsageTableHeader::OpenSessionCheck(CryptoSession* const crypto_session) { LOGE( "Cannot initialize usage table header with open crypto session: " "status = %d, count = %zu", - static_cast(status), session_count); + status.Enum(), session_count); return false; } return true; @@ -460,7 +459,7 @@ bool UsageTableHeader::CapacityCheck(CryptoSession* const crypto_session) { local_crypto_session->Open(requested_security_level_); if (status != NO_ERROR) { LOGE("Failed to open crypto session for capacity test: sts = %d", - static_cast(status)); + status.Enum()); return false; } @@ -468,8 +467,7 @@ bool UsageTableHeader::CapacityCheck(CryptoSession* const crypto_session) { status = AddEntry(local_crypto_session, true, kDummyKeySetId, kEmptyString, kEmptyString, &temporary_usage_entry_number); if (status != NO_ERROR) { - LOGE("Failed to add entry for capacity test: sts = %d", - static_cast(status)); + LOGE("Failed to add entry for capacity test: sts = %d", status.Enum()); return false; } @@ -478,7 +476,7 @@ bool UsageTableHeader::CapacityCheck(CryptoSession* const crypto_session) { /* defrag_table = */ true, device_files_.get(), metrics); if (status != NO_ERROR) { LOGE("Failed to invalidate entry for capacity test: sts = %d", - static_cast(status)); + status.Enum()); return false; } if (usage_entry_info_.size() > temporary_usage_entry_number) { @@ -528,7 +526,7 @@ CdmResponseType UsageTableHeader::CreateEntry( "New entry number is smaller than table size: " "entry_info_number = %u, table_size = %zu", *usage_entry_number, usage_entry_info_.size()); - return USAGE_INVALID_NEW_ENTRY; + return CdmResponseType(USAGE_INVALID_NEW_ENTRY); } LOGI("usage_entry_number = %u", *usage_entry_number); const size_t previous_size = usage_entry_info_.size(); @@ -543,7 +541,7 @@ CdmResponseType UsageTableHeader::CreateEntry( } } usage_entry_info_[*usage_entry_number].Clear(); - return NO_ERROR; + return CdmResponseType(NO_ERROR); } CdmResponseType UsageTableHeader::RelocateNewEntry( @@ -552,7 +550,7 @@ CdmResponseType UsageTableHeader::RelocateNewEntry( const uint32_t initial_entry_number = *usage_entry_number; if (initial_entry_number == kMinimumEntryNumber) { // First entry in the table. - return NO_ERROR; + return CdmResponseType(NO_ERROR); } uint32_t unoccupied_entry_number = initial_entry_number; for (uint32_t i = kMinimumEntryNumber; i < initial_entry_number; i++) { @@ -563,7 +561,7 @@ CdmResponseType UsageTableHeader::RelocateNewEntry( } if (unoccupied_entry_number == initial_entry_number) { // No open position. - return NO_ERROR; + return CdmResponseType(NO_ERROR); } const CdmResponseType status = crypto_session->MoveUsageEntry(unoccupied_entry_number); @@ -571,7 +569,7 @@ CdmResponseType UsageTableHeader::RelocateNewEntry( // Not unexpected, there is a window of time between releasing the // entry and closing the OEMCrypto session. LOGD("Released entry still in use: index = %u", unoccupied_entry_number); - return NO_ERROR; + return CdmResponseType(NO_ERROR); } if (status != NO_ERROR) return status; LOGI("Entry moved: from_index = %u, to_index = %u", initial_entry_number, @@ -580,7 +578,7 @@ CdmResponseType UsageTableHeader::RelocateNewEntry( usage_entry_info_[unoccupied_entry_number] = std::move(usage_entry_info_[initial_entry_number]); usage_entry_info_[initial_entry_number].Clear(); - return NO_ERROR; + return CdmResponseType(NO_ERROR); } bool UsageTableHeader::IsEntryUnoccupied( @@ -641,7 +639,7 @@ CdmResponseType UsageTableHeader::RefitTable( if (!IsEntryUnoccupied(usage_entry_number)) break; ++entries_to_remove; } - if (entries_to_remove == 0) return NO_ERROR; + if (entries_to_remove == 0) return CdmResponseType(NO_ERROR); const uint32_t new_size = old_size - entries_to_remove; const CdmResponseType status = crypto_session->ShrinkUsageTableHeader( requested_security_level_, new_size, &usage_table_header_); @@ -652,13 +650,13 @@ CdmResponseType UsageTableHeader::RefitTable( // Safe to assume table state is not invalidated. LOGW("Unexpected entry in use: range = [%u, %zu]", new_size, usage_entry_info_.size() - 1); - return NO_ERROR; + return CdmResponseType(NO_ERROR); } if (status != NO_ERROR) return status; LOGD("Table shrunk: old_size = %zu, new_size = %u", usage_entry_info_.size(), new_size); usage_entry_info_.resize(new_size); - return NO_ERROR; + return CdmResponseType(NO_ERROR); } CdmResponseType UsageTableHeader::MoveEntry( @@ -720,7 +718,7 @@ CdmResponseType UsageTableHeader::MoveEntry( StoreTable(); StoreEntry(to_usage_entry_number, device_files, usage_entry); - return NO_ERROR; + return CdmResponseType(NO_ERROR); } CdmResponseType UsageTableHeader::GetEntry(uint32_t usage_entry_number, @@ -741,7 +739,7 @@ CdmResponseType UsageTableHeader::GetEntry(uint32_t usage_entry_number, &sub_error_code)) { LOGE("Failed to retrieve license: status = %d", static_cast(sub_error_code)); - return USAGE_GET_ENTRY_RETRIEVE_LICENSE_FAILED; + return CdmResponseType(USAGE_GET_ENTRY_RETRIEVE_LICENSE_FAILED); } entry_number = license_data.usage_entry_number; @@ -761,7 +759,7 @@ CdmResponseType UsageTableHeader::GetEntry(uint32_t usage_entry_number, &provider_session_token, &license_request, &license, usage_entry, &entry_number, &drm_certificate, &wrapped_private_key)) { LOGE("Failed to retrieve usage information"); - return USAGE_GET_ENTRY_RETRIEVE_USAGE_INFO_FAILED; + return CdmResponseType(USAGE_GET_ENTRY_RETRIEVE_USAGE_INFO_FAILED); } break; } @@ -771,7 +769,7 @@ CdmResponseType UsageTableHeader::GetEntry(uint32_t usage_entry_number, "Cannot retrieve usage information with unknown storage type: " "storage_type = %d", static_cast(usage_entry_info_[usage_entry_number].storage_type)); - return USAGE_GET_ENTRY_RETRIEVE_INVALID_STORAGE_TYPE; + return CdmResponseType(USAGE_GET_ENTRY_RETRIEVE_INVALID_STORAGE_TYPE); } if (usage_entry_number != entry_number) { @@ -779,10 +777,10 @@ CdmResponseType UsageTableHeader::GetEntry(uint32_t usage_entry_number, "Usage entry number mismatch: expected_usage_entry_number = %u, " "retrieved_usage_entry_number = %u", usage_entry_number, entry_number); - return USAGE_ENTRY_NUMBER_MISMATCH; + return CdmResponseType(USAGE_ENTRY_NUMBER_MISMATCH); } - return NO_ERROR; + return CdmResponseType(NO_ERROR); } CdmResponseType UsageTableHeader::StoreEntry(uint32_t usage_entry_number, @@ -804,7 +802,7 @@ CdmResponseType UsageTableHeader::StoreEntry(uint32_t usage_entry_number, &sub_error_code)) { LOGE("Failed to retrieve license: status = %s", DeviceFiles::ResponseTypeToString(sub_error_code)); - return USAGE_STORE_ENTRY_RETRIEVE_LICENSE_FAILED; + return CdmResponseType(USAGE_STORE_ENTRY_RETRIEVE_LICENSE_FAILED); } // Update. @@ -814,7 +812,7 @@ CdmResponseType UsageTableHeader::StoreEntry(uint32_t usage_entry_number, if (!device_files->StoreLicense(license_data, &sub_error_code)) { LOGE("Failed to store license: status = %s", DeviceFiles::ResponseTypeToString(sub_error_code)); - return USAGE_STORE_LICENSE_FAILED; + return CdmResponseType(USAGE_STORE_LICENSE_FAILED); } break; } @@ -831,7 +829,7 @@ CdmResponseType UsageTableHeader::StoreEntry(uint32_t usage_entry_number, &provider_session_token, &key_request, &key_response, &entry, &entry_number, &drm_certificate, &wrapped_private_key)) { LOGE("Failed to retrieve usage information"); - return USAGE_STORE_ENTRY_RETRIEVE_USAGE_INFO_FAILED; + return CdmResponseType(USAGE_STORE_ENTRY_RETRIEVE_USAGE_INFO_FAILED); } device_files->DeleteUsageInfo( usage_entry_info_[usage_entry_number].usage_info_file_name, @@ -842,7 +840,7 @@ CdmResponseType UsageTableHeader::StoreEntry(uint32_t usage_entry_number, usage_entry_info_[usage_entry_number].key_set_id, usage_entry, usage_entry_number, drm_certificate, wrapped_private_key)) { LOGE("Failed to store usage information"); - return USAGE_STORE_USAGE_INFO_FAILED; + return CdmResponseType(USAGE_STORE_USAGE_INFO_FAILED); } break; } @@ -852,9 +850,9 @@ CdmResponseType UsageTableHeader::StoreEntry(uint32_t usage_entry_number, "Cannot retrieve usage information with unknown storage type: " "storage_type = %d", static_cast(usage_entry_info_[usage_entry_number].storage_type)); - return USAGE_STORE_ENTRY_RETRIEVE_INVALID_STORAGE_TYPE; + return CdmResponseType(USAGE_STORE_ENTRY_RETRIEVE_INVALID_STORAGE_TYPE); } - return NO_ERROR; + return CdmResponseType(NO_ERROR); } bool UsageTableHeader::StoreTable() { @@ -876,7 +874,7 @@ CdmResponseType UsageTableHeader::Shrink( number_of_usage_entries_to_delete); if (usage_entry_info_.empty()) { LOGE("Usage entry info table unexpectedly empty"); - return NO_USAGE_ENTRIES; + return CdmResponseType(NO_USAGE_ENTRIES); } if (usage_entry_info_.size() < number_of_usage_entries_to_delete) { @@ -888,7 +886,7 @@ CdmResponseType UsageTableHeader::Shrink( static_cast(usage_entry_info_.size()); } - if (number_of_usage_entries_to_delete == 0) return NO_ERROR; + if (number_of_usage_entries_to_delete == 0) return CdmResponseType(NO_ERROR); // crypto_session points to an object whose scope is this method or a test // object whose scope is the lifetime of this class @@ -923,7 +921,7 @@ CdmResponseType UsageTableHeader::DefragTable(DeviceFiles* device_files, // Special case 0: Empty table, do nothing. if (usage_entry_info_.empty()) { LOGD("Table empty, nothing to defrag"); - return NO_ERROR; + return CdmResponseType(NO_ERROR); } // Step 1: Create a list of entries to be removed from the table. @@ -943,7 +941,7 @@ CdmResponseType UsageTableHeader::DefragTable(DeviceFiles* device_files, // needs to be done. if (entries_to_remove.empty()) { LOGD("No entries are invalid"); - return NO_ERROR; + return CdmResponseType(NO_ERROR); } // Step 2: Create a list of entries to be moved from the end of the @@ -1027,7 +1025,7 @@ CdmResponseType UsageTableHeader::DefragTable(DeviceFiles* device_files, status = MoveEntry(from_entry_number, from_entry, to_entry_number, device_files, metrics); - switch (status) { + switch (status.Enum()) { case NO_ERROR: { entries_to_remove.pop_back(); entries_to_move.pop_back(); @@ -1091,7 +1089,7 @@ CdmResponseType UsageTableHeader::DefragTable(DeviceFiles* device_files, // For all other cases, it may not be safe to proceed, even to // shrink the table. LOGE("Unrecoverable error occurred while defragging table: status = %d", - static_cast(status)); + status.Enum()); return status; } } // End switch case. @@ -1129,7 +1127,7 @@ CdmResponseType UsageTableHeader::DefragTable(DeviceFiles* device_files, if (to_remove == 0) { LOGD("Defrag completed without shrinking table"); StoreTable(); - return NO_ERROR; + return CdmResponseType(NO_ERROR); } // Step 6: Shrink table to the new size. @@ -1143,7 +1141,7 @@ CdmResponseType UsageTableHeader::ReleaseOldestEntry( uint32_t entry_number_to_delete; if (!GetRemovalCandidate(&entry_number_to_delete)) { LOGE("Could not determine which license to remove"); - return UNKNOWN_ERROR; + return CdmResponseType(UNKNOWN_ERROR); } const CdmUsageEntryInfo& usage_entry_info = usage_entry_info_[entry_number_to_delete]; @@ -1159,14 +1157,13 @@ CdmResponseType UsageTableHeader::ReleaseOldestEntry( device_files_.get(), metrics); if (status != NO_ERROR) { - LOGE("Failed to invalidate oldest entry: status = %d", - static_cast(status)); + LOGE("Failed to invalidate oldest entry: status = %d", status.Enum()); return status; } // Record metrics on success. RecordLruEventMetrics(metrics, staleness, storage_type); - return NO_ERROR; + return CdmResponseType(NO_ERROR); } // Test only method. diff --git a/libwvdrmengine/cdm/core/src/wv_cdm_types.cpp b/libwvdrmengine/cdm/core/src/wv_cdm_types.cpp index 36eb9e14..99b7c9b4 100644 --- a/libwvdrmengine/cdm/core/src/wv_cdm_types.cpp +++ b/libwvdrmengine/cdm/core/src/wv_cdm_types.cpp @@ -143,8 +143,8 @@ const char* CdmProductionReadinessToString(CdmProductionReadiness readiness) { return UnknownValueRep(readiness); } -const char* CdmResponseTypeToString(CdmResponseType cdm_response_type) { - switch (cdm_response_type) { +const char* CdmResponseEnumToString(CdmResponseEnum cdm_response_enum) { + switch (cdm_response_enum) { case NO_ERROR: return "NO_ERROR"; case UNKNOWN_ERROR: @@ -820,7 +820,7 @@ const char* CdmResponseTypeToString(CdmResponseType cdm_response_type) { case PROVISIONING_4_FAILED_TO_INITIALIZE_DEVICE_FILES_3: return "PROVISIONING_4_FAILED_TO_INITIALIZE_DEVICE_FILES_3"; } - return UnknownEnumValueToString(static_cast(cdm_response_type)); + return UnknownEnumValueToString(cdm_response_enum); } const char* UnknownEnumValueToString(int value) { diff --git a/libwvdrmengine/cdm/core/test/cdm_engine_metrics_decorator_unittest.cpp b/libwvdrmengine/cdm/core/test/cdm_engine_metrics_decorator_unittest.cpp index b453235f..53e53103 100644 --- a/libwvdrmengine/cdm/core/test/cdm_engine_metrics_decorator_unittest.cpp +++ b/libwvdrmengine/cdm/core/test/cdm_engine_metrics_decorator_unittest.cpp @@ -137,7 +137,7 @@ TEST_F(WvCdmEngineMetricsImplTest, OpenSession_Overload1) { *test_cdm_metrics_engine_, OpenSession(StrEq("foo"), Eq(&property_set), Matcher(Eq("bar")), Eq(&event_listener))) - .WillOnce(Return(wvcdm::UNKNOWN_ERROR)); + .WillOnce(Return(CdmResponseType(UNKNOWN_ERROR))); ASSERT_EQ(wvcdm::UNKNOWN_ERROR, test_cdm_metrics_engine_->OpenSession("foo", &property_set, "bar", @@ -160,7 +160,7 @@ TEST_F(WvCdmEngineMetricsImplTest, OpenSession_Overload2) { EXPECT_CALL(*test_cdm_metrics_engine_, OpenSession(StrEq("foo"), Eq(&property_set), Eq(&event_listener), Matcher(Eq(&session_id)))) - .WillOnce(Return(wvcdm::UNKNOWN_ERROR)); + .WillOnce(Return(CdmResponseType(UNKNOWN_ERROR))); ASSERT_EQ(wvcdm::UNKNOWN_ERROR, test_cdm_metrics_engine_->OpenSession( @@ -180,7 +180,7 @@ TEST_F(WvCdmEngineMetricsImplTest, CloseSession) { MockWvCdmEventListener event_listener; EXPECT_CALL(*test_cdm_metrics_engine_, CloseSession(Eq("bar"))) - .WillOnce(Return(wvcdm::UNKNOWN_ERROR)); + .WillOnce(Return(CdmResponseType(UNKNOWN_ERROR))); ASSERT_EQ(wvcdm::UNKNOWN_ERROR, test_cdm_metrics_engine_->CloseSession("bar")); @@ -201,7 +201,7 @@ TEST_F(WvCdmEngineMetricsImplTest, OpenKeySetSession) { EXPECT_CALL( *test_cdm_metrics_engine_, OpenKeySetSession(Eq("bar"), Eq(&property_set), Eq(&event_listener))) - .WillOnce(Return(wvcdm::UNKNOWN_ERROR)); + .WillOnce(Return(CdmResponseType(UNKNOWN_ERROR))); ASSERT_EQ(wvcdm::UNKNOWN_ERROR, test_cdm_metrics_engine_->OpenKeySetSession( "bar", &property_set, &event_listener)); @@ -225,7 +225,7 @@ TEST_F(WvCdmEngineMetricsImplTest, GenerateKeyRequest) { *test_cdm_metrics_engine_, GenerateKeyRequest(Eq("foo"), Eq("bar"), _, Eq(kLicenseTypeStreaming), Eq(app_parameters), Eq(&key_request))) - .WillOnce(Return(wvcdm::UNKNOWN_ERROR)); + .WillOnce(Return(CdmResponseType(UNKNOWN_ERROR))); ASSERT_EQ(wvcdm::UNKNOWN_ERROR, test_cdm_metrics_engine_->GenerateKeyRequest( @@ -250,7 +250,7 @@ TEST_F(WvCdmEngineMetricsImplTest, AddKey) { EXPECT_CALL(*test_cdm_metrics_engine_, AddKey(Eq("fake session id"), Eq("fake response"), Eq(&license_type), Eq(&key_set_id))) - .WillOnce(Return(wvcdm::UNKNOWN_ERROR)); + .WillOnce(Return(CdmResponseType(UNKNOWN_ERROR))); ASSERT_EQ(wvcdm::UNKNOWN_ERROR, test_cdm_metrics_engine_->AddKey("fake session id", "fake response", @@ -269,7 +269,7 @@ TEST_F(WvCdmEngineMetricsImplTest, AddKey) { TEST_F(WvCdmEngineMetricsImplTest, RestoreKey) { EXPECT_CALL(*test_cdm_metrics_engine_, RestoreKey(Eq("fake session id"), Eq("fake key set id"))) - .WillOnce(Return(wvcdm::UNKNOWN_ERROR)); + .WillOnce(Return(CdmResponseType(UNKNOWN_ERROR))); ASSERT_EQ(wvcdm::UNKNOWN_ERROR, test_cdm_metrics_engine_->RestoreKey( "fake session id", "fake key set id")); @@ -286,7 +286,7 @@ TEST_F(WvCdmEngineMetricsImplTest, RestoreKey) { TEST_F(WvCdmEngineMetricsImplTest, RemoveKeys) { EXPECT_CALL(*test_cdm_metrics_engine_, RemoveKeys(Eq("fake session id"))) - .WillOnce(Return(wvcdm::UNKNOWN_ERROR)); + .WillOnce(Return(CdmResponseType(UNKNOWN_ERROR))); ASSERT_EQ(wvcdm::UNKNOWN_ERROR, test_cdm_metrics_engine_->RemoveKeys("fake session id")); @@ -304,7 +304,7 @@ TEST_F(WvCdmEngineMetricsImplTest, QueryKeyStatus) { CdmQueryMap query_response; EXPECT_CALL(*test_cdm_metrics_engine_, QueryKeyStatus(Eq("fake session id"), Eq(&query_response))) - .WillOnce(Return(wvcdm::UNKNOWN_ERROR)); + .WillOnce(Return(CdmResponseType(UNKNOWN_ERROR))); ASSERT_EQ(wvcdm::UNKNOWN_ERROR, test_cdm_metrics_engine_->QueryKeyStatus( "fake session id", &query_response)); @@ -328,7 +328,7 @@ TEST_F(WvCdmEngineMetricsImplTest, GetProvisioningRequest) { Eq(kCertificateX509), Eq("fake certificate authority"), Eq("fake service certificate"), Eq(wvcdm::kLevelDefault), Eq(&request), Eq(&default_url))) - .WillOnce(Return(wvcdm::UNKNOWN_ERROR)); + .WillOnce(Return(CdmResponseType(UNKNOWN_ERROR))); ASSERT_EQ(wvcdm::UNKNOWN_ERROR, test_cdm_metrics_engine_->GetProvisioningRequest( @@ -356,7 +356,7 @@ TEST_F(WvCdmEngineMetricsImplTest, HandleProvisioningResponse) { HandleProvisioningResponse(Eq("fake provisioning response"), Eq(wvcdm::kLevelDefault), Eq(&cert), Eq(&wrapped_key))) - .WillOnce(Return(wvcdm::UNKNOWN_ERROR)); + .WillOnce(Return(CdmResponseType(UNKNOWN_ERROR))); ASSERT_EQ(wvcdm::UNKNOWN_ERROR, test_cdm_metrics_engine_->HandleProvisioningResponse( @@ -376,7 +376,7 @@ TEST_F(WvCdmEngineMetricsImplTest, HandleProvisioningResponse) { TEST_F(WvCdmEngineMetricsImplTest, Unprovision) { EXPECT_CALL(*test_cdm_metrics_engine_, Unprovision(Eq(kSecurityLevelL2))) - .WillOnce(Return(wvcdm::UNKNOWN_ERROR)); + .WillOnce(Return(CdmResponseType(UNKNOWN_ERROR))); ASSERT_EQ(wvcdm::UNKNOWN_ERROR, test_cdm_metrics_engine_->Unprovision(kSecurityLevelL2)); @@ -392,7 +392,7 @@ TEST_F(WvCdmEngineMetricsImplTest, Unprovision) { TEST_F(WvCdmEngineMetricsImplTest, RemoveAllUsageInfo_Overload1) { EXPECT_CALL(*test_cdm_metrics_engine_, RemoveAllUsageInfo(Eq("fake app id"))) - .WillOnce(Return(wvcdm::UNKNOWN_ERROR)); + .WillOnce(Return(CdmResponseType(UNKNOWN_ERROR))); ASSERT_EQ(wvcdm::UNKNOWN_ERROR, test_cdm_metrics_engine_->RemoveAllUsageInfo("fake app id")); @@ -411,7 +411,7 @@ TEST_F(WvCdmEngineMetricsImplTest, RemoveAllUsageInfo_Overload1) { TEST_F(WvCdmEngineMetricsImplTest, RemoveAllUsageInfo_Overload2) { EXPECT_CALL(*test_cdm_metrics_engine_, RemoveAllUsageInfo(Eq("fake app id"), Eq(kSecurityLevelL2))) - .WillOnce(Return(wvcdm::UNKNOWN_ERROR)); + .WillOnce(Return(CdmResponseType(UNKNOWN_ERROR))); ASSERT_EQ(wvcdm::UNKNOWN_ERROR, test_cdm_metrics_engine_->RemoveAllUsageInfo( "fake app id", kSecurityLevelL2)); @@ -430,7 +430,7 @@ TEST_F(WvCdmEngineMetricsImplTest, RemoveAllUsageInfo_Overload2) { TEST_F(WvCdmEngineMetricsImplTest, RemoveUsageInfo) { EXPECT_CALL(*test_cdm_metrics_engine_, RemoveUsageInfo(Eq("fake app id"), Eq("fake secure stop id"))) - .WillOnce(Return(wvcdm::UNKNOWN_ERROR)); + .WillOnce(Return(CdmResponseType(UNKNOWN_ERROR))); ASSERT_EQ(wvcdm::UNKNOWN_ERROR, test_cdm_metrics_engine_->RemoveUsageInfo( "fake app id", "fake secure stop id")); @@ -448,7 +448,7 @@ TEST_F(WvCdmEngineMetricsImplTest, RemoveUsageInfo) { TEST_F(WvCdmEngineMetricsImplTest, ReleaseUsageInfo) { EXPECT_CALL(*test_cdm_metrics_engine_, ReleaseUsageInfo(Eq("fake release message"))) - .WillOnce(Return(wvcdm::UNKNOWN_ERROR)); + .WillOnce(Return(CdmResponseType(UNKNOWN_ERROR))); ASSERT_EQ(wvcdm::UNKNOWN_ERROR, test_cdm_metrics_engine_->ReleaseUsageInfo("fake release message")); @@ -470,7 +470,7 @@ TEST_F(WvCdmEngineMetricsImplTest, ListUsageIds) { EXPECT_CALL(*test_cdm_metrics_engine_, ListUsageIds(Eq("fake app id"), Eq(kSecurityLevelL2), Eq(&ksids), Eq(&provider_session_tokens))) - .WillOnce(Return(wvcdm::UNKNOWN_ERROR)); + .WillOnce(Return(CdmResponseType(UNKNOWN_ERROR))); ASSERT_EQ(wvcdm::UNKNOWN_ERROR, test_cdm_metrics_engine_->ListUsageIds( "fake app id", kSecurityLevelL2, &ksids, @@ -509,7 +509,7 @@ TEST_F(WvCdmEngineMetricsImplTest, FindSessionForKey) { TEST_F(WvCdmEngineMetricsImplTest, Decrypt) { CdmDecryptionParametersV16 parameters; EXPECT_CALL(*test_cdm_metrics_engine_, DecryptV16(Eq("fake session id"), _)) - .WillOnce(Return(wvcdm::UNKNOWN_ERROR)); + .WillOnce(Return(CdmResponseType(UNKNOWN_ERROR))); ASSERT_EQ(wvcdm::UNKNOWN_ERROR, test_cdm_metrics_engine_->DecryptV16( "fake session id", parameters)); diff --git a/libwvdrmengine/cdm/core/test/cdm_session_unittest.cpp b/libwvdrmengine/cdm/core/test/cdm_session_unittest.cpp index 5ec877dc..270961d9 100644 --- a/libwvdrmengine/cdm/core/test/cdm_session_unittest.cpp +++ b/libwvdrmengine/cdm/core/test/cdm_session_unittest.cpp @@ -217,7 +217,7 @@ TEST_F(CdmSessionTest, InitWithBuiltInCertificate) { CdmSecurityLevel level = kSecurityLevelL1; EXPECT_CALL(*crypto_session_, Open(Eq(kLevelDefault))) .InSequence(crypto_session_seq) - .WillOnce(Return(NO_ERROR)); + .WillOnce(Return(CdmResponseType(NO_ERROR))); EXPECT_CALL(*crypto_session_, GetSecurityLevel()) .InSequence(crypto_session_seq) .WillOnce(Return(level)); @@ -237,7 +237,7 @@ TEST_F(CdmSessionTest, InitWithCertificate) { CdmSecurityLevel level = kSecurityLevelL1; EXPECT_CALL(*crypto_session_, Open(Eq(kLevelDefault))) .InSequence(crypto_session_seq) - .WillOnce(Return(NO_ERROR)); + .WillOnce(Return(CdmResponseType(NO_ERROR))); EXPECT_CALL(*crypto_session_, GetSecurityLevel()) .InSequence(crypto_session_seq) .WillOnce(Return(level)); @@ -257,7 +257,7 @@ TEST_F(CdmSessionTest, ReInitFail) { CdmSecurityLevel level = kSecurityLevelL1; EXPECT_CALL(*crypto_session_, Open(Eq(kLevelDefault))) .InSequence(crypto_session_seq) - .WillOnce(Return(NO_ERROR)); + .WillOnce(Return(CdmResponseType(NO_ERROR))); EXPECT_CALL(*crypto_session_, GetSecurityLevel()) .InSequence(crypto_session_seq) .WillOnce(Return(level)); @@ -275,7 +275,7 @@ TEST_F(CdmSessionTest, ReInitFail) { TEST_F(CdmSessionTest, InitFailCryptoError) { EXPECT_CALL(*crypto_session_, Open(Eq(kLevelDefault))) - .WillOnce(Return(UNKNOWN_ERROR)); + .WillOnce(Return(CdmResponseType(UNKNOWN_ERROR))); EXPECT_CALL(*license_parser_, provider_session_token()) .WillRepeatedly(Return("Mock provider session token")); @@ -288,7 +288,7 @@ TEST_F(CdmSessionTest, UpdateUsageEntry) { CdmSecurityLevel level = kSecurityLevelL1; EXPECT_CALL(*crypto_session_, Open(Eq(kLevelDefault))) .InSequence(crypto_session_seq) - .WillOnce(Return(NO_ERROR)); + .WillOnce(Return(CdmResponseType(NO_ERROR))); EXPECT_CALL(*crypto_session_, GetSecurityLevel()) .InSequence(crypto_session_seq) .WillOnce(Return(level)); @@ -306,7 +306,7 @@ TEST_F(CdmSessionTest, UpdateUsageEntry) { EXPECT_CALL(*license_parser_, provider_session_token()) .WillRepeatedly(Return("Mock provider session token")); EXPECT_CALL(usage_table_header_, UpdateEntry(_, NotNull(), NotNull())) - .WillRepeatedly(Return(NO_ERROR)); + .WillRepeatedly(Return(CdmResponseType(NO_ERROR))); EXPECT_EQ(NO_ERROR, cdm_session_->Init(nullptr)); EXPECT_TRUE(cdm_session_->supports_usage_info()); diff --git a/libwvdrmengine/cdm/core/test/config_test_env.h b/libwvdrmengine/cdm/core/test/config_test_env.h index 1bd6e0de..bab2b3c9 100644 --- a/libwvdrmengine/cdm/core/test/config_test_env.h +++ b/libwvdrmengine/cdm/core/test/config_test_env.h @@ -92,7 +92,13 @@ class ConfigTestEnv { } int test_pass() const { return test_pass_; } const std::string& test_data_path() const { return test_data_path_; } + int server_version() const { return server_version_; } + // Return true if the server version has been set and it is older than the + // specified version. We know the server version is set, if it is nonzero. + bool ServerOlderThan(int server_version) { + return server_version_ > 0 && server_version_ < server_version; + } static const CdmInitData GetInitData(ContentId content_id); static const std::string& GetLicenseServerUrl( ServerConfigurationId server_configuration_id); @@ -122,6 +128,9 @@ class ConfigTestEnv { void set_test_data_path(const std::string& test_data_path) { test_data_path_ = test_data_path; } + void set_server_version(int server_version) { + if (server_version >= 0) server_version_ = server_version; + } // The QA service certificate, used for a local provisioning server. static std::string QAProvisioningServiceCertificate(); @@ -139,6 +148,7 @@ class ConfigTestEnv { std::string provisioning_service_certificate_; int test_pass_; std::string test_data_path_; // Where to store test data for reboot tests. + int server_version_ = 0; }; // The default provisioning server URL for a default provisioning request. diff --git a/libwvdrmengine/cdm/core/test/keybox_ota_test.cpp b/libwvdrmengine/cdm/core/test/keybox_ota_test.cpp index cc3e1580..5669c9c1 100644 --- a/libwvdrmengine/cdm/core/test/keybox_ota_test.cpp +++ b/libwvdrmengine/cdm/core/test/keybox_ota_test.cpp @@ -47,7 +47,7 @@ class CdmOtaKeyboxTest : public ::testing::Test { std::string cert_authority; CdmProvisioningRequest prov_request; std::string provisioning_server_url; - CdmResponseType result = CERT_PROVISIONING_NONCE_GENERATION_ERROR; + CdmResponseType result(CERT_PROVISIONING_NONCE_GENERATION_ERROR); // Get a provisioning request. We might need one retry if there is a nonce // flood failure. for (int i = 0; i < 2; i++) { @@ -77,8 +77,8 @@ class CdmOtaKeyboxTest : public ::testing::Test { // Receive and parse response. std::string http_message; - ASSERT_TRUE(url_request.GetResponse(&http_message)) - << "Failed to get provisioning response"; + ASSERT_NO_FATAL_FAILURE(url_request.AssertOkResponse(&http_message)) + << "Keybox OTA provisioning request failed."; LOGV("http_message: \n%s\n", http_message.c_str()); std::string cert, wrapped_key; @@ -111,7 +111,7 @@ TEST_F(CdmOtaKeyboxTest, BasicTest) { } else { std::cout << " " << "Could not find system id before test. "; - PrintTo(system_id_status, &std::cout); + PrintTo(system_id_status.Enum(), &std::cout); std::cout << "\n"; } @@ -138,7 +138,7 @@ TEST_F(CdmOtaKeyboxTest, BasicTest) { } else { std::cout << " " << "Could not find system id after first provisioning. "; - PrintTo(system_id_status, &std::cout); + PrintTo(system_id_status.Enum(), &std::cout); std::cout << "\n"; } @@ -163,7 +163,7 @@ TEST_F(CdmOtaKeyboxTest, BasicTest) { } else { std::cout << " " << "Could not find system id after second provisioning. "; - PrintTo(system_id_status, &std::cout); + PrintTo(system_id_status.Enum(), &std::cout); std::cout << "\n"; } diff --git a/libwvdrmengine/cdm/core/test/license_holder.cpp b/libwvdrmengine/cdm/core/test/license_holder.cpp index 140029de..9be41549 100644 --- a/libwvdrmengine/cdm/core/test/license_holder.cpp +++ b/libwvdrmengine/cdm/core/test/license_holder.cpp @@ -10,7 +10,6 @@ namespace wvcdm { namespace { -constexpr int kHttpOk = 200; const std::string kCencMimeType = "cenc"; } // namespace @@ -77,10 +76,9 @@ void LicenseHolder::GenerateAndPostRenewalRequest( } void LicenseHolder::FetchRenewal() { ASSERT_NE(renewal_in_flight_, nullptr) << "Failed for " << content_id(); - ASSERT_TRUE(renewal_in_flight_->GetResponse(&renewal_response_)) - << "Failed for " << content_id(); - int status_code = renewal_in_flight_->GetStatusCode(renewal_response_); - ASSERT_EQ(kHttpOk, status_code) << "Failed for " << content_id(); + ASSERT_NO_FATAL_FAILURE( + renewal_in_flight_->AssertOkResponse(&renewal_response_)) + << "Renewal failed for " << content_id(); } void LicenseHolder::LoadRenewal() { @@ -214,12 +212,8 @@ void LicenseHolder::GetKeyResponse(const CdmKeyRequest& key_request) { std::string http_response; url_request.PostRequest(key_request.message); - ASSERT_TRUE(url_request.GetResponse(&http_response)); - int status_code = url_request.GetStatusCode(http_response); - ASSERT_EQ(kHttpOk, status_code) << "Error with url = " << url << "\n" - << "content_id = " << content_id() << "\n" - << "response = " << http_response; - + ASSERT_NO_FATAL_FAILURE(url_request.AssertOkResponse(&http_response)) + << "Failed for " << content_id(); LicenseRequest license_request; license_request.GetDrmMessage(http_response, key_response_); } diff --git a/libwvdrmengine/cdm/core/test/license_unittest.cpp b/libwvdrmengine/cdm/core/test/license_unittest.cpp index c1acaa73..c281ace4 100644 --- a/libwvdrmengine/cdm/core/test/license_unittest.cpp +++ b/libwvdrmengine/cdm/core/test/license_unittest.cpp @@ -308,7 +308,8 @@ TEST_F(CdmLicenseTest, PrepareKeyRequestValidation) { DoAll(SetArgPointee<0>(usage_information_support), Return(true))); EXPECT_CALL(*crypto_session_, GetHdcpCapabilities(NotNull(), NotNull())) .WillOnce(DoAll(SetArgPointee<0>(current_hdcp_version), - SetArgPointee<1>(max_hdcp_version), Return(NO_ERROR))); + SetArgPointee<1>(max_hdcp_version), + Return(CdmResponseType(NO_ERROR)))); // Supported certificates set by SetUp(). EXPECT_CALL(*crypto_session_, GetSupportedCertificateTypes(NotNull())); EXPECT_CALL(*crypto_session_, GetApiVersion(NotNull())) @@ -318,12 +319,13 @@ TEST_F(CdmLicenseTest, PrepareKeyRequestValidation) { .WillOnce(DoAll(SetArgPointee<0>(resource_rating_tier), Return(true))); EXPECT_CALL(*clock_, GetCurrentTime()).WillOnce(Return(kLicenseStartTime)); EXPECT_CALL(*crypto_session_, GenerateNonce(NotNull())) - .WillOnce(DoAll(SetArgPointee<0>(kNonce), Return(NO_ERROR))); + .WillOnce( + DoAll(SetArgPointee<0>(kNonce), Return(CdmResponseType(NO_ERROR)))); EXPECT_CALL(*crypto_session_, PrepareAndSignLicenseRequest(_, NotNull(), NotNull())) .WillOnce(DoAll(SetArgPointee<1>(kFakeCoreMessage), SetArgPointee<2>(kLicenseRequestSignature), - Return(NO_ERROR))); + Return(CdmResponseType(NO_ERROR)))); EXPECT_CALL(*crypto_session_, GetBuildInformation(NotNull())) .WillOnce(DoAll(SetArgPointee<0>(kFakeBuildInfo), Return(true))); EXPECT_CALL(*crypto_session_, GetWatermarkingSupport(NotNull())) @@ -440,7 +442,8 @@ TEST_F(CdmLicenseTest, PrepareKeyRequestValidationV15) { DoAll(SetArgPointee<0>(usage_information_support), Return(true))); EXPECT_CALL(*crypto_session_, GetHdcpCapabilities(NotNull(), NotNull())) .WillOnce(DoAll(SetArgPointee<0>(current_hdcp_version), - SetArgPointee<1>(max_hdcp_version), Return(NO_ERROR))); + SetArgPointee<1>(max_hdcp_version), + Return(CdmResponseType(NO_ERROR)))); EXPECT_CALL(*crypto_session_, GetSupportedCertificateTypes(NotNull())); EXPECT_CALL(*crypto_session_, GetApiVersion(NotNull())) .WillOnce( @@ -449,12 +452,13 @@ TEST_F(CdmLicenseTest, PrepareKeyRequestValidationV15) { .WillOnce(DoAll(SetArgPointee<0>(resource_rating_tier), Return(true))); EXPECT_CALL(*clock_, GetCurrentTime()).WillOnce(Return(kLicenseStartTime)); EXPECT_CALL(*crypto_session_, GenerateNonce(NotNull())) - .WillOnce(DoAll(SetArgPointee<0>(kNonce), Return(NO_ERROR))); + .WillOnce( + DoAll(SetArgPointee<0>(kNonce), Return(CdmResponseType(NO_ERROR)))); EXPECT_CALL(*crypto_session_, PrepareAndSignLicenseRequest(_, NotNull(), NotNull())) .WillOnce(DoAll(SetArgPointee<1>(kFakeCoreMessage), SetArgPointee<2>(kLicenseRequestSignature), - Return(NO_ERROR))); + Return(CdmResponseType(NO_ERROR)))); EXPECT_CALL(*crypto_session_, GetBuildInformation(NotNull())) .WillOnce(DoAll(SetArgPointee<0>(kFakeBuildInfo), Return(true))); EXPECT_CALL(*crypto_session_, GetWatermarkingSupport(NotNull())) @@ -598,7 +602,7 @@ TEST_P(CdmLicenseEntitledKeyTest, LoadsEntitledKeys) { if (variant.should_succeed) { EXPECT_CALL(*crypto_session_, LoadEntitledContentKeys(_)) - .WillOnce(Return(KEY_ADDED)); + .WillOnce(Return(CdmResponseType(KEY_ADDED))); EXPECT_CALL(*policy_engine_, SetEntitledLicenseKeys(_)).Times(1); } else { EXPECT_CALL(*crypto_session_, LoadEntitledContentKeys(_)).Times(0); diff --git a/libwvdrmengine/cdm/core/test/ota_keybox_provisioner_test.cpp b/libwvdrmengine/cdm/core/test/ota_keybox_provisioner_test.cpp index a0913d4d..8bbf3e65 100644 --- a/libwvdrmengine/cdm/core/test/ota_keybox_provisioner_test.cpp +++ b/libwvdrmengine/cdm/core/test/ota_keybox_provisioner_test.cpp @@ -68,7 +68,8 @@ class MockCryptoSession : public CryptoSession { void ExpectRequest(const std::string& request, CdmResponseType result) { if (result == NO_ERROR) { EXPECT_CALL(*this, PrepareOtaProvisioningRequest(false, NotNull())) - .WillOnce(DoAll(SetArgPointee<1>(request), Return(NO_ERROR))); + .WillOnce(DoAll(SetArgPointee<1>(request), + Return(CdmResponseType(NO_ERROR)))); } else { EXPECT_CALL(*this, PrepareOtaProvisioningRequest(false, NotNull())) .WillOnce(Return(result)); @@ -208,7 +209,8 @@ TEST_F(OtaKeyboxProvisionerTest, FullProvisioning) { EXPECT_FALSE(provisioner_->response_received()); // Generate request. - crypto_session_->ExpectRequest(kFakeOtaProvisioningRequest, NO_ERROR); + crypto_session_->ExpectRequest(kFakeOtaProvisioningRequest, + CdmResponseType(NO_ERROR)); std::string signed_prov_message, default_url; EXPECT_EQ(NO_ERROR, provisioner_->GetProvisioningRequest(&signed_prov_message, &default_url)); @@ -226,7 +228,8 @@ TEST_F(OtaKeyboxProvisionerTest, FullProvisioning) { clock_.SetTime(kProvisioningTime); std::string response; MakeSignedOtaProvisioningResponse(kFakeOtaProvisioningResponse, &response); - crypto_session_->ExpectResponse(kFakeOtaProvisioningResponse, NO_ERROR); + crypto_session_->ExpectResponse(kFakeOtaProvisioningResponse, + CdmResponseType(NO_ERROR)); EXPECT_EQ(NO_ERROR, provisioner_->HandleProvisioningResponse(response)); // Post-response conditions. @@ -242,7 +245,8 @@ TEST_F(OtaKeyboxProvisionerTest, FullProvisioning) { // Provisioning from A perspective should complete without issues. TEST_F(OtaKeyboxProvisionerTest, CompletedInDifferentEngine) { // Generate request (engine A). - crypto_session_->ExpectRequest(kFakeOtaProvisioningRequest, NO_ERROR); + crypto_session_->ExpectRequest(kFakeOtaProvisioningRequest, + CdmResponseType(NO_ERROR)); std::string signed_prov_message, default_url; EXPECT_EQ(NO_ERROR, provisioner_->GetProvisioningRequest(&signed_prov_message, &default_url)); @@ -276,7 +280,8 @@ TEST_F(OtaKeyboxProvisionerTest, CompletedInDifferentEngine) { // malformed SignedProvisioningMessage. TEST_F(OtaKeyboxProvisionerTest, MalformedResponseMessage) { // Generate request. - crypto_session_->ExpectRequest(kFakeOtaProvisioningRequest, NO_ERROR); + crypto_session_->ExpectRequest(kFakeOtaProvisioningRequest, + CdmResponseType(NO_ERROR)); std::string signed_prov_message, default_url; EXPECT_EQ(NO_ERROR, provisioner_->GetProvisioningRequest(&signed_prov_message, &default_url)); @@ -321,7 +326,8 @@ TEST_F(OtaKeyboxProvisionerTest, MalformedResponseMessage) { // Test case where OEMCrypto rejects the provided OTA keybox response. TEST_F(OtaKeyboxProvisionerTest, RejectedResponse) { // Generate request. - crypto_session_->ExpectRequest(kFakeOtaProvisioningRequest, NO_ERROR); + crypto_session_->ExpectRequest(kFakeOtaProvisioningRequest, + CdmResponseType(NO_ERROR)); std::string request, default_url; EXPECT_EQ(NO_ERROR, provisioner_->GetProvisioningRequest(&request, &default_url)); @@ -329,7 +335,8 @@ TEST_F(OtaKeyboxProvisionerTest, RejectedResponse) { // Load response. OEMCrypto returns error. std::string response; MakeSignedOtaProvisioningResponse(kFakeOtaProvisioningResponse, &response); - crypto_session_->ExpectResponse(kFakeOtaProvisioningResponse, UNKNOWN_ERROR); + crypto_session_->ExpectResponse(kFakeOtaProvisioningResponse, + CdmResponseType(UNKNOWN_ERROR)); EXPECT_NE(NO_ERROR, provisioner_->HandleProvisioningResponse(response)); // Post-response failure conditions. @@ -341,7 +348,8 @@ TEST_F(OtaKeyboxProvisionerTest, RejectedResponse) { TEST_F(OtaKeyboxProvisionerTest, OtaProvisioningNotImplemented) { // Generate request. - crypto_session_->ExpectRequest(kEmptyString, NOT_IMPLEMENTED_ERROR); + crypto_session_->ExpectRequest(kEmptyString, + CdmResponseType(NOT_IMPLEMENTED_ERROR)); std::string request, default_url; EXPECT_EQ(NOT_IMPLEMENTED_ERROR, provisioner_->GetProvisioningRequest(&request, &default_url)); diff --git a/libwvdrmengine/cdm/core/test/policy_engine_constraints_unittest.cpp b/libwvdrmengine/cdm/core/test/policy_engine_constraints_unittest.cpp index 3a141ed4..73b9285b 100644 --- a/libwvdrmengine/cdm/core/test/policy_engine_constraints_unittest.cpp +++ b/libwvdrmengine/cdm/core/test/policy_engine_constraints_unittest.cpp @@ -239,8 +239,9 @@ TEST_F(PolicyEngineConstraintsTest, IsPermissiveWithoutAResolution) { } EXPECT_CALL(crypto_session_, GetHdcpCapabilities(_, _)) - .WillRepeatedly(DoAll(SetArgPointee<0>(HDCP_NO_DIGITAL_OUTPUT), - Return(GET_HDCP_CAPABILITY_FAILED))); + .WillRepeatedly( + DoAll(SetArgPointee<0>(HDCP_NO_DIGITAL_OUTPUT), + Return(CdmResponseType(GET_HDCP_CAPABILITY_FAILED)))); policy_engine_->SetLicense(license_, false); policy_engine_->OnTimerEvent(); @@ -271,8 +272,8 @@ TEST_F(PolicyEngineConstraintsTest, HandlesResolutionsBasedOnConstraints) { } EXPECT_CALL(mock_event_listener_, OnExpirationUpdate(kSessionId, _)); EXPECT_CALL(crypto_session_, GetHdcpCapabilities(_, _)) - .WillRepeatedly( - DoAll(SetArgPointee<0>(HDCP_NO_DIGITAL_OUTPUT), Return(NO_ERROR))); + .WillRepeatedly(DoAll(SetArgPointee<0>(HDCP_NO_DIGITAL_OUTPUT), + Return(CdmResponseType(NO_ERROR)))); policy_engine_->SetLicense(license_, false); policy_engine_->NotifyResolution(1, kTargetRes1); @@ -318,23 +319,24 @@ TEST_F(PolicyEngineConstraintsTest, kKeyStatusUsable, kKeyId4, kKeyStatusOutputNotAllowed, true); EXPECT_CALL(crypto_session_, GetHdcpCapabilities(_, _)) .WillOnce(DoAll(SetArgPointee<0>(HDCP_V2_2), - Return(GET_HDCP_CAPABILITY_FAILED))) + Return(CdmResponseType(GET_HDCP_CAPABILITY_FAILED)))) .WillOnce(DoAll(SetArgPointee<0>(HDCP_V2_2), - Return(GET_HDCP_CAPABILITY_FAILED))); + Return(CdmResponseType(GET_HDCP_CAPABILITY_FAILED)))); } int64_t start_time = current_time_ + 5; { InSequence calls; EXPECT_CALL(crypto_session_, GetHdcpCapabilities(_, _)) .WillOnce(DoAll(SetArgPointee<0>(HDCP_V2_2), - Return(GET_HDCP_CAPABILITY_FAILED))); + Return(CdmResponseType(GET_HDCP_CAPABILITY_FAILED)))); EXPECT_CALL(*mock_clock_, GetCurrentTime()) .WillOnce(Return(start_time + kHdcpInterval / 2)) .WillOnce(Return(start_time + kHdcpInterval)); EXPECT_CALL(crypto_session_, GetHdcpCapabilities(_, _)) .WillOnce(DoAll(SetArgPointee<0>(HDCP_V2_2), - Return(GET_HDCP_CAPABILITY_FAILED))) - .WillOnce(DoAll(SetArgPointee<0>(HDCP_V2_2), Return(NO_ERROR))); + Return(CdmResponseType(GET_HDCP_CAPABILITY_FAILED)))) + .WillOnce(DoAll(SetArgPointee<0>(HDCP_V2_2), + Return(CdmResponseType(NO_ERROR)))); } policy_engine_->NotifyResolution(1, kTargetRes1); @@ -369,7 +371,8 @@ TEST_F(PolicyEngineConstraintsTest, HandlesConstraintOverridingHdcp) { } EXPECT_CALL(mock_event_listener_, OnExpirationUpdate(kSessionId, _)); EXPECT_CALL(crypto_session_, GetHdcpCapabilities(_, _)) - .WillRepeatedly(DoAll(SetArgPointee<0>(HDCP_V2), Return(NO_ERROR))); + .WillRepeatedly( + DoAll(SetArgPointee<0>(HDCP_V2), Return(CdmResponseType(NO_ERROR)))); policy_engine_->SetLicense(license_, false); policy_engine_->NotifyResolution(1, kTargetRes1); @@ -411,7 +414,8 @@ TEST_F(PolicyEngineConstraintsTest, HandlesNoHdcp) { } EXPECT_CALL(mock_event_listener_, OnExpirationUpdate(kSessionId, _)); EXPECT_CALL(crypto_session_, GetHdcpCapabilities(_, _)) - .WillRepeatedly(DoAll(SetArgPointee<0>(HDCP_NONE), Return(NO_ERROR))); + .WillRepeatedly(DoAll(SetArgPointee<0>(HDCP_NONE), + Return(CdmResponseType(NO_ERROR)))); policy_engine_->SetLicense(license_, false); @@ -454,8 +458,9 @@ TEST_F(PolicyEngineConstraintsTest, UsesDefaultHdcpWhenResolutionNotSet) { EXPECT_CALL(mock_event_listener_, OnExpirationUpdate(kSessionId, _)); EXPECT_CALL(crypto_session_, GetHdcpCapabilities(_, _)) - .WillRepeatedly(DoAll(SetArgPointee<0>(HDCP_NO_DIGITAL_OUTPUT), - Return(GET_HDCP_CAPABILITY_FAILED))); + .WillRepeatedly( + DoAll(SetArgPointee<0>(HDCP_NO_DIGITAL_OUTPUT), + Return(CdmResponseType(GET_HDCP_CAPABILITY_FAILED)))); policy_engine_->SetLicense(license_, false); policy_engine_->OnTimerEvent(); diff --git a/libwvdrmengine/cdm/core/test/policy_engine_unittest.cpp b/libwvdrmengine/cdm/core/test/policy_engine_unittest.cpp index 73671900..b1dff1a8 100644 --- a/libwvdrmengine/cdm/core/test/policy_engine_unittest.cpp +++ b/libwvdrmengine/cdm/core/test/policy_engine_unittest.cpp @@ -247,7 +247,8 @@ TEST_F(PolicyEngineTest, DISABLED_PlaybackSuccess_StreamingLicense_V15) { EXPECT_CALL(crypto_session_, GetHdcpCapabilities(_, _)) .WillRepeatedly(DoAll(SetArgPointee<0>(HDCP_NO_DIGITAL_OUTPUT), - Return(GET_HDCP_CAPABILITY_FAILED))); + Return(CdmResponseType( + CdmResponseType(GET_HDCP_CAPABILITY_FAILED))))); policy_engine_->SetLicense(license_, false); policy_engine_->BeginDecryption(); @@ -280,8 +281,9 @@ TEST_F(PolicyEngineTest, DISABLED_PlaybackFailed_RepeatedRenewFailures_V15) { .WillOnce(Return(kLicenseStartTime + kLicenseDuration)); EXPECT_CALL(crypto_session_, GetHdcpCapabilities(_, _)) - .WillRepeatedly(DoAll(SetArgPointee<0>(HDCP_NO_DIGITAL_OUTPUT), - Return(GET_HDCP_CAPABILITY_FAILED))); + .WillRepeatedly( + DoAll(SetArgPointee<0>(HDCP_NO_DIGITAL_OUTPUT), + Return(CdmResponseType(GET_HDCP_CAPABILITY_FAILED)))); InSequence s; ExpectSessionKeysChange(kKeyStatusUsable, true); @@ -341,8 +343,9 @@ TEST_F(PolicyEngineTest, DISABLED_PlaybackOk_RenewSuccessAfterExpiry_V15) { .WillOnce(Return(kPlaybackStartTime + kPlaybackDuration + 20)); EXPECT_CALL(crypto_session_, GetHdcpCapabilities(_, _)) - .WillRepeatedly(DoAll(SetArgPointee<0>(HDCP_NO_DIGITAL_OUTPUT), - Return(GET_HDCP_CAPABILITY_FAILED))); + .WillRepeatedly( + DoAll(SetArgPointee<0>(HDCP_NO_DIGITAL_OUTPUT), + Return(CdmResponseType(GET_HDCP_CAPABILITY_FAILED)))); InSequence s; ExpectSessionKeysChange(kKeyStatusUsable, true); @@ -416,8 +419,9 @@ TEST_F(PolicyEngineTest, DISABLED_PlaybackOk_RenewSuccessAfterFailures_V15) { .WillOnce(Return(kLicenseStartTime + license_renewal_delay + 200)); EXPECT_CALL(crypto_session_, GetHdcpCapabilities(_, _)) - .WillRepeatedly(DoAll(SetArgPointee<0>(HDCP_NO_DIGITAL_OUTPUT), - Return(GET_HDCP_CAPABILITY_FAILED))); + .WillRepeatedly( + DoAll(SetArgPointee<0>(HDCP_NO_DIGITAL_OUTPUT), + Return(CdmResponseType(GET_HDCP_CAPABILITY_FAILED)))); InSequence s; ExpectSessionKeysChange(kKeyStatusUsable, true); @@ -476,8 +480,9 @@ TEST_F(PolicyEngineTest, DISABLED_PlaybackOk_RenewedWithUsage_V15) { .WillOnce(Return(kLicenseStartTime + 40)); EXPECT_CALL(crypto_session_, GetHdcpCapabilities(_, _)) - .WillRepeatedly(DoAll(SetArgPointee<0>(HDCP_NO_DIGITAL_OUTPUT), - Return(GET_HDCP_CAPABILITY_FAILED))); + .WillRepeatedly( + DoAll(SetArgPointee<0>(HDCP_NO_DIGITAL_OUTPUT), + Return(CdmResponseType(GET_HDCP_CAPABILITY_FAILED)))); InSequence s; ExpectSessionKeysChange(kKeyStatusUsable, true); @@ -538,8 +543,9 @@ TEST_F(PolicyEngineTest, MultipleKeysInLicense) { .WillOnce(Return(kLicenseStartTime + 1)); EXPECT_CALL(crypto_session_, GetHdcpCapabilities(_, _)) - .WillRepeatedly(DoAll(SetArgPointee<0>(HDCP_NO_DIGITAL_OUTPUT), - Return(GET_HDCP_CAPABILITY_FAILED))); + .WillRepeatedly( + DoAll(SetArgPointee<0>(HDCP_NO_DIGITAL_OUTPUT), + Return(CdmResponseType(GET_HDCP_CAPABILITY_FAILED)))); ExpectSessionKeysChange(kKeyStatusUsable, kKeyStatusUsable, true); EXPECT_CALL(mock_event_listener_, OnExpirationUpdate(_, _)); @@ -565,8 +571,9 @@ TEST_F(PolicyEngineTest, DISABLED_PlaybackOk_SoftEnforcePlaybackDuration_V15) { .WillOnce(Return(kLicenseStartTime + kLicenseDuration + 5)); EXPECT_CALL(crypto_session_, GetHdcpCapabilities(_, _)) - .WillRepeatedly(DoAll(SetArgPointee<0>(HDCP_NO_DIGITAL_OUTPUT), - Return(GET_HDCP_CAPABILITY_FAILED))); + .WillRepeatedly( + DoAll(SetArgPointee<0>(HDCP_NO_DIGITAL_OUTPUT), + Return(CdmResponseType(GET_HDCP_CAPABILITY_FAILED)))); InSequence seq; ExpectSessionKeysChange(kKeyStatusUsable, true); @@ -604,8 +611,9 @@ TEST_F(PolicyEngineTest, .WillOnce(Return(kPlaybackStartTime + kPlaybackDuration + 10)); EXPECT_CALL(crypto_session_, GetHdcpCapabilities(_, _)) - .WillRepeatedly(DoAll(SetArgPointee<0>(HDCP_NO_DIGITAL_OUTPUT), - Return(GET_HDCP_CAPABILITY_FAILED))); + .WillRepeatedly( + DoAll(SetArgPointee<0>(HDCP_NO_DIGITAL_OUTPUT), + Return(CdmResponseType(GET_HDCP_CAPABILITY_FAILED)))); InSequence seq; ExpectSessionKeysChange(kKeyStatusUsable, true); @@ -632,8 +640,9 @@ TEST_F(PolicyEngineTest, .WillOnce(Return(kPlaybackStartTime + kPlaybackDuration + 10)); EXPECT_CALL(crypto_session_, GetHdcpCapabilities(_, _)) - .WillRepeatedly(DoAll(SetArgPointee<0>(HDCP_NO_DIGITAL_OUTPUT), - Return(GET_HDCP_CAPABILITY_FAILED))); + .WillRepeatedly( + DoAll(SetArgPointee<0>(HDCP_NO_DIGITAL_OUTPUT), + Return(CdmResponseType(GET_HDCP_CAPABILITY_FAILED)))); InSequence seq; ExpectSessionKeysChange(kKeyStatusExpired, false); @@ -655,8 +664,9 @@ TEST_F(PolicyEngineTest, DISABLED_PlaybackOk_RestoreWithoutPlaybackTimes_V15) { .WillOnce(Return(kLicenseStartTime + 30)); EXPECT_CALL(crypto_session_, GetHdcpCapabilities(_, _)) - .WillRepeatedly(DoAll(SetArgPointee<0>(HDCP_NO_DIGITAL_OUTPUT), - Return(GET_HDCP_CAPABILITY_FAILED))); + .WillRepeatedly( + DoAll(SetArgPointee<0>(HDCP_NO_DIGITAL_OUTPUT), + Return(CdmResponseType(GET_HDCP_CAPABILITY_FAILED)))); InSequence seq; ExpectSessionKeysChange(kKeyStatusUsable, true); @@ -863,8 +873,9 @@ TEST_F(PolicyEngineKeyAllowedUsageTest, AllowedUsageBasic) { .WillOnce(Return(kLicenseStartTime + 1)); EXPECT_CALL(crypto_session_, GetHdcpCapabilities(_, _)) - .WillRepeatedly(DoAll(SetArgPointee<0>(HDCP_NO_DIGITAL_OUTPUT), - Return(GET_HDCP_CAPABILITY_FAILED))); + .WillRepeatedly( + DoAll(SetArgPointee<0>(HDCP_NO_DIGITAL_OUTPUT), + Return(CdmResponseType(GET_HDCP_CAPABILITY_FAILED)))); ExpectSessionKeysChange(kKeyStatusUsable, kKeyStatusUsable, true); EXPECT_CALL(mock_event_listener_, OnExpirationUpdate(_, _)); @@ -923,8 +934,9 @@ TEST_F(PolicyEngineKeyAllowedUsageTest, AllowedUsageGeneric) { .WillOnce(Return(kLicenseStartTime + 1)); EXPECT_CALL(crypto_session_, GetHdcpCapabilities(_, _)) - .WillRepeatedly(DoAll(SetArgPointee<0>(HDCP_NO_DIGITAL_OUTPUT), - Return(GET_HDCP_CAPABILITY_FAILED))); + .WillRepeatedly( + DoAll(SetArgPointee<0>(HDCP_NO_DIGITAL_OUTPUT), + Return(CdmResponseType(GET_HDCP_CAPABILITY_FAILED)))); ExpectSessionKeysChange(kKeyStatusUsable, kKeyStatusUsable, true); EXPECT_CALL(mock_event_listener_, OnExpirationUpdate(_, _)); @@ -981,8 +993,9 @@ TEST_F(PolicyEngineQueryTest, DISABLED_QuerySuccess_Offline_V15) { .WillOnce(Return(kLicenseStartTime + 300)); EXPECT_CALL(crypto_session_, GetHdcpCapabilities(_, _)) - .WillRepeatedly(DoAll(SetArgPointee<0>(HDCP_NO_DIGITAL_OUTPUT), - Return(GET_HDCP_CAPABILITY_FAILED))); + .WillRepeatedly( + DoAll(SetArgPointee<0>(HDCP_NO_DIGITAL_OUTPUT), + Return(CdmResponseType(GET_HDCP_CAPABILITY_FAILED)))); policy_engine_->SetLicense(license_, false); @@ -1021,8 +1034,9 @@ TEST_F(PolicyEngineQueryTest, DISABLED_QuerySuccess_Renew_V15) { kLicenseRenewalRetryInterval + 15)); EXPECT_CALL(crypto_session_, GetHdcpCapabilities(_, _)) - .WillRepeatedly(DoAll(SetArgPointee<0>(HDCP_NO_DIGITAL_OUTPUT), - Return(GET_HDCP_CAPABILITY_FAILED))); + .WillRepeatedly( + DoAll(SetArgPointee<0>(HDCP_NO_DIGITAL_OUTPUT), + Return(CdmResponseType(GET_HDCP_CAPABILITY_FAILED)))); policy_engine_->SetLicense(license_, false); @@ -1080,8 +1094,9 @@ TEST_F(PolicyEngineQueryTest, kLicenseRenewalRetryInterval + 40)); EXPECT_CALL(crypto_session_, GetHdcpCapabilities(_, _)) - .WillRepeatedly(DoAll(SetArgPointee<0>(HDCP_NO_DIGITAL_OUTPUT), - Return(GET_HDCP_CAPABILITY_FAILED))); + .WillRepeatedly( + DoAll(SetArgPointee<0>(HDCP_NO_DIGITAL_OUTPUT), + Return(CdmResponseType(GET_HDCP_CAPABILITY_FAILED)))); policy_engine_->SetLicense(license_, false); @@ -1150,8 +1165,8 @@ TEST_F(PolicyEngineTest, PlaybackSuccess_OfflineLicense_V16) { OnExpirationUpdate(_, kPlaybackStartTime + kPlaybackDuration)); EXPECT_CALL(crypto_session_, GetHdcpCapabilities(_, _)) - .WillRepeatedly( - DoAll(SetArgPointee<0>(HDCP_NO_DIGITAL_OUTPUT), Return(NO_ERROR))); + .WillRepeatedly(DoAll(SetArgPointee<0>(HDCP_NO_DIGITAL_OUTPUT), + Return(CdmResponseType(NO_ERROR)))); policy_engine_->SetLicense(license_, false); policy_engine_->BeginDecryption(); @@ -1175,8 +1190,9 @@ TEST_F(PolicyEngineTest, PlaybackFailed_CanPlayFalse_V16) { OnExpirationUpdate(_, kLicenseStartTime + kRentalDuration)); EXPECT_CALL(crypto_session_, GetHdcpCapabilities(_, _)) - .WillRepeatedly(DoAll(SetArgPointee<0>(HDCP_NO_DIGITAL_OUTPUT), - Return(GET_HDCP_CAPABILITY_FAILED))); + .WillRepeatedly( + DoAll(SetArgPointee<0>(HDCP_NO_DIGITAL_OUTPUT), + Return(CdmResponseType(GET_HDCP_CAPABILITY_FAILED)))); policy_engine_->SetLicense(license_, false); EXPECT_FALSE(policy_engine_->CanDecryptContent(kKeyId)); @@ -1201,8 +1217,9 @@ TEST_F(PolicyEngineTest, .WillOnce(Return(kLicenseStartTime + kLowDuration)); EXPECT_CALL(crypto_session_, GetHdcpCapabilities(_, _)) - .WillRepeatedly(DoAll(SetArgPointee<0>(HDCP_NO_DIGITAL_OUTPUT), - Return(GET_HDCP_CAPABILITY_FAILED))); + .WillRepeatedly( + DoAll(SetArgPointee<0>(HDCP_NO_DIGITAL_OUTPUT), + Return(CdmResponseType(GET_HDCP_CAPABILITY_FAILED)))); InSequence s; ExpectSessionKeysChange(kKeyStatusUsable, true); @@ -1239,8 +1256,9 @@ TEST_F( .WillOnce(Return(kLicenseStartTime + kLowDuration)); EXPECT_CALL(crypto_session_, GetHdcpCapabilities(_, _)) - .WillRepeatedly(DoAll(SetArgPointee<0>(HDCP_NO_DIGITAL_OUTPUT), - Return(GET_HDCP_CAPABILITY_FAILED))); + .WillRepeatedly( + DoAll(SetArgPointee<0>(HDCP_NO_DIGITAL_OUTPUT), + Return(CdmResponseType(GET_HDCP_CAPABILITY_FAILED)))); InSequence s; ExpectSessionKeysChange(kKeyStatusUsable, true); @@ -1275,8 +1293,9 @@ TEST_F(PolicyEngineTest, PlaybackFails_RentalDurationPassedWithPlayback_V16) { .WillOnce(Return(kLicenseStartTime + kLowDuration + 1)); EXPECT_CALL(crypto_session_, GetHdcpCapabilities(_, _)) - .WillRepeatedly(DoAll(SetArgPointee<0>(HDCP_NO_DIGITAL_OUTPUT), - Return(GET_HDCP_CAPABILITY_FAILED))); + .WillRepeatedly( + DoAll(SetArgPointee<0>(HDCP_NO_DIGITAL_OUTPUT), + Return(CdmResponseType(GET_HDCP_CAPABILITY_FAILED)))); InSequence s; ExpectSessionKeysChange(kKeyStatusUsable, true); @@ -1313,8 +1332,9 @@ TEST_F( .WillOnce(Return(kLicenseStartTime + kLowDuration + 1)); EXPECT_CALL(crypto_session_, GetHdcpCapabilities(_, _)) - .WillRepeatedly(DoAll(SetArgPointee<0>(HDCP_NO_DIGITAL_OUTPUT), - Return(GET_HDCP_CAPABILITY_FAILED))); + .WillRepeatedly( + DoAll(SetArgPointee<0>(HDCP_NO_DIGITAL_OUTPUT), + Return(CdmResponseType(GET_HDCP_CAPABILITY_FAILED)))); InSequence s; ExpectSessionKeysChange(kKeyStatusUsable, true); @@ -1350,8 +1370,9 @@ TEST_F(PolicyEngineTest, PlaybackFails_PlaybackDurationExpired_V16) { .WillOnce(Return(playback_start_time + kPlaybackDuration + 2)); EXPECT_CALL(crypto_session_, GetHdcpCapabilities(_, _)) - .WillRepeatedly(DoAll(SetArgPointee<0>(HDCP_NO_DIGITAL_OUTPUT), - Return(GET_HDCP_CAPABILITY_FAILED))); + .WillRepeatedly( + DoAll(SetArgPointee<0>(HDCP_NO_DIGITAL_OUTPUT), + Return(CdmResponseType(GET_HDCP_CAPABILITY_FAILED)))); InSequence s; ExpectSessionKeysChange(kKeyStatusUsable, true); @@ -1389,8 +1410,9 @@ TEST_F(PolicyEngineTest, .WillOnce(Return(playback_start_time + kPlaybackDuration + 2)); EXPECT_CALL(crypto_session_, GetHdcpCapabilities(_, _)) - .WillRepeatedly(DoAll(SetArgPointee<0>(HDCP_NO_DIGITAL_OUTPUT), - Return(GET_HDCP_CAPABILITY_FAILED))); + .WillRepeatedly( + DoAll(SetArgPointee<0>(HDCP_NO_DIGITAL_OUTPUT), + Return(CdmResponseType(GET_HDCP_CAPABILITY_FAILED)))); InSequence s; ExpectSessionKeysChange(kKeyStatusUsable, true); @@ -1428,8 +1450,9 @@ TEST_F(PolicyEngineTest, LicenseOk_LicenseDurationExpiredWithoutPlayback_V16) { .WillOnce(Return(kLicenseStartTime + kLowDuration)); EXPECT_CALL(crypto_session_, GetHdcpCapabilities(_, _)) - .WillRepeatedly(DoAll(SetArgPointee<0>(HDCP_NO_DIGITAL_OUTPUT), - Return(GET_HDCP_CAPABILITY_FAILED))); + .WillRepeatedly( + DoAll(SetArgPointee<0>(HDCP_NO_DIGITAL_OUTPUT), + Return(CdmResponseType(GET_HDCP_CAPABILITY_FAILED)))); InSequence s; ExpectSessionKeysChange(kKeyStatusUsable, true); @@ -1464,8 +1487,9 @@ TEST_F(PolicyEngineTest, LicenseOk_LicenseDurationExpiredWithPlayback_V16) { .WillOnce(Return(kLicenseStartTime + kLowDuration)); EXPECT_CALL(crypto_session_, GetHdcpCapabilities(_, _)) - .WillRepeatedly(DoAll(SetArgPointee<0>(HDCP_NO_DIGITAL_OUTPUT), - Return(GET_HDCP_CAPABILITY_FAILED))); + .WillRepeatedly( + DoAll(SetArgPointee<0>(HDCP_NO_DIGITAL_OUTPUT), + Return(CdmResponseType(GET_HDCP_CAPABILITY_FAILED)))); InSequence s; ExpectSessionKeysChange(kKeyStatusUsable, true); @@ -1503,8 +1527,9 @@ TEST_F(PolicyEngineTest, PlaybackFails_ExpiryBeforeRenewalDelay_V16) { .WillOnce(Return(kPlaybackStartTime + kPlaybackDuration + 1)); EXPECT_CALL(crypto_session_, GetHdcpCapabilities(_, _)) - .WillRepeatedly(DoAll(SetArgPointee<0>(HDCP_NO_DIGITAL_OUTPUT), - Return(GET_HDCP_CAPABILITY_FAILED))); + .WillRepeatedly( + DoAll(SetArgPointee<0>(HDCP_NO_DIGITAL_OUTPUT), + Return(CdmResponseType(GET_HDCP_CAPABILITY_FAILED)))); InSequence s; ExpectSessionKeysChange(kKeyStatusUsable, true); @@ -1541,8 +1566,9 @@ TEST_F(PolicyEngineTest, LicenseOk_RentalDuration0_V16) { .WillOnce(Return(kLicenseStartTime + kLicenseDuration + 1)); EXPECT_CALL(crypto_session_, GetHdcpCapabilities(_, _)) - .WillRepeatedly(DoAll(SetArgPointee<0>(HDCP_NO_DIGITAL_OUTPUT), - Return(GET_HDCP_CAPABILITY_FAILED))); + .WillRepeatedly( + DoAll(SetArgPointee<0>(HDCP_NO_DIGITAL_OUTPUT), + Return(CdmResponseType(GET_HDCP_CAPABILITY_FAILED)))); InSequence s; ExpectSessionKeysChange(kKeyStatusUsable, true); @@ -1576,8 +1602,9 @@ TEST_F(PolicyEngineTest, PlaybackOk_RentalDuration0_V16) { .WillOnce(Return(kLicenseStartTime + kLicenseDuration + 10)); EXPECT_CALL(crypto_session_, GetHdcpCapabilities(_, _)) - .WillRepeatedly(DoAll(SetArgPointee<0>(HDCP_NO_DIGITAL_OUTPUT), - Return(GET_HDCP_CAPABILITY_FAILED))); + .WillRepeatedly( + DoAll(SetArgPointee<0>(HDCP_NO_DIGITAL_OUTPUT), + Return(CdmResponseType(GET_HDCP_CAPABILITY_FAILED)))); InSequence s; ExpectSessionKeysChange(kKeyStatusUsable, true); @@ -1617,8 +1644,9 @@ TEST_F(PolicyEngineTest, PlaybackFails_PlaybackDuration0_V16) { .WillOnce(Return(kLicenseStartTime + kRentalDuration + 2)); EXPECT_CALL(crypto_session_, GetHdcpCapabilities(_, _)) - .WillRepeatedly(DoAll(SetArgPointee<0>(HDCP_NO_DIGITAL_OUTPUT), - Return(GET_HDCP_CAPABILITY_FAILED))); + .WillRepeatedly( + DoAll(SetArgPointee<0>(HDCP_NO_DIGITAL_OUTPUT), + Return(CdmResponseType(GET_HDCP_CAPABILITY_FAILED)))); InSequence s; ExpectSessionKeysChange(kKeyStatusUsable, true); @@ -1658,8 +1686,9 @@ TEST_F(PolicyEngineTest, .WillOnce(Return(kPlaybackStartTime + kRentalDuration + 2)); EXPECT_CALL(crypto_session_, GetHdcpCapabilities(_, _)) - .WillRepeatedly(DoAll(SetArgPointee<0>(HDCP_NO_DIGITAL_OUTPUT), - Return(GET_HDCP_CAPABILITY_FAILED))); + .WillRepeatedly( + DoAll(SetArgPointee<0>(HDCP_NO_DIGITAL_OUTPUT), + Return(CdmResponseType(GET_HDCP_CAPABILITY_FAILED)))); InSequence s; ExpectSessionKeysChange(kKeyStatusUsable, true); @@ -1700,8 +1729,9 @@ TEST_F(PolicyEngineTest, PlaybackOk_PlaybackAndRental0_V16) { .WillOnce(Return(kPlaybackStartTime + kRentalDuration + 2)); EXPECT_CALL(crypto_session_, GetHdcpCapabilities(_, _)) - .WillRepeatedly(DoAll(SetArgPointee<0>(HDCP_NO_DIGITAL_OUTPUT), - Return(GET_HDCP_CAPABILITY_FAILED))); + .WillRepeatedly( + DoAll(SetArgPointee<0>(HDCP_NO_DIGITAL_OUTPUT), + Return(CdmResponseType(GET_HDCP_CAPABILITY_FAILED)))); InSequence s; ExpectSessionKeysChange(kKeyStatusUsable, true); @@ -1735,8 +1765,9 @@ TEST_F(PolicyEngineTest, PlaybackOk_LicenseWithFutureStartTime_V16) { .WillOnce(Return(kPlaybackStartTime)); EXPECT_CALL(crypto_session_, GetHdcpCapabilities(_, _)) - .WillRepeatedly(DoAll(SetArgPointee<0>(HDCP_NO_DIGITAL_OUTPUT), - Return(GET_HDCP_CAPABILITY_FAILED))); + .WillRepeatedly( + DoAll(SetArgPointee<0>(HDCP_NO_DIGITAL_OUTPUT), + Return(CdmResponseType(GET_HDCP_CAPABILITY_FAILED)))); InSequence s; ExpectSessionKeysChange(kKeyStatusUsableInFuture, false); @@ -1775,8 +1806,9 @@ TEST_F(PolicyEngineTest, PlaybackFailed_CanRenewFalse_V16) { .WillOnce(Return(kPlaybackStartTime + kPlaybackDuration + 1)); EXPECT_CALL(crypto_session_, GetHdcpCapabilities(_, _)) - .WillRepeatedly(DoAll(SetArgPointee<0>(HDCP_NO_DIGITAL_OUTPUT), - Return(GET_HDCP_CAPABILITY_FAILED))); + .WillRepeatedly( + DoAll(SetArgPointee<0>(HDCP_NO_DIGITAL_OUTPUT), + Return(CdmResponseType(GET_HDCP_CAPABILITY_FAILED)))); InSequence s; ExpectSessionKeysChange(kKeyStatusUsable, true); @@ -1822,8 +1854,9 @@ TEST_F(PolicyEngineTest, PlaybackOk_RenewSuccess_V16) { kLicenseRenewalRetryInterval + 10)); EXPECT_CALL(crypto_session_, GetHdcpCapabilities(_, _)) - .WillRepeatedly(DoAll(SetArgPointee<0>(HDCP_NO_DIGITAL_OUTPUT), - Return(GET_HDCP_CAPABILITY_FAILED))); + .WillRepeatedly( + DoAll(SetArgPointee<0>(HDCP_NO_DIGITAL_OUTPUT), + Return(CdmResponseType(GET_HDCP_CAPABILITY_FAILED)))); InSequence s; ExpectSessionKeysChange(kKeyStatusUsable, true); @@ -1883,8 +1916,9 @@ TEST_F(PolicyEngineTest, .WillOnce(Return(kLicenseStartTime + license_renewal_delay + 60)); EXPECT_CALL(crypto_session_, GetHdcpCapabilities(_, _)) - .WillRepeatedly(DoAll(SetArgPointee<0>(HDCP_NO_DIGITAL_OUTPUT), - Return(GET_HDCP_CAPABILITY_FAILED))); + .WillRepeatedly( + DoAll(SetArgPointee<0>(HDCP_NO_DIGITAL_OUTPUT), + Return(CdmResponseType(GET_HDCP_CAPABILITY_FAILED)))); InSequence s; ExpectSessionKeysChange(kKeyStatusUsable, true); @@ -1940,8 +1974,9 @@ TEST_F(PolicyEngineTest, LicenseExpired_RenewFailedVersionNotUpdated_V16) { .WillOnce(Return(kLicenseStartTime + kPlaybackDuration + 10)); EXPECT_CALL(crypto_session_, GetHdcpCapabilities(_, _)) - .WillRepeatedly(DoAll(SetArgPointee<0>(HDCP_NO_DIGITAL_OUTPUT), - Return(GET_HDCP_CAPABILITY_FAILED))); + .WillRepeatedly( + DoAll(SetArgPointee<0>(HDCP_NO_DIGITAL_OUTPUT), + Return(CdmResponseType(GET_HDCP_CAPABILITY_FAILED)))); InSequence s; ExpectSessionKeysChange(kKeyStatusUsable, true); @@ -1993,8 +2028,8 @@ TEST_F(PolicyEngineTest, PlaybackSuccess_EntitlementLicense_V16) { OnExpirationUpdate(_, kPlaybackStartTime + kPlaybackDuration)); EXPECT_CALL(crypto_session_, GetHdcpCapabilities(_, _)) - .WillRepeatedly( - DoAll(SetArgPointee<0>(HDCP_NO_DIGITAL_OUTPUT), Return(NO_ERROR))); + .WillRepeatedly(DoAll(SetArgPointee<0>(HDCP_NO_DIGITAL_OUTPUT), + Return(CdmResponseType(NO_ERROR)))); License::KeyContainer* key = license_.mutable_key(0); key->set_type(License::KeyContainer::ENTITLEMENT); @@ -2046,8 +2081,9 @@ TEST_F(PolicyEngineQueryTest, QuerySuccess_V16) { .WillOnce(Return(kLicenseStartTime + 100)); EXPECT_CALL(crypto_session_, GetHdcpCapabilities(_, _)) - .WillRepeatedly(DoAll(SetArgPointee<0>(HDCP_NO_DIGITAL_OUTPUT), - Return(GET_HDCP_CAPABILITY_FAILED))); + .WillRepeatedly( + DoAll(SetArgPointee<0>(HDCP_NO_DIGITAL_OUTPUT), + Return(CdmResponseType(GET_HDCP_CAPABILITY_FAILED)))); policy_engine_->SetLicense(license_, false); @@ -2076,8 +2112,9 @@ TEST_F(PolicyEngineQueryTest, QuerySuccess_PlaybackNotBegun_V16) { .WillOnce(Return(kLicenseStartTime + 200)); EXPECT_CALL(crypto_session_, GetHdcpCapabilities(_, _)) - .WillRepeatedly(DoAll(SetArgPointee<0>(HDCP_NO_DIGITAL_OUTPUT), - Return(GET_HDCP_CAPABILITY_FAILED))); + .WillRepeatedly( + DoAll(SetArgPointee<0>(HDCP_NO_DIGITAL_OUTPUT), + Return(CdmResponseType(GET_HDCP_CAPABILITY_FAILED)))); policy_engine_->SetLicense(license_, false); @@ -2120,8 +2157,9 @@ TEST_F(PolicyEngineQueryTest, QuerySuccess_PlaybackBegun_V16) { .WillOnce(Return(kLicenseStartTime + 200)); EXPECT_CALL(crypto_session_, GetHdcpCapabilities(_, _)) - .WillRepeatedly(DoAll(SetArgPointee<0>(HDCP_NO_DIGITAL_OUTPUT), - Return(GET_HDCP_CAPABILITY_FAILED))); + .WillRepeatedly( + DoAll(SetArgPointee<0>(HDCP_NO_DIGITAL_OUTPUT), + Return(CdmResponseType(GET_HDCP_CAPABILITY_FAILED)))); policy_engine_->SetLicense(license_, false); @@ -2200,8 +2238,9 @@ TEST_F(PolicyEngineQueryTest, QuerySuccess_CanPlayFalse_V16) { .WillOnce(Return(kLicenseStartTime + 100)); EXPECT_CALL(crypto_session_, GetHdcpCapabilities(_, _)) - .WillRepeatedly(DoAll(SetArgPointee<0>(HDCP_NO_DIGITAL_OUTPUT), - Return(GET_HDCP_CAPABILITY_FAILED))); + .WillRepeatedly( + DoAll(SetArgPointee<0>(HDCP_NO_DIGITAL_OUTPUT), + Return(CdmResponseType(GET_HDCP_CAPABILITY_FAILED)))); policy_engine_->SetLicense(license_, false); EXPECT_FALSE(policy_engine_->CanDecryptContent(kKeyId)); @@ -2241,8 +2280,9 @@ TEST_F(PolicyEngineQueryTest, QuerySuccess_RentalDurationExpired_V16) { .WillOnce(Return(kLicenseStartTime + kLowDuration + 5)); EXPECT_CALL(crypto_session_, GetHdcpCapabilities(_, _)) - .WillRepeatedly(DoAll(SetArgPointee<0>(HDCP_NO_DIGITAL_OUTPUT), - Return(GET_HDCP_CAPABILITY_FAILED))); + .WillRepeatedly( + DoAll(SetArgPointee<0>(HDCP_NO_DIGITAL_OUTPUT), + Return(CdmResponseType(GET_HDCP_CAPABILITY_FAILED)))); policy_engine_->SetLicense(license_, false); @@ -2285,8 +2325,9 @@ TEST_F(PolicyEngineQueryTest, QuerySuccess_PlaybackDurationExpired_V16) { .WillOnce(Return(playback_start_time + 5 + kLowDuration)); EXPECT_CALL(crypto_session_, GetHdcpCapabilities(_, _)) - .WillRepeatedly(DoAll(SetArgPointee<0>(HDCP_NO_DIGITAL_OUTPUT), - Return(GET_HDCP_CAPABILITY_FAILED))); + .WillRepeatedly( + DoAll(SetArgPointee<0>(HDCP_NO_DIGITAL_OUTPUT), + Return(CdmResponseType(GET_HDCP_CAPABILITY_FAILED)))); policy_engine_->SetLicense(license_, false); @@ -2328,8 +2369,9 @@ TEST_F(PolicyEngineQueryTest, .WillOnce(Return(kLicenseStartTime + 5 + kLowDuration)); EXPECT_CALL(crypto_session_, GetHdcpCapabilities(_, _)) - .WillRepeatedly(DoAll(SetArgPointee<0>(HDCP_NO_DIGITAL_OUTPUT), - Return(GET_HDCP_CAPABILITY_FAILED))); + .WillRepeatedly( + DoAll(SetArgPointee<0>(HDCP_NO_DIGITAL_OUTPUT), + Return(CdmResponseType(GET_HDCP_CAPABILITY_FAILED)))); policy_engine_->SetLicense(license_, false); @@ -2374,8 +2416,9 @@ TEST_F(PolicyEngineQueryTest, .WillOnce(Return(kPlaybackStartTime + 5 + kLowDuration)); EXPECT_CALL(crypto_session_, GetHdcpCapabilities(_, _)) - .WillRepeatedly(DoAll(SetArgPointee<0>(HDCP_NO_DIGITAL_OUTPUT), - Return(GET_HDCP_CAPABILITY_FAILED))); + .WillRepeatedly( + DoAll(SetArgPointee<0>(HDCP_NO_DIGITAL_OUTPUT), + Return(CdmResponseType(GET_HDCP_CAPABILITY_FAILED)))); policy_engine_->SetLicense(license_, false); @@ -2419,8 +2462,9 @@ TEST_F(PolicyEngineQueryTest, QuerySuccess_RentalDuration0_V16) { .WillOnce(Return(kLicenseStartTime + kLowDuration + 5)); EXPECT_CALL(crypto_session_, GetHdcpCapabilities(_, _)) - .WillRepeatedly(DoAll(SetArgPointee<0>(HDCP_NO_DIGITAL_OUTPUT), - Return(GET_HDCP_CAPABILITY_FAILED))); + .WillRepeatedly( + DoAll(SetArgPointee<0>(HDCP_NO_DIGITAL_OUTPUT), + Return(CdmResponseType(GET_HDCP_CAPABILITY_FAILED)))); policy_engine_->SetLicense(license_, false); @@ -2467,8 +2511,9 @@ TEST_F(PolicyEngineQueryTest, QuerySuccess_PlaybackDuration0_V16) { .WillOnce(Return(kLicenseStartTime + kHighDuration + 5)); EXPECT_CALL(crypto_session_, GetHdcpCapabilities(_, _)) - .WillRepeatedly(DoAll(SetArgPointee<0>(HDCP_NO_DIGITAL_OUTPUT), - Return(GET_HDCP_CAPABILITY_FAILED))); + .WillRepeatedly( + DoAll(SetArgPointee<0>(HDCP_NO_DIGITAL_OUTPUT), + Return(CdmResponseType(GET_HDCP_CAPABILITY_FAILED)))); policy_engine_->SetLicense(license_, false); @@ -2575,8 +2620,9 @@ TEST_F(PolicyEngineQueryTest, QuerySuccess_LicenseWithFutureStartTime_V16) { .WillOnce(Return(kLicenseStartTime + 25)); EXPECT_CALL(crypto_session_, GetHdcpCapabilities(_, _)) - .WillRepeatedly(DoAll(SetArgPointee<0>(HDCP_NO_DIGITAL_OUTPUT), - Return(GET_HDCP_CAPABILITY_FAILED))); + .WillRepeatedly( + DoAll(SetArgPointee<0>(HDCP_NO_DIGITAL_OUTPUT), + Return(CdmResponseType(GET_HDCP_CAPABILITY_FAILED)))); policy_engine_->SetLicense(license_, false); @@ -2648,8 +2694,9 @@ TEST_F(PolicyEngineTest, SetLicenseForReleaseAfterSetLicense_V16) { OnExpirationUpdate(_, kPlaybackStartTime + kPlaybackDuration)); EXPECT_CALL(crypto_session_, GetHdcpCapabilities(_, _)) - .WillRepeatedly(DoAll(SetArgPointee<0>(HDCP_NO_DIGITAL_OUTPUT), - Return(GET_HDCP_CAPABILITY_FAILED))); + .WillRepeatedly( + DoAll(SetArgPointee<0>(HDCP_NO_DIGITAL_OUTPUT), + Return(CdmResponseType(GET_HDCP_CAPABILITY_FAILED)))); policy_engine_->SetLicense(license_, false); policy_engine_->BeginDecryption(); @@ -2676,8 +2723,9 @@ TEST_F(PolicyEngineTest, PlaybackOk_RestoreWithoutPlaybackTimes_V16) { .WillOnce(Return(kLicenseStartTime + 30)); EXPECT_CALL(crypto_session_, GetHdcpCapabilities(_, _)) - .WillRepeatedly(DoAll(SetArgPointee<0>(HDCP_NO_DIGITAL_OUTPUT), - Return(GET_HDCP_CAPABILITY_FAILED))); + .WillRepeatedly( + DoAll(SetArgPointee<0>(HDCP_NO_DIGITAL_OUTPUT), + Return(CdmResponseType(GET_HDCP_CAPABILITY_FAILED)))); InSequence seq; ExpectSessionKeysChange(kKeyStatusUsable, true); diff --git a/libwvdrmengine/cdm/core/test/policy_integration_test.cpp b/libwvdrmengine/cdm/core/test/policy_integration_test.cpp index 2135b951..2952256b 100644 --- a/libwvdrmengine/cdm/core/test/policy_integration_test.cpp +++ b/libwvdrmengine/cdm/core/test/policy_integration_test.cpp @@ -83,7 +83,8 @@ TEST_F(CorePIGTest, OfflineHWSecureRequired) { ASSERT_NO_FATAL_FAILURE(holder.FetchLicense()); ASSERT_NO_FATAL_FAILURE(holder.LoadLicense()); EXPECT_EQ(NO_ERROR, holder.Decrypt(sw_key_id)); - ASSERT_NO_FATAL_FAILURE(holder.FailDecrypt(hw_key_id, DECRYPT_ERROR)); + ASSERT_NO_FATAL_FAILURE( + holder.FailDecrypt(hw_key_id, CdmResponseType(DECRYPT_ERROR))); // Next, if possible, we try to decrypt to a secure buffer, and verify // success. if (wvoec::global_features.test_secure_buffers) { @@ -98,7 +99,8 @@ TEST_F(CorePIGTest, OfflineHWSecureRequired) { ASSERT_NO_FATAL_FAILURE(holder.OpenSession()); ASSERT_NO_FATAL_FAILURE(holder.ReloadLicense()); EXPECT_EQ(NO_ERROR, holder.Decrypt(sw_key_id)); - ASSERT_NO_FATAL_FAILURE(holder.FailDecrypt(hw_key_id, DECRYPT_ERROR)); + ASSERT_NO_FATAL_FAILURE( + holder.FailDecrypt(hw_key_id, CdmResponseType(DECRYPT_ERROR))); // Next, if possible, we try to decrypt to a secure buffer, and verify // success. if (wvoec::global_features.test_secure_buffers) { diff --git a/libwvdrmengine/cdm/core/test/system_id_extractor_unittest.cpp b/libwvdrmengine/cdm/core/test/system_id_extractor_unittest.cpp index 93635479..0a66935e 100644 --- a/libwvdrmengine/cdm/core/test/system_id_extractor_unittest.cpp +++ b/libwvdrmengine/cdm/core/test/system_id_extractor_unittest.cpp @@ -331,7 +331,8 @@ class SystemIdExtractorTest : public WvCdmTestBase { void ExpectProvisioningType(CdmClientTokenType type) { EXPECT_CALL(*crypto_session_, GetCachedSystemId).WillOnce(Return(false)); EXPECT_CALL(*crypto_session_, GetProvisioningMethod(_, NotNull())) - .WillOnce(DoAll(SetArgPointee<1>(type), Return(NO_ERROR))); + .WillOnce( + DoAll(SetArgPointee<1>(type), Return(CdmResponseType(NO_ERROR)))); } void ExpectSet(uint32_t system_id) { @@ -382,7 +383,7 @@ TEST_F(SystemIdExtractorTest, SetSystemIdMetrics) { TEST_F(SystemIdExtractorTest, GetProvisioningMethod_Failed) { EXPECT_CALL(*crypto_session_, GetCachedSystemId).WillOnce(Return(false)); EXPECT_CALL(*crypto_session_, GetProvisioningMethod(_, NotNull())) - .WillOnce(Return(UNKNOWN_ERROR)); + .WillOnce(Return(CdmResponseType(UNKNOWN_ERROR))); auto extractor = CreateExtractor(kLevelDefault); ASSERT_TRUE(extractor); uint32_t system_id; @@ -409,7 +410,8 @@ TEST_F(SystemIdExtractorTest, DrmCertDevice_NullSystemId) { TEST_F(SystemIdExtractorTest, KeyboxDevice_Success) { ExpectProvisioningType(kClientTokenKeybox); EXPECT_CALL(*crypto_session_, GetTokenFromKeybox(kLevelDefault, NotNull())) - .WillOnce(DoAll(SetArgPointee<1>(kKeyboxDataStr), Return(NO_ERROR))); + .WillOnce(DoAll(SetArgPointee<1>(kKeyboxDataStr), + Return(CdmResponseType(NO_ERROR)))); ExpectSet(kKeyboxSystemId); auto extractor = CreateExtractor(kLevelDefault); ASSERT_TRUE(extractor); @@ -421,7 +423,7 @@ TEST_F(SystemIdExtractorTest, KeyboxDevice_Success) { TEST_F(SystemIdExtractorTest, KeyboxDevice_NeedsOtaKeyboxProvisioning) { ExpectProvisioningType(kClientTokenKeybox); EXPECT_CALL(*crypto_session_, GetTokenFromKeybox(kLevelDefault, NotNull())) - .WillOnce(Return(NEED_PROVISIONING)); + .WillOnce(Return(CdmResponseType(NEED_PROVISIONING))); auto extractor = CreateExtractor(kLevelDefault); ASSERT_TRUE(extractor); uint32_t system_id; @@ -432,7 +434,7 @@ TEST_F(SystemIdExtractorTest, KeyboxDevice_NeedsOtaKeyboxProvisioning) { TEST_F(SystemIdExtractorTest, KeyboxDevice_FailedToGetKeyboxData) { ExpectProvisioningType(kClientTokenKeybox); EXPECT_CALL(*crypto_session_, GetTokenFromKeybox(kLevel3, NotNull())) - .WillOnce(Return(UNKNOWN_ERROR)); + .WillOnce(Return(CdmResponseType(UNKNOWN_ERROR))); auto extractor = CreateExtractor(kLevel3); ASSERT_TRUE(extractor); uint32_t system_id; @@ -443,7 +445,8 @@ TEST_F(SystemIdExtractorTest, KeyboxDevice_FailedToParse) { const std::string kShortKeyData = "123456"; ExpectProvisioningType(kClientTokenKeybox); EXPECT_CALL(*crypto_session_, GetTokenFromKeybox(kLevel3, NotNull())) - .WillOnce(DoAll(SetArgPointee<1>(kShortKeyData), Return(NO_ERROR))); + .WillOnce(DoAll(SetArgPointee<1>(kShortKeyData), + Return(CdmResponseType(NO_ERROR)))); auto extractor = CreateExtractor(kLevel3); ASSERT_TRUE(extractor); uint32_t system_id; @@ -453,7 +456,8 @@ TEST_F(SystemIdExtractorTest, KeyboxDevice_FailedToParse) { TEST_F(SystemIdExtractorTest, OemCertDevice_Success) { ExpectProvisioningType(kClientTokenOemCert); EXPECT_CALL(*crypto_session_, GetTokenFromOemCert(kLevel3, NotNull())) - .WillOnce(DoAll(SetArgPointee<1>(kOemCertStr), Return(NO_ERROR))); + .WillOnce(DoAll(SetArgPointee<1>(kOemCertStr), + Return(CdmResponseType(NO_ERROR)))); ExpectSet(kOemCertSystemId); auto extractor = CreateExtractor(kLevel3); ASSERT_TRUE(extractor); @@ -465,7 +469,7 @@ TEST_F(SystemIdExtractorTest, OemCertDevice_Success) { TEST_F(SystemIdExtractorTest, OemCertDevice_FailedToGetCert) { ExpectProvisioningType(kClientTokenOemCert); EXPECT_CALL(*crypto_session_, GetTokenFromOemCert(kLevelDefault, NotNull())) - .WillOnce(Return(UNKNOWN_ERROR)); + .WillOnce(Return(CdmResponseType(UNKNOWN_ERROR))); auto extractor = CreateExtractor(kLevelDefault); ASSERT_TRUE(extractor); uint32_t system_id; @@ -477,7 +481,8 @@ TEST_F(SystemIdExtractorTest, OemCertDevice_FailedToParse) { wvutil::CdmRandom::RandomData(kOemCertStr.size()); ExpectProvisioningType(kClientTokenOemCert); EXPECT_CALL(*crypto_session_, GetTokenFromOemCert(kLevelDefault, NotNull())) - .WillOnce(DoAll(SetArgPointee<1>(kNotACertChain), Return(NO_ERROR))); + .WillOnce(DoAll(SetArgPointee<1>(kNotACertChain), + Return(CdmResponseType(NO_ERROR)))); auto extractor = CreateExtractor(kLevelDefault); ASSERT_TRUE(extractor); uint32_t system_id; diff --git a/libwvdrmengine/cdm/core/test/test_base.cpp b/libwvdrmengine/cdm/core/test/test_base.cpp index 7bb75c3e..5ede0a71 100644 --- a/libwvdrmengine/cdm/core/test/test_base.cpp +++ b/libwvdrmengine/cdm/core/test/test_base.cpp @@ -111,6 +111,11 @@ void show_menu(const char* prog_name, const std::string& extra_help_text) { << " configure the provisioning server url, please include http[s]" << " in the url" << std::endl << std::endl; + std::cout << " --server_version=N" << std::endl; + std::cout << " specify the server version. Tests that are not expected " + << "to pass" << std::endl + << " on this server version will be skipped." << std::endl + << std::endl; std::cout << " --qa_provisioning" << std::endl; std::cout << " use the QA provisioning cert and QA test keybox" @@ -313,7 +318,7 @@ CdmResponseType TestCryptoSession::GenerateNonce(uint32_t* nonce) { wvutil::TestSleep::Sleep(1); status = CryptoSession::GenerateNonce(nonce); } - return NO_ERROR; + return CdmResponseType(NO_ERROR); } class TestCryptoSessionFactory : public CryptoSessionFactory { @@ -462,9 +467,7 @@ void WvCdmTestBase::Provision() { // Receive and parse response. std::string http_message; - ASSERT_TRUE(url_request.GetResponse(&http_message)) - << "Failed to get provisioning response"; - LOGV("http_message: \n%s\n", http_message.c_str()); + ASSERT_NO_FATAL_FAILURE(url_request.AssertOkResponse(&http_message)); if (binary_provisioning_) { // extract provisioning response from received message @@ -631,6 +634,8 @@ bool WvCdmTestBase::Initialize(int argc, const char* const argv[], } } else if (arg_prefix == "--test_data_path") { default_config_->set_test_data_path(arg_value); + } else if (arg_prefix == "--server_version") { + default_config_->set_server_version(atoi(arg_value.c_str())); } else { std::cerr << "Unknown argument " << arg_prefix << std::endl; show_usage = true; @@ -654,8 +659,12 @@ bool WvCdmTestBase::Initialize(int argc, const char* const argv[], << std::endl; std::cout << "Default Renewal Server: " << default_config_->renewal_server() << std::endl; - std::cout << "Default KeyID: " << default_config_->key_id() << std::endl - << std::endl; + std::cout << "Default KeyID: " << default_config_->key_id() << std::endl; + if (default_config_->server_version() != 0) { + std::cout << "Server Version: " << default_config_->server_version() + << std::endl; + } + std::cout << std::endl; // Figure out which tests are appropriate for OEMCrypto, based on features // supported. diff --git a/libwvdrmengine/cdm/core/test/test_printers.cpp b/libwvdrmengine/cdm/core/test/test_printers.cpp index 9a71f74b..c8b2c30c 100644 --- a/libwvdrmengine/cdm/core/test/test_printers.cpp +++ b/libwvdrmengine/cdm/core/test/test_printers.cpp @@ -9,8 +9,8 @@ #include "error_string_util.h" namespace wvcdm { -void PrintTo(const enum CdmResponseType& value, ::std::ostream* os) { - *os << CdmResponseTypeToString(value); +void PrintTo(const CdmResponseEnum& value, ::std::ostream* os) { + *os << CdmResponseEnumToString(value); } void PrintTo(const enum CdmLicenseType& value, ::std::ostream* os) { diff --git a/libwvdrmengine/cdm/core/test/test_printers.h b/libwvdrmengine/cdm/core/test/test_printers.h index b51adc8f..7407a553 100644 --- a/libwvdrmengine/cdm/core/test/test_printers.h +++ b/libwvdrmengine/cdm/core/test/test_printers.h @@ -14,7 +14,7 @@ #include "wv_cdm_types.h" namespace wvcdm { -void PrintTo(const enum CdmResponseType& value, ::std::ostream* os); +void PrintTo(const enum CdmResponseEnum& value, ::std::ostream* os); void PrintTo(const enum CdmLicenseType& value, ::std::ostream* os); void PrintTo(const enum CdmSecurityLevel& value, ::std::ostream* os); void PrintTo(const enum CdmCertificateType& value, ::std::ostream* os); diff --git a/libwvdrmengine/cdm/core/test/url_request.cpp b/libwvdrmengine/cdm/core/test/url_request.cpp index fc4b755e..e77c6bf6 100644 --- a/libwvdrmengine/cdm/core/test/url_request.cpp +++ b/libwvdrmengine/cdm/core/test/url_request.cpp @@ -6,6 +6,7 @@ #include +#include #include #include "http_socket.h" @@ -21,6 +22,7 @@ const int kReadBufferSize = 1024; const int kConnectTimeoutMs = 15000; const int kWriteTimeoutMs = 12000; const int kReadTimeoutMs = 12000; +constexpr int kHttpOk = 200; const std::string kGoogleHeaderUpper("X-Google"); const std::string kGoogleHeaderLower("x-google"); @@ -125,6 +127,17 @@ bool UrlRequest::GetResponse(std::string* message) { return true; } +void UrlRequest::AssertOkResponse(std::string* message) { + ASSERT_TRUE(message); + ASSERT_TRUE(GetResponse(message)); + const int status_code = GetStatusCode(*message); + ASSERT_EQ(kHttpOk, status_code) + << "HTTP response from " << socket_.scheme() << "://" + << socket_.domain_name() << ":" << socket_.port() + << socket_.resource_path() << ": (" << message->size() << ") :\n" + << *message; +} + // static int UrlRequest::GetStatusCode(const std::string& response) { const std::string kHttpVersion("HTTP/1.1 "); diff --git a/libwvdrmengine/cdm/core/test/url_request.h b/libwvdrmengine/cdm/core/test/url_request.h index 0d6e4623..c2d0d35e 100644 --- a/libwvdrmengine/cdm/core/test/url_request.h +++ b/libwvdrmengine/cdm/core/test/url_request.h @@ -28,6 +28,8 @@ class UrlRequest { bool GetResponse(std::string* message); static int GetStatusCode(const std::string& response); + // Get the response, and expect the status is OK. + void AssertOkResponse(std::string* message); static bool GetDebugHeaderFields( const std::string& response, diff --git a/libwvdrmengine/cdm/core/test/usage_table_header_unittest.cpp b/libwvdrmengine/cdm/core/test/usage_table_header_unittest.cpp index 98464e29..205117d8 100644 --- a/libwvdrmengine/cdm/core/test/usage_table_header_unittest.cpp +++ b/libwvdrmengine/cdm/core/test/usage_table_header_unittest.cpp @@ -573,14 +573,15 @@ class UsageTableHeaderTest : public WvCdmTestBase { const CdmUsageTableHeader& usage_table_header, const std::vector& usage_entry_info_vector) { EXPECT_CALL(*crypto_session_, GetNumberOfOpenSessions(_, NotNull())) - .WillOnce(DoAll(SetArgPointee<1>(0), Return(NO_ERROR))); + .WillOnce( + DoAll(SetArgPointee<1>(0), Return(CdmResponseType(NO_ERROR)))); EXPECT_CALL(*device_files_, RetrieveUsageTableInfo(NotNull(), NotNull(), NotNull())) .WillOnce(DoAll(SetArgPointee<0>(usage_table_header), SetArgPointee<1>(usage_entry_info_vector), SetArgPointee<2>(false), Return(true))); EXPECT_CALL(*crypto_session_, LoadUsageTableHeader(_, usage_table_header)) - .WillOnce(Return(NO_ERROR)); + .WillOnce(Return(CdmResponseType(NO_ERROR))); EXPECT_TRUE(usage_table_header_->Init(security_level, crypto_session_)); } @@ -622,7 +623,8 @@ TEST_P(UsageTableHeaderInitializationTest, RestoreUsageTable_Success) { const RequestedSecurityLevel security_level = GetSecurityLevel(); EXPECT_CALL(*crypto_session_, GetNumberOfOpenSessions(security_level, NotNull())) - .WillRepeatedly(DoAll(SetArgPointee<1>(0), Return(NO_ERROR))); + .WillRepeatedly( + DoAll(SetArgPointee<1>(0), Return(CdmResponseType(NO_ERROR)))); EXPECT_CALL(*device_files_, RetrieveUsageTableInfo(NotNull(), NotNull(), NotNull())) .WillOnce(DoAll(SetArgPointee<0>(kUsageTableHeader), @@ -630,7 +632,7 @@ TEST_P(UsageTableHeaderInitializationTest, RestoreUsageTable_Success) { SetArgPointee<2>(false), Return(true))); EXPECT_CALL(*crypto_session_, LoadUsageTableHeader(security_level, kUsageTableHeader)) - .WillOnce(Return(NO_ERROR)); + .WillOnce(Return(CdmResponseType(NO_ERROR))); EXPECT_TRUE(usage_table_header_->Init(GetParam(), crypto_session_)); } @@ -643,7 +645,8 @@ TEST_P(UsageTableHeaderInitializationTest, // First run, success. EXPECT_CALL(*crypto_session_, GetNumberOfOpenSessions(security_level, NotNull())) - .WillRepeatedly(DoAll(SetArgPointee<1>(0), Return(NO_ERROR))); + .WillRepeatedly( + DoAll(SetArgPointee<1>(0), Return(CdmResponseType(NO_ERROR)))); EXPECT_CALL(*device_files_, RetrieveUsageTableInfo(NotNull(), NotNull(), NotNull())) .WillOnce(DoAll(SetArgPointee<0>(kUsageTableHeader), @@ -651,7 +654,7 @@ TEST_P(UsageTableHeaderInitializationTest, SetArgPointee<2>(false), Return(true))); EXPECT_CALL(*crypto_session_, LoadUsageTableHeader(security_level, kUsageTableHeader)) - .WillOnce(Return(NO_ERROR)); + .WillOnce(Return(CdmResponseType(NO_ERROR))); EXPECT_TRUE(usage_table_header_->Init(GetParam(), crypto_session_)); // Second run, failure. @@ -664,7 +667,8 @@ TEST_P(UsageTableHeaderInitializationTest, const RequestedSecurityLevel security_level = GetSecurityLevel(); EXPECT_CALL(*crypto_session_, GetNumberOfOpenSessions(security_level, NotNull())) - .WillRepeatedly(DoAll(SetArgPointee<1>(1), Return(NO_ERROR))); + .WillRepeatedly( + DoAll(SetArgPointee<1>(1), Return(CdmResponseType(NO_ERROR)))); EXPECT_FALSE(usage_table_header_->Init(GetParam(), crypto_session_)); } @@ -677,7 +681,8 @@ TEST_P(UsageTableHeaderInitializationTest, // 1) Fail to retrieve existing table file EXPECT_CALL(*crypto_session_, GetNumberOfOpenSessions(security_level, NotNull())) - .WillRepeatedly(DoAll(SetArgPointee<1>(0), Return(NO_ERROR))); + .WillRepeatedly( + DoAll(SetArgPointee<1>(0), Return(CdmResponseType(NO_ERROR)))); EXPECT_CALL(*device_files_, RetrieveUsageTableInfo(NotNull(), NotNull(), NotNull())) .WillOnce(Return(false)); @@ -689,8 +694,8 @@ TEST_P(UsageTableHeaderInitializationTest, ExpectToDeleteUsageTableFiles(); EXPECT_CALL(*crypto_session_, CreateUsageTableHeader(security_level, NotNull())) - .WillOnce( - DoAll(SetArgPointee<1>(kAnotherUsageTableHeader), Return(NO_ERROR))); + .WillOnce(DoAll(SetArgPointee<1>(kAnotherUsageTableHeader), + Return(CdmResponseType(NO_ERROR)))); EXPECT_CALL(*device_files_, StoreUsageTableInfo(kAnotherUsageTableHeader, kEmptyUsageEntryInfoVector)) .WillOnce(Return(true)); @@ -709,7 +714,8 @@ TEST_P(UsageTableHeaderInitializationTest, // 2) Loading existing header within OEMCrypto fails EXPECT_CALL(*crypto_session_, GetNumberOfOpenSessions(security_level, NotNull())) - .WillRepeatedly(DoAll(SetArgPointee<1>(0), Return(NO_ERROR))); + .WillRepeatedly( + DoAll(SetArgPointee<1>(0), Return(CdmResponseType(NO_ERROR)))); EXPECT_CALL(*device_files_, RetrieveUsageTableInfo(NotNull(), NotNull(), NotNull())) .WillOnce(DoAll(SetArgPointee<0>(kUsageTableHeader), @@ -717,7 +723,7 @@ TEST_P(UsageTableHeaderInitializationTest, SetArgPointee<2>(false), Return(true))); EXPECT_CALL(*crypto_session_, LoadUsageTableHeader(security_level, kUsageTableHeader)) - .WillOnce(Return(LOAD_USAGE_HEADER_GENERATION_SKEW)); + .WillOnce(Return(CdmResponseType(LOAD_USAGE_HEADER_GENERATION_SKEW))); // Expectations for create: // 1) Existing table is destroyed (files etc.) @@ -726,8 +732,8 @@ TEST_P(UsageTableHeaderInitializationTest, ExpectToDeleteUsageTableFiles(); EXPECT_CALL(*crypto_session_, CreateUsageTableHeader(security_level, NotNull())) - .WillOnce( - DoAll(SetArgPointee<1>(kAnotherUsageTableHeader), Return(NO_ERROR))); + .WillOnce(DoAll(SetArgPointee<1>(kAnotherUsageTableHeader), + Return(CdmResponseType(NO_ERROR)))); EXPECT_CALL(*device_files_, StoreUsageTableInfo(kAnotherUsageTableHeader, kEmptyUsageEntryInfoVector)) .WillOnce(Return(true)); @@ -744,7 +750,8 @@ TEST_P(UsageTableHeaderInitializationTest, // 1) No table info file exists EXPECT_CALL(*crypto_session_, GetNumberOfOpenSessions(security_level, NotNull())) - .WillRepeatedly(DoAll(SetArgPointee<1>(0), Return(NO_ERROR))); + .WillRepeatedly( + DoAll(SetArgPointee<1>(0), Return(CdmResponseType(NO_ERROR)))); EXPECT_CALL(*device_files_, RetrieveUsageTableInfo(NotNull(), NotNull(), NotNull())) .WillOnce(Return(false)); @@ -753,7 +760,7 @@ TEST_P(UsageTableHeaderInitializationTest, ExpectToDeleteUsageTableFiles(); EXPECT_CALL(*crypto_session_, CreateUsageTableHeader(security_level, NotNull())) - .WillOnce(Return(CREATE_USAGE_TABLE_ERROR)); + .WillOnce(Return(CdmResponseType(CREATE_USAGE_TABLE_ERROR))); EXPECT_FALSE(usage_table_header_->Init(GetParam(), crypto_session_)); } @@ -768,7 +775,8 @@ TEST_P(UsageTableHeaderInitializationTest, // 1) No table info file exists EXPECT_CALL(*crypto_session_, GetNumberOfOpenSessions(security_level, NotNull())) - .WillRepeatedly(DoAll(SetArgPointee<1>(0), Return(NO_ERROR))); + .WillRepeatedly( + DoAll(SetArgPointee<1>(0), Return(CdmResponseType(NO_ERROR)))); EXPECT_CALL(*device_files_, RetrieveUsageTableInfo(NotNull(), NotNull(), NotNull())) .WillOnce(Return(false)); @@ -778,7 +786,8 @@ TEST_P(UsageTableHeaderInitializationTest, ExpectToDeleteUsageTableFiles(); EXPECT_CALL(*crypto_session_, CreateUsageTableHeader(security_level, NotNull())) - .WillOnce(DoAll(SetArgPointee<1>(kUsageTableHeader), Return(NO_ERROR))); + .WillOnce(DoAll(SetArgPointee<1>(kUsageTableHeader), + Return(CdmResponseType(NO_ERROR)))); EXPECT_CALL(*device_files_, StoreUsageTableInfo(kUsageTableHeader, kEmptyUsageEntryInfoVector)) .WillOnce(Return(false)); @@ -796,7 +805,8 @@ TEST_P(UsageTableHeaderInitializationTest, RestoreUsageTable_AtCapacity) { // 2) Loading existing header within OEMCrypto succeeds EXPECT_CALL(*crypto_session_, GetNumberOfOpenSessions(security_level, NotNull())) - .WillRepeatedly(DoAll(SetArgPointee<1>(0), Return(NO_ERROR))); + .WillRepeatedly( + DoAll(SetArgPointee<1>(0), Return(CdmResponseType(NO_ERROR)))); EXPECT_CALL(*device_files_, RetrieveUsageTableInfo(NotNull(), NotNull(), NotNull())) .WillOnce(DoAll(SetArgPointee<0>(kUsageTableHeader), @@ -804,7 +814,7 @@ TEST_P(UsageTableHeaderInitializationTest, RestoreUsageTable_AtCapacity) { Return(true))); EXPECT_CALL(*crypto_session_, LoadUsageTableHeader(security_level, kUsageTableHeader)) - .WillOnce(Return(NO_ERROR)); + .WillOnce(Return(CdmResponseType(NO_ERROR))); EXPECT_TRUE(usage_table_header_->Init(GetParam(), crypto_session_)); } @@ -823,7 +833,8 @@ TEST_P(UsageTableHeaderInitializationTest, // 2) Loading existing header within OEMCrypto succeeds EXPECT_CALL(*crypto_session_, GetNumberOfOpenSessions(security_level, NotNull())) - .WillRepeatedly(DoAll(SetArgPointee<1>(0), Return(NO_ERROR))); + .WillRepeatedly( + DoAll(SetArgPointee<1>(0), Return(CdmResponseType(NO_ERROR)))); EXPECT_CALL(*device_files_, RetrieveUsageTableInfo(NotNull(), NotNull(), NotNull())) .WillOnce(DoAll(SetArgPointee<0>(kUsageTableHeader), @@ -831,7 +842,7 @@ TEST_P(UsageTableHeaderInitializationTest, Return(true))); EXPECT_CALL(*crypto_session_, LoadUsageTableHeader(security_level, kUsageTableHeader)) - .WillOnce(Return(NO_ERROR)); + .WillOnce(Return(CdmResponseType(NO_ERROR))); EXPECT_TRUE(usage_table_header_->Init(GetParam(), crypto_session_)); } @@ -853,7 +864,8 @@ TEST_P(UsageTableHeaderInitializationTest, // 2) Loading existing header within OEMCrypto succeeds EXPECT_CALL(*crypto_session_, GetNumberOfOpenSessions(security_level, NotNull())) - .WillRepeatedly(DoAll(SetArgPointee<1>(0), Return(NO_ERROR))); + .WillRepeatedly( + DoAll(SetArgPointee<1>(0), Return(CdmResponseType(NO_ERROR)))); EXPECT_CALL(*device_files_, RetrieveUsageTableInfo(NotNull(), NotNull(), NotNull())) .WillOnce(DoAll(SetArgPointee<0>(kUsageTableHeader), @@ -861,7 +873,7 @@ TEST_P(UsageTableHeaderInitializationTest, SetArgPointee<2>(false), Return(true))); EXPECT_CALL(*crypto_session_, LoadUsageTableHeader(security_level, kUsageTableHeader)) - .WillOnce(Return(NO_ERROR)); + .WillOnce(Return(CdmResponseType(NO_ERROR))); // Expectations for capacity check: // 1) Open a new crypto session. @@ -872,14 +884,14 @@ TEST_P(UsageTableHeaderInitializationTest, // 6) Table is shrunk by 1 // 7) Table state is stored EXPECT_CALL(*crypto_session_, Open(security_level)) - .WillOnce(Return(NO_ERROR)); + .WillOnce(Return(CdmResponseType(NO_ERROR))); const uint32_t expect_usage_entry_number = table_start_size; EXPECT_CALL(*crypto_session_, CreateUsageEntry(NotNull())) - .WillOnce( - DoAll(SetArgPointee<0>(expect_usage_entry_number), Return(NO_ERROR))); + .WillOnce(DoAll(SetArgPointee<0>(expect_usage_entry_number), + Return(CdmResponseType(NO_ERROR)))); EXPECT_CALL(*crypto_session_, UpdateUsageEntry(NotNull(), NotNull())) - .WillOnce( - DoAll(SetArgPointee<0>(kAnotherUsageTableHeader), Return(NO_ERROR))); + .WillOnce(DoAll(SetArgPointee<0>(kAnotherUsageTableHeader), + Return(CdmResponseType(NO_ERROR)))); EXPECT_CALL(*device_files_, StoreUsageTableInfo(kAnotherUsageTableHeader, SizeIs(table_start_size + 1))) .WillOnce(Return(true)); @@ -887,7 +899,7 @@ TEST_P(UsageTableHeaderInitializationTest, *crypto_session_, ShrinkUsageTableHeader(security_level, table_start_size, NotNull())) .WillOnce(DoAll(SetArgPointee<2>(kYetAnotherUsageTableHeader), - Return(NO_ERROR))); + Return(CdmResponseType(NO_ERROR)))); EXPECT_CALL(*device_files_, StoreUsageTableInfo(kYetAnotherUsageTableHeader, SizeIs(table_start_size))) .WillOnce(Return(true)); @@ -910,7 +922,8 @@ TEST_P(UsageTableHeaderInitializationTest, // 2) Loading existing header within OEMCrypto succeeds EXPECT_CALL(*crypto_session_, GetNumberOfOpenSessions(security_level, NotNull())) - .WillRepeatedly(DoAll(SetArgPointee<1>(0), Return(NO_ERROR))); + .WillRepeatedly( + DoAll(SetArgPointee<1>(0), Return(CdmResponseType(NO_ERROR)))); EXPECT_CALL(*device_files_, RetrieveUsageTableInfo(NotNull(), NotNull(), NotNull())) .WillOnce(DoAll(SetArgPointee<0>(kUsageTableHeader), @@ -918,15 +931,15 @@ TEST_P(UsageTableHeaderInitializationTest, SetArgPointee<2>(false), Return(true))); EXPECT_CALL(*crypto_session_, LoadUsageTableHeader(security_level, kUsageTableHeader)) - .WillOnce(Return(NO_ERROR)); + .WillOnce(Return(CdmResponseType(NO_ERROR))); // Expectations for capacity check: // 1) Open a new crypto session. // 2) Creating a new usage entry within OEMCrypto fails EXPECT_CALL(*crypto_session_, Open(security_level)) - .WillOnce(Return(NO_ERROR)); + .WillOnce(Return(CdmResponseType(NO_ERROR))); EXPECT_CALL(*crypto_session_, CreateUsageEntry(NotNull())) - .WillOnce(Return(CREATE_USAGE_ENTRY_UNKNOWN_ERROR)); + .WillOnce(Return(CdmResponseType(CREATE_USAGE_ENTRY_UNKNOWN_ERROR))); // Expectations for create: // 1) Existing table is destroyed (files etc.) @@ -935,8 +948,8 @@ TEST_P(UsageTableHeaderInitializationTest, ExpectToDeleteUsageTableFiles(); EXPECT_CALL(*crypto_session_, CreateUsageTableHeader(security_level, NotNull())) - .WillOnce( - DoAll(SetArgPointee<1>(kAnotherUsageTableHeader), Return(NO_ERROR))); + .WillOnce(DoAll(SetArgPointee<1>(kAnotherUsageTableHeader), + Return(CdmResponseType(NO_ERROR)))); EXPECT_CALL(*device_files_, StoreUsageTableInfo(kAnotherUsageTableHeader, kEmptyUsageEntryInfoVector)) .WillOnce(Return(true)); @@ -962,7 +975,8 @@ TEST_P(UsageTableHeaderInitializationTest, // 2) Loading existing header within OEMCrypto succeeds EXPECT_CALL(*crypto_session_, GetNumberOfOpenSessions(security_level, NotNull())) - .WillRepeatedly(DoAll(SetArgPointee<1>(0), Return(NO_ERROR))); + .WillRepeatedly( + DoAll(SetArgPointee<1>(0), Return(CdmResponseType(NO_ERROR)))); EXPECT_CALL(*device_files_, RetrieveUsageTableInfo(NotNull(), NotNull(), NotNull())) .WillOnce(DoAll(SetArgPointee<0>(kUsageTableHeader), @@ -970,7 +984,7 @@ TEST_P(UsageTableHeaderInitializationTest, SetArgPointee<2>(false), Return(true))); EXPECT_CALL(*crypto_session_, LoadUsageTableHeader(security_level, kUsageTableHeader)) - .WillOnce(Return(NO_ERROR)); + .WillOnce(Return(CdmResponseType(NO_ERROR))); // Expectations for capacity check: // 1) Open a new crypto session. @@ -980,14 +994,14 @@ TEST_P(UsageTableHeaderInitializationTest, // 5) New session is closed // 6) Shrinking table fails EXPECT_CALL(*crypto_session_, Open(security_level)) - .WillOnce(Return(NO_ERROR)); + .WillOnce(Return(CdmResponseType(NO_ERROR))); const uint32_t expect_usage_entry_number = table_start_size; EXPECT_CALL(*crypto_session_, CreateUsageEntry(NotNull())) - .WillOnce( - DoAll(SetArgPointee<0>(expect_usage_entry_number), Return(NO_ERROR))); + .WillOnce(DoAll(SetArgPointee<0>(expect_usage_entry_number), + Return(CdmResponseType(NO_ERROR)))); EXPECT_CALL(*crypto_session_, UpdateUsageEntry(NotNull(), NotNull())) - .WillOnce( - DoAll(SetArgPointee<0>(kAnotherUsageTableHeader), Return(NO_ERROR))); + .WillOnce(DoAll(SetArgPointee<0>(kAnotherUsageTableHeader), + Return(CdmResponseType(NO_ERROR)))); // Called twice due to defrag. EXPECT_CALL(*device_files_, StoreUsageTableInfo(kAnotherUsageTableHeader, SizeIs(table_start_size + 1))) @@ -996,7 +1010,8 @@ TEST_P(UsageTableHeaderInitializationTest, EXPECT_CALL( *crypto_session_, ShrinkUsageTableHeader(security_level, table_start_size, NotNull())) - .WillOnce(Return(SHRINK_USAGE_TABLE_HEADER_UNKNOWN_ERROR)); + .WillOnce( + Return(CdmResponseType(SHRINK_USAGE_TABLE_HEADER_UNKNOWN_ERROR))); // Expectations for create: // 1) Existing table is destroyed (files etc.) @@ -1006,7 +1021,7 @@ TEST_P(UsageTableHeaderInitializationTest, EXPECT_CALL(*crypto_session_, CreateUsageTableHeader(security_level, NotNull())) .WillOnce(DoAll(SetArgPointee<1>(kYetAnotherUsageTableHeader), - Return(NO_ERROR))); + Return(CdmResponseType(NO_ERROR)))); EXPECT_CALL(*device_files_, StoreUsageTableInfo(kYetAnotherUsageTableHeader, kEmptyUsageEntryInfoVector)) .WillOnce(Return(true)); @@ -1022,8 +1037,9 @@ TEST_F(UsageTableHeaderTest, AddEntry_CreateUsageEntryFailed_UnknownError) { const uint32_t expect_usage_entry_number = static_cast(kUsageEntryInfoVector.size()); EXPECT_CALL(*crypto_session_, CreateUsageEntry(NotNull())) - .WillOnce(DoAll(SetArgPointee<0>(expect_usage_entry_number), - Return(CREATE_USAGE_ENTRY_UNKNOWN_ERROR))); + .WillOnce( + DoAll(SetArgPointee<0>(expect_usage_entry_number), + Return(CdmResponseType(CREATE_USAGE_ENTRY_UNKNOWN_ERROR)))); uint32_t usage_entry_number = 0; EXPECT_NE(NO_ERROR, @@ -1040,8 +1056,8 @@ TEST_F(UsageTableHeaderTest, AddEntry_UsageEntryTooSmall) { const uint32_t expect_usage_entry_number = static_cast(kUsageEntryInfoVector.size()) - 1; EXPECT_CALL(*crypto_session_, CreateUsageEntry(NotNull())) - .WillOnce( - DoAll(SetArgPointee<0>(expect_usage_entry_number), Return(NO_ERROR))); + .WillOnce(DoAll(SetArgPointee<0>(expect_usage_entry_number), + Return(CdmResponseType(NO_ERROR)))); uint32_t usage_entry_number = 0; EXPECT_NE(NO_ERROR, @@ -1087,19 +1103,19 @@ TEST_F(UsageTableHeaderTest, AddEntry_NextConsecutiveOfflineUsageEntry) { kUsageEntryInfoOfflineLicense2; EXPECT_CALL(*crypto_session_, CreateUsageEntry(NotNull())) .WillOnce(DoAll(SetArgPointee<0>(initial_usage_entry_number), - Return(NO_ERROR))); + Return(CdmResponseType(NO_ERROR)))); EXPECT_CALL(*crypto_session_, MoveUsageEntry(final_usage_entry_number)) - .WillOnce(Return(NO_ERROR)); + .WillOnce(Return(CdmResponseType(NO_ERROR))); EXPECT_CALL(*crypto_session_, ShrinkUsageTableHeader( kLevelDefault, static_cast(expect_usage_entry_info_vector.size()), NotNull())) - .WillOnce( - DoAll(SetArgPointee<2>(kAnotherUsageTableHeader), Return(NO_ERROR))); + .WillOnce(DoAll(SetArgPointee<2>(kAnotherUsageTableHeader), + Return(CdmResponseType(NO_ERROR)))); EXPECT_CALL(*crypto_session_, UpdateUsageEntry(NotNull(), NotNull())) .WillOnce(DoAll(SetArgPointee<0>(kYetAnotherUsageTableHeader), - Return(NO_ERROR))); + Return(CdmResponseType(NO_ERROR)))); EXPECT_CALL(*device_files_, StoreUsageTableInfo(kYetAnotherUsageTableHeader, expect_usage_entry_info_vector)) @@ -1151,19 +1167,19 @@ TEST_F(UsageTableHeaderTest, AddEntry_NextConsecutiveSecureStopUsageEntry) { EXPECT_CALL(*crypto_session_, CreateUsageEntry(NotNull())) .WillOnce(DoAll(SetArgPointee<0>(initial_usage_entry_number), - Return(NO_ERROR))); + Return(CdmResponseType(NO_ERROR)))); EXPECT_CALL(*crypto_session_, MoveUsageEntry(final_usage_entry_number)) - .WillOnce(Return(NO_ERROR)); + .WillOnce(Return(CdmResponseType(NO_ERROR))); EXPECT_CALL(*crypto_session_, ShrinkUsageTableHeader( kLevelDefault, static_cast(expect_usage_entry_info_vector.size()), NotNull())) - .WillOnce( - DoAll(SetArgPointee<2>(kAnotherUsageTableHeader), Return(NO_ERROR))); + .WillOnce(DoAll(SetArgPointee<2>(kAnotherUsageTableHeader), + Return(CdmResponseType(NO_ERROR)))); EXPECT_CALL(*crypto_session_, UpdateUsageEntry(NotNull(), NotNull())) .WillOnce(DoAll(SetArgPointee<0>(kYetAnotherUsageTableHeader), - Return(NO_ERROR))); + Return(CdmResponseType(NO_ERROR)))); EXPECT_CALL(*device_files_, StoreUsageTableInfo(kYetAnotherUsageTableHeader, expect_usage_entry_info_vector)) @@ -1224,19 +1240,19 @@ TEST_F(UsageTableHeaderTest, AddEntry_SkipUsageEntries) { EXPECT_CALL(*crypto_session_, CreateUsageEntry(NotNull())) .WillOnce(DoAll(SetArgPointee<0>(initial_usage_entry_number), - Return(NO_ERROR))); + Return(CdmResponseType(NO_ERROR)))); EXPECT_CALL(*crypto_session_, MoveUsageEntry(final_usage_entry_number)) - .WillOnce(Return(NO_ERROR)); + .WillOnce(Return(CdmResponseType(NO_ERROR))); EXPECT_CALL(*crypto_session_, ShrinkUsageTableHeader( kLevelDefault, static_cast(expect_usage_entry_info_vector.size()), NotNull())) - .WillOnce( - DoAll(SetArgPointee<2>(kAnotherUsageTableHeader), Return(NO_ERROR))); + .WillOnce(DoAll(SetArgPointee<2>(kAnotherUsageTableHeader), + Return(CdmResponseType(NO_ERROR)))); EXPECT_CALL(*crypto_session_, UpdateUsageEntry(NotNull(), NotNull())) .WillOnce(DoAll(SetArgPointee<0>(kYetAnotherUsageTableHeader), - Return(NO_ERROR))); + Return(CdmResponseType(NO_ERROR)))); EXPECT_CALL(*device_files_, StoreUsageTableInfo(kYetAnotherUsageTableHeader, expect_usage_entry_info_vector)) @@ -1286,13 +1302,13 @@ TEST_F(UsageTableHeaderTest, AddEntry_CannotMoveNewEntry) { expect_usage_entry_info_vector.push_back(kUsageEntryInfoSecureStop2); EXPECT_CALL(*crypto_session_, CreateUsageEntry(NotNull())) - .WillOnce( - DoAll(SetArgPointee<0>(final_usage_entry_number), Return(NO_ERROR))); + .WillOnce(DoAll(SetArgPointee<0>(final_usage_entry_number), + Return(CdmResponseType(NO_ERROR)))); EXPECT_CALL(*crypto_session_, MoveUsageEntry(attempted_usage_entry_number)) - .WillOnce(Return(MOVE_USAGE_ENTRY_DESTINATION_IN_USE)); + .WillOnce(Return(CdmResponseType(MOVE_USAGE_ENTRY_DESTINATION_IN_USE))); EXPECT_CALL(*crypto_session_, UpdateUsageEntry(NotNull(), NotNull())) - .WillOnce( - DoAll(SetArgPointee<0>(kAnotherUsageTableHeader), Return(NO_ERROR))); + .WillOnce(DoAll(SetArgPointee<0>(kAnotherUsageTableHeader), + Return(CdmResponseType(NO_ERROR)))); EXPECT_CALL(*device_files_, StoreUsageTableInfo(kAnotherUsageTableHeader, expect_usage_entry_info_vector)) @@ -1346,19 +1362,20 @@ TEST_F(UsageTableHeaderTest, AddEntry_CannotShinkAfterMove) { EXPECT_CALL(*crypto_session_, CreateUsageEntry(NotNull())) .WillOnce(DoAll(SetArgPointee<0>(initial_usage_entry_number), - Return(NO_ERROR))); + Return(CdmResponseType(NO_ERROR)))); EXPECT_CALL(*crypto_session_, MoveUsageEntry(final_usage_entry_number)) - .WillOnce(Return(NO_ERROR)); + .WillOnce(Return(CdmResponseType(NO_ERROR))); EXPECT_CALL( *crypto_session_, ShrinkUsageTableHeader( kLevelDefault, static_cast(expect_usage_entry_info_vector.size()) - 1, NotNull())) - .WillOnce(Return(SHRINK_USAGE_TABLE_HEADER_ENTRY_IN_USE)); - EXPECT_CALL(*crypto_session_, UpdateUsageEntry(NotNull(), NotNull())) .WillOnce( - DoAll(SetArgPointee<0>(kAnotherUsageTableHeader), Return(NO_ERROR))); + Return(CdmResponseType(SHRINK_USAGE_TABLE_HEADER_ENTRY_IN_USE))); + EXPECT_CALL(*crypto_session_, UpdateUsageEntry(NotNull(), NotNull())) + .WillOnce(DoAll(SetArgPointee<0>(kAnotherUsageTableHeader), + Return(CdmResponseType(NO_ERROR)))); EXPECT_CALL(*device_files_, StoreUsageTableInfo(kAnotherUsageTableHeader, expect_usage_entry_info_vector)) @@ -1402,20 +1419,20 @@ TEST_F(UsageTableHeaderTest, EXPECT_CALL(*crypto_session_, CreateUsageEntry(NotNull())) // First call fails - .WillOnce(Return(INSUFFICIENT_CRYPTO_RESOURCES)) + .WillOnce(Return(CdmResponseType(INSUFFICIENT_CRYPTO_RESOURCES))) // Second call succeeds .WillOnce(DoAll(SetArgPointee<0>(expected_usage_entry_number), - Return(NO_ERROR))); + Return(CdmResponseType(NO_ERROR)))); // Covers all other expectations. EXPECT_CALL(*mock_usage_table_header, InvalidateEntryInternal(_, true, device_files_, NotNull())) .WillOnce(DoAll(SaveArg<0>(&invalidated_entry), Invoke(this, &UsageTableHeaderTest::InvalidateEntry), - Return(NO_ERROR))); + Return(CdmResponseType(NO_ERROR)))); EXPECT_CALL(*crypto_session_, UpdateUsageEntry(NotNull(), NotNull())) - .WillOnce( - DoAll(SetArgPointee<0>(kAnotherUsageTableHeader), Return(NO_ERROR))); + .WillOnce(DoAll(SetArgPointee<0>(kAnotherUsageTableHeader), + Return(CdmResponseType(NO_ERROR)))); std::vector final_usage_entries; EXPECT_CALL(*device_files_, StoreUsageTableInfo(kAnotherUsageTableHeader, _)) .WillOnce(DoAll(SaveArg<1>(&final_usage_entries), Return(true))); @@ -1456,11 +1473,11 @@ TEST_F(UsageTableHeaderTest, AddEntry_CreateUsageEntryFailsEveryTime) { EXPECT_CALL(*mock_usage_table_header, InvalidateEntryInternal(_, true, device_files_, NotNull())) .WillOnce(DoAll(Invoke(this, &UsageTableHeaderTest::InvalidateEntry), - Return(NO_ERROR))); + Return(CdmResponseType(NO_ERROR)))); EXPECT_CALL(*crypto_session_, CreateUsageEntry(NotNull())) .Times(2) - .WillRepeatedly(Return(INSUFFICIENT_CRYPTO_RESOURCES)); + .WillRepeatedly(Return(CdmResponseType(INSUFFICIENT_CRYPTO_RESOURCES))); // Now invoke the method under test uint32_t usage_entry_number; @@ -1505,7 +1522,7 @@ TEST_F(UsageTableHeaderTest, LoadEntry_CryptoSessionError) { const uint32_t usage_entry_number = 1; EXPECT_CALL(*crypto_session_, LoadUsageEntry(usage_entry_number, kUsageEntry)) - .WillOnce(Return(LOAD_USAGE_ENTRY_GENERATION_SKEW)); + .WillOnce(Return(CdmResponseType(LOAD_USAGE_ENTRY_GENERATION_SKEW))); EXPECT_NE(NO_ERROR, usage_table_header_->LoadEntry( crypto_session_, kUsageEntry, usage_entry_number)); @@ -1516,7 +1533,7 @@ TEST_F(UsageTableHeaderTest, LoadEntry) { const uint32_t usage_entry_number = 1; EXPECT_CALL(*crypto_session_, LoadUsageEntry(usage_entry_number, kUsageEntry)) - .WillOnce(Return(NO_ERROR)); + .WillOnce(Return(CdmResponseType(NO_ERROR))); EXPECT_EQ(NO_ERROR, usage_table_header_->LoadEntry( crypto_session_, kUsageEntry, usage_entry_number)); @@ -1527,9 +1544,9 @@ TEST_F(UsageTableHeaderTest, UpdateEntry_CryptoSessionError) { CdmUsageEntry usage_entry; EXPECT_CALL(*crypto_session_, UpdateUsageEntry(NotNull(), NotNull())) - .WillOnce(DoAll(SetArgPointee<0>(kUsageTableHeader), - SetArgPointee<1>(kUsageEntry), - Return(UPDATE_USAGE_ENTRY_UNKNOWN_ERROR))); + .WillOnce(DoAll( + SetArgPointee<0>(kUsageTableHeader), SetArgPointee<1>(kUsageEntry), + Return(CdmResponseType(UPDATE_USAGE_ENTRY_UNKNOWN_ERROR)))); EXPECT_NE(NO_ERROR, usage_table_header_->UpdateEntry(0, crypto_session_, &usage_entry)); @@ -1541,7 +1558,8 @@ TEST_F(UsageTableHeaderTest, UpdateEntry) { EXPECT_CALL(*crypto_session_, UpdateUsageEntry(NotNull(), NotNull())) .WillOnce(DoAll(SetArgPointee<0>(kUsageTableHeader), - SetArgPointee<1>(kUsageEntry), Return(NO_ERROR))); + SetArgPointee<1>(kUsageEntry), + Return(CdmResponseType(NO_ERROR)))); EXPECT_CALL( *device_files_, @@ -1574,7 +1592,8 @@ TEST_F(UsageTableHeaderTest, InvalidateEntry_InvalidUsageEntryNumber) { // and the unknown entry before it. // c. OEMCrypto error will cause the internal entries to remain the // same. -// d. InvalidateEntry() will return NO_ERROR as the storage type is +// d. InvalidateEntry() will return CdmResponseType(NO_ERROR) as the storage +// type is // changed. // // Storage type Usage entries @@ -1598,7 +1617,8 @@ TEST_F(UsageTableHeaderTest, InvalidateEntry_CryptoSessionError) { EXPECT_CALL(*crypto_session_, ShrinkUsageTableHeader(kLevelDefault, 2, NotNull())) - .WillOnce(Return(SHRINK_USAGE_TABLE_HEADER_UNKNOWN_ERROR)); + .WillOnce( + Return(CdmResponseType(SHRINK_USAGE_TABLE_HEADER_UNKNOWN_ERROR))); // Regardless, the usage table should be updated to reflect the changes // to the usage entry marked as storage type unknown. @@ -1626,7 +1646,7 @@ TEST_F(UsageTableHeaderTest, InvalidateEntry_CryptoSessionError) { // a. The entry will be marked as kStorageTypeUnknown. // b. Usage table will be resized to remove the last two entries. // c. Updated table will be saved. -// d. InvalidateEntry() will return NO_ERROR. +// d. InvalidateEntry() will return CdmResponseType(NO_ERROR). // // Storage type Usage entries // at start at end @@ -1650,8 +1670,8 @@ TEST_F(UsageTableHeaderTest, InvalidateEntry_LastEntry_OfflineEntry) { // Expectations for call to shrink. EXPECT_CALL(*crypto_session_, ShrinkUsageTableHeader(kLevelDefault, 2, NotNull())) - .WillOnce( - DoAll(SetArgPointee<2>(kAnotherUsageTableHeader), Return(NO_ERROR))); + .WillOnce(DoAll(SetArgPointee<2>(kAnotherUsageTableHeader), + Return(CdmResponseType(NO_ERROR)))); EXPECT_CALL(*device_files_, StoreUsageTableInfo(kAnotherUsageTableHeader, @@ -1674,7 +1694,7 @@ TEST_F(UsageTableHeaderTest, InvalidateEntry_LastEntry_OfflineEntry) { // a. The entry will be marked as kStorageTypeUnknown. // b. Usage table will be resized to remove the last two entries. // c. Updated table will be saved. -// d. InvalidateEntry() will return NO_ERROR. +// d. InvalidateEntry() will return CdmResponseType(NO_ERROR). // // Storage type Usage entries // at start at end @@ -1698,8 +1718,8 @@ TEST_F(UsageTableHeaderTest, InvalidateEntry_LastEntry_SecureStopEntry) { // Expectation when shrinking table. EXPECT_CALL(*crypto_session_, ShrinkUsageTableHeader(kLevelDefault, 2, NotNull())) - .WillOnce( - DoAll(SetArgPointee<2>(kAnotherUsageTableHeader), Return(NO_ERROR))); + .WillOnce(DoAll(SetArgPointee<2>(kAnotherUsageTableHeader), + Return(CdmResponseType(NO_ERROR)))); EXPECT_CALL(*device_files_, StoreUsageTableInfo(kAnotherUsageTableHeader, @@ -1729,7 +1749,7 @@ TEST_F(UsageTableHeaderTest, InvalidateEntry_LastEntry_SecureStopEntry) { // d. No entries will be moved due to (c). // e. Usage table will be resized to have only one entry. // f. Updated table will be saved. -// g. InvalidateEntry() will return NO_ERROR. +// g. InvalidateEntry() will return CdmResponseType(NO_ERROR). // // Storage type Usage entries // at start at end @@ -1766,8 +1786,8 @@ TEST_F(UsageTableHeaderTest, // Shrink to contain only the one valid entry. EXPECT_CALL(*crypto_session_, ShrinkUsageTableHeader(kLevelDefault, 1, NotNull())) - .WillOnce( - DoAll(SetArgPointee<2>(kAnotherUsageTableHeader), Return(NO_ERROR))); + .WillOnce(DoAll(SetArgPointee<2>(kAnotherUsageTableHeader), + Return(CdmResponseType(NO_ERROR)))); EXPECT_CALL(*device_files_, StoreUsageTableInfo(kAnotherUsageTableHeader, @@ -1796,7 +1816,7 @@ TEST_F(UsageTableHeaderTest, // d. No entries will be moved due to (c). // e. Usage table will be resized to have only one entry. // f. Updated table will be saved. -// g. InvalidateEntry() will return NO_ERROR. +// g. InvalidateEntry() will return CdmResponseType(NO_ERROR). // // Storage type Usage entries // at start at end @@ -1836,8 +1856,8 @@ TEST_F(UsageTableHeaderTest, InvalidateEntry_LastSecureStopEntriesAreMissing) { // Shrink to contain only the one valid entry. EXPECT_CALL(*crypto_session_, ShrinkUsageTableHeader(kLevelDefault, 1, NotNull())) - .WillOnce( - DoAll(SetArgPointee<2>(kAnotherUsageTableHeader), Return(NO_ERROR))); + .WillOnce(DoAll(SetArgPointee<2>(kAnotherUsageTableHeader), + Return(CdmResponseType(NO_ERROR)))); EXPECT_CALL(*device_files_, StoreUsageTableInfo(kAnotherUsageTableHeader, @@ -1867,7 +1887,7 @@ TEST_F(UsageTableHeaderTest, InvalidateEntry_LastSecureStopEntriesAreMissing) { // d. No entries will be moved due to (c). // e. Usage table will be resized to have only one entry. // f. Updated table will be saved. -// g. InvalidateEntry() will return NO_ERROR. +// g. InvalidateEntry() will return CdmResponseType(NO_ERROR). // // Storage type Usage entries // at start at end @@ -1938,8 +1958,8 @@ TEST_F(UsageTableHeaderTest, // Shrink to contain only the one valid entry. EXPECT_CALL(*crypto_session_, ShrinkUsageTableHeader(kLevelDefault, 1, NotNull())) - .WillOnce( - DoAll(SetArgPointee<2>(kAnotherUsageTableHeader), Return(NO_ERROR))); + .WillOnce(DoAll(SetArgPointee<2>(kAnotherUsageTableHeader), + Return(CdmResponseType(NO_ERROR)))); EXPECT_CALL(*device_files_, StoreUsageTableInfo(kAnotherUsageTableHeader, ElementsAre(kUsageEntryInfoSecureStop1))) @@ -1968,7 +1988,7 @@ TEST_F(UsageTableHeaderTest, // d. No entries will be moved due to (c). // e. Usage table will be resized to have only one entry. // f. Updated table will be saved. -// g. InvalidateEntry() will return NO_ERROR. +// g. InvalidateEntry() will return CdmResponseType(NO_ERROR). // // Storage type Usage entries // at start at end @@ -2020,8 +2040,8 @@ TEST_F(UsageTableHeaderTest, // Shrink to contain only the one valid entry. EXPECT_CALL(*crypto_session_, ShrinkUsageTableHeader(kLevelDefault, 1, NotNull())) - .WillOnce( - DoAll(SetArgPointee<2>(kAnotherUsageTableHeader), Return(NO_ERROR))); + .WillOnce(DoAll(SetArgPointee<2>(kAnotherUsageTableHeader), + Return(CdmResponseType(NO_ERROR)))); EXPECT_CALL(*device_files_, StoreUsageTableInfo(kAnotherUsageTableHeader, @@ -2051,7 +2071,7 @@ TEST_F(UsageTableHeaderTest, // e. The moved entry will be updated in device files. // f. Usage table will be resized to have only one entry. // g. Updated table will be saved. -// h. InvalidateEntry() will return NO_ERROR. +// h. InvalidateEntry() will return CdmResponseType(NO_ERROR). // // Storage type Usage entries // at start at end @@ -2102,13 +2122,16 @@ TEST_F(UsageTableHeaderTest, InvalidateEntry_LastEntriesAreStorageTypeUnknown) { .WillRepeatedly( DoAll(SetArgPointee<1>(offline_license_2_data), Return(true))); // Calls during Move(). - EXPECT_CALL(*crypto_session_, Open(kLevelDefault)).WillOnce(Return(NO_ERROR)); + EXPECT_CALL(*crypto_session_, Open(kLevelDefault)) + .WillOnce(Return(CdmResponseType(NO_ERROR))); EXPECT_CALL(*crypto_session_, LoadUsageEntry(3, kUsageEntry)) - .WillOnce(Return(NO_ERROR)); - EXPECT_CALL(*crypto_session_, MoveUsageEntry(1)).WillOnce(Return(NO_ERROR)); + .WillOnce(Return(CdmResponseType(NO_ERROR))); + EXPECT_CALL(*crypto_session_, MoveUsageEntry(1)) + .WillOnce(Return(CdmResponseType(NO_ERROR))); EXPECT_CALL(*crypto_session_, UpdateUsageEntry(NotNull(), NotNull())) .WillOnce(DoAll(SetArgPointee<0>(kYetAnotherUsageEntry), - SetArgPointee<1>(kUsageEntry), Return(NO_ERROR))); + SetArgPointee<1>(kUsageEntry), + Return(CdmResponseType(NO_ERROR)))); EXPECT_CALL(*device_files_, StoreUsageTableInfo(kYetAnotherUsageEntry, _)) .WillOnce(Return(true)); EXPECT_CALL(*device_files_, StoreLicense(_, NotNull())) @@ -2117,8 +2140,8 @@ TEST_F(UsageTableHeaderTest, InvalidateEntry_LastEntriesAreStorageTypeUnknown) { // Shrink to contain the remaining valid entry. EXPECT_CALL(*crypto_session_, ShrinkUsageTableHeader(kLevelDefault, 3, NotNull())) - .WillOnce( - DoAll(SetArgPointee<2>(kAnotherUsageTableHeader), Return(NO_ERROR))); + .WillOnce(DoAll(SetArgPointee<2>(kAnotherUsageTableHeader), + Return(CdmResponseType(NO_ERROR)))); EXPECT_CALL(*device_files_, StoreUsageTableInfo(kAnotherUsageTableHeader, @@ -2150,7 +2173,7 @@ TEST_F(UsageTableHeaderTest, InvalidateEntry_LastEntriesAreStorageTypeUnknown) { // the entry inplace. // e. Usage table will not be resized. // f. Updated table will be saved. -// g. InvalidateEntry() will return NO_ERROR. +// g. InvalidateEntry() will return CdmResponseType(NO_ERROR). // // Storage type Usage entries // at start at end @@ -2199,9 +2222,10 @@ TEST_F(UsageTableHeaderTest, .WillOnce(DoAll(SetArgPointee<1>(offline_license_3_data), Return(true))); // Calls during Move(). - EXPECT_CALL(*crypto_session_, Open(kLevelDefault)).WillOnce(Return(NO_ERROR)); + EXPECT_CALL(*crypto_session_, Open(kLevelDefault)) + .WillOnce(Return(CdmResponseType(NO_ERROR))); EXPECT_CALL(*crypto_session_, LoadUsageEntry(4, kUsageEntry)) - .WillOnce(Return(LOAD_USAGE_ENTRY_INVALID_SESSION)); + .WillOnce(Return(CdmResponseType(LOAD_USAGE_ENTRY_INVALID_SESSION))); // No calls to shrink are expected. @@ -2238,7 +2262,7 @@ TEST_F(UsageTableHeaderTest, // the entry inplace. // e. Usage table will not be resized. // f. Updated table will be saved. -// g. InvalidateEntry() will return NO_ERROR. +// g. InvalidateEntry() will return CdmResponseType(NO_ERROR). // // Storage type Usage entries // at start at end @@ -2277,9 +2301,10 @@ TEST_F(UsageTableHeaderTest, SetArgPointee<8>(kCryptoWrappedKey), Return(true))); // Calls during Move(). - EXPECT_CALL(*crypto_session_, Open(kLevelDefault)).WillOnce(Return(NO_ERROR)); + EXPECT_CALL(*crypto_session_, Open(kLevelDefault)) + .WillOnce(Return(CdmResponseType(NO_ERROR))); EXPECT_CALL(*crypto_session_, LoadUsageEntry(4, kUsageEntry)) - .WillOnce(Return(LOAD_USAGE_ENTRY_INVALID_SESSION)); + .WillOnce(Return(CdmResponseType(LOAD_USAGE_ENTRY_INVALID_SESSION))); // No calls to shrink are expected. @@ -2317,7 +2342,7 @@ TEST_F(UsageTableHeaderTest, // the entries inplace. // e. Usage table will be resized to remove the last two entries. // f. Updated table will be saved. -// g. InvalidateEntry() will return NO_ERROR. +// g. InvalidateEntry() will return CdmResponseType(NO_ERROR). // // Storage type Usage entries // at start at end @@ -2346,7 +2371,7 @@ TEST_F(UsageTableHeaderTest, EXPECT_CALL(*crypto_session_, Open(kLevelDefault)) .Times(2) - .WillRepeatedly(Return(NO_ERROR)); + .WillRepeatedly(Return(CdmResponseType(NO_ERROR))); // Expect calls for moving offline license 3 (position 4), but // failure to move will not result in any calls for updating. @@ -2372,7 +2397,7 @@ TEST_F(UsageTableHeaderTest, NotNull(), NotNull())) .WillOnce(DoAll(SetArgPointee<1>(offline_license_3_data), Return(true))); EXPECT_CALL(*crypto_session_, LoadUsageEntry(4, kUsageEntry)) - .WillOnce(Return(LOAD_USAGE_ENTRY_INVALID_SESSION)); + .WillOnce(Return(CdmResponseType(LOAD_USAGE_ENTRY_INVALID_SESSION))); // Expect calls for moving offline license 2 (position 3), but // failure to move will not result in any calls for updating. @@ -2398,14 +2423,14 @@ TEST_F(UsageTableHeaderTest, NotNull(), NotNull())) .WillOnce(DoAll(SetArgPointee<1>(offline_license_2_data), Return(true))); EXPECT_CALL(*crypto_session_, LoadUsageEntry(3, kUsageEntry)) - .WillOnce(Return(LOAD_USAGE_ENTRY_INVALID_SESSION)); + .WillOnce(Return(CdmResponseType(LOAD_USAGE_ENTRY_INVALID_SESSION))); // Expect a call to shrink table to cut off only the unknown entries // at the end of the table. EXPECT_CALL(*crypto_session_, ShrinkUsageTableHeader(kLevelDefault, 5, NotNull())) - .WillOnce( - DoAll(SetArgPointee<2>(kAnotherUsageTableHeader), Return(NO_ERROR))); + .WillOnce(DoAll(SetArgPointee<2>(kAnotherUsageTableHeader), + Return(CdmResponseType(NO_ERROR)))); // Update table for the entry now marked storage type unknown and // the entries that were cut off. @@ -2442,7 +2467,7 @@ TEST_F(UsageTableHeaderTest, // the entries inplace. // e. Usage table will be resized to remove the last two entries. // f. Updated table will be saved. -// g. InvalidateEntry() will return NO_ERROR. +// g. InvalidateEntry() will return CdmResponseType(NO_ERROR). // // Storage type Usage entries // at start at end @@ -2472,7 +2497,7 @@ TEST_F( EXPECT_CALL(*crypto_session_, Open(kLevelDefault)) .Times(2) - .WillRepeatedly(Return(NO_ERROR)); + .WillRepeatedly(Return(CdmResponseType(NO_ERROR))); // Expect calls for moving streaming license 3 (position 4), but // failure to move will not result in any calls for updating. @@ -2488,7 +2513,7 @@ TEST_F( SetArgPointee<7>(kDrmCertificate), SetArgPointee<8>(kCryptoWrappedKey), Return(true))); EXPECT_CALL(*crypto_session_, LoadUsageEntry(4, kUsageEntry)) - .WillOnce(Return(LOAD_USAGE_ENTRY_INVALID_SESSION)); + .WillOnce(Return(CdmResponseType(LOAD_USAGE_ENTRY_INVALID_SESSION))); // Expect calls for moving streaming license 2 (position 3), but // failure to move will not result in any calls for updating. @@ -2504,14 +2529,14 @@ TEST_F( SetArgPointee<7>(kDrmCertificate), SetArgPointee<8>(kCryptoWrappedKey), Return(true))); EXPECT_CALL(*crypto_session_, LoadUsageEntry(3, kUsageEntry)) - .WillOnce(Return(LOAD_USAGE_ENTRY_INVALID_SESSION)); + .WillOnce(Return(CdmResponseType(LOAD_USAGE_ENTRY_INVALID_SESSION))); // Expect a call to shrink table to cut off only the unknown entries // at the end of the table. EXPECT_CALL(*crypto_session_, ShrinkUsageTableHeader(kLevelDefault, 5, NotNull())) - .WillOnce( - DoAll(SetArgPointee<2>(kAnotherUsageTableHeader), Return(NO_ERROR))); + .WillOnce(DoAll(SetArgPointee<2>(kAnotherUsageTableHeader), + Return(CdmResponseType(NO_ERROR)))); // Update table for the entry now marked storage type unknown and // the entries that were cut off. @@ -2543,7 +2568,7 @@ TEST_F( // c. The selected entries will be moved. // d. Usage table will be resized. // e. Updated table will be saved. -// f. InvalidateEntry() will return NO_ERROR. +// f. InvalidateEntry() will return CdmResponseType(NO_ERROR). // // Storage type Usage entries // at start at end @@ -2591,8 +2616,9 @@ TEST_F(UsageTableHeaderTest, InvalidateEntry_LastEntryIsOffline) { .WillRepeatedly( DoAll(SetArgPointee<1>(offline_license_3_data), Return(true))); EXPECT_CALL(*crypto_session_, LoadUsageEntry(4, kUsageEntry)) - .WillOnce(Return(NO_ERROR)); - EXPECT_CALL(*crypto_session_, MoveUsageEntry(1)).WillOnce(Return(NO_ERROR)); + .WillOnce(Return(CdmResponseType(NO_ERROR))); + EXPECT_CALL(*crypto_session_, MoveUsageEntry(1)) + .WillOnce(Return(CdmResponseType(NO_ERROR))); // Expect calls for moving offline license 2 (position 3) to position 2. const DeviceFiles::CdmLicenseData offline_license_2_data{ @@ -2619,13 +2645,14 @@ TEST_F(UsageTableHeaderTest, InvalidateEntry_LastEntryIsOffline) { .WillRepeatedly( DoAll(SetArgPointee<1>(offline_license_2_data), Return(true))); EXPECT_CALL(*crypto_session_, LoadUsageEntry(3, kUsageEntry)) - .WillOnce(Return(NO_ERROR)); - EXPECT_CALL(*crypto_session_, MoveUsageEntry(2)).WillOnce(Return(NO_ERROR)); + .WillOnce(Return(CdmResponseType(NO_ERROR))); + EXPECT_CALL(*crypto_session_, MoveUsageEntry(2)) + .WillOnce(Return(CdmResponseType(NO_ERROR))); // Common to both moves. EXPECT_CALL(*crypto_session_, Open(kLevelDefault)) .Times(2) - .WillRepeatedly(Return(NO_ERROR)); + .WillRepeatedly(Return(CdmResponseType(NO_ERROR))); EXPECT_CALL(*device_files_, StoreLicense(_, NotNull())) .Times(2) .WillRepeatedly(Return(true)); @@ -2633,7 +2660,7 @@ TEST_F(UsageTableHeaderTest, InvalidateEntry_LastEntryIsOffline) { .Times(2) .WillRepeatedly(DoAll(SetArgPointee<0>(kAnotherUsageTableHeader), SetArgPointee<1>(kAnotherUsageEntry), - Return(NO_ERROR))); + Return(CdmResponseType(NO_ERROR)))); EXPECT_CALL(*device_files_, StoreUsageTableInfo(kAnotherUsageTableHeader, _)) .Times(2) .WillRepeatedly(Return(true)); @@ -2641,8 +2668,8 @@ TEST_F(UsageTableHeaderTest, InvalidateEntry_LastEntryIsOffline) { // Shrink to contain the remaining valid entry. EXPECT_CALL(*crypto_session_, ShrinkUsageTableHeader(kLevelDefault, 3, NotNull())) - .WillOnce( - DoAll(SetArgPointee<2>(kYetAnotherUsageEntry), Return(NO_ERROR))); + .WillOnce(DoAll(SetArgPointee<2>(kYetAnotherUsageEntry), + Return(CdmResponseType(NO_ERROR)))); EXPECT_CALL(*device_files_, StoreUsageTableInfo(kYetAnotherUsageEntry, ElementsAre(kUsageEntryInfoSecureStop1, @@ -2669,7 +2696,7 @@ TEST_F(UsageTableHeaderTest, InvalidateEntry_LastEntryIsOffline) { // c. The selected entries will be moved. // d. Usage table will be resized. // e. Updated table will be saved. -// f. InvalidateEntry() will return NO_ERROR. +// f. InvalidateEntry() will return CdmResponseType(NO_ERROR). // // Storage type Usage entries // at start at end @@ -2715,7 +2742,7 @@ TEST_F(UsageTableHeaderTest, InvalidateEntry_LastEntryIsSecureStop) { kUsageEntryInfoSecureStop3.key_set_id, _, 1, _, _)) .WillOnce(Return(true)); EXPECT_CALL(*crypto_session_, LoadUsageEntry(4, kUsageEntry)) - .WillOnce(Return(NO_ERROR)); + .WillOnce(Return(CdmResponseType(NO_ERROR))); EXPECT_CALL(*crypto_session_, MoveUsageEntry(1)); // Expect calls for moving streaming license 2 (position 3) to position 2. @@ -2741,18 +2768,18 @@ TEST_F(UsageTableHeaderTest, InvalidateEntry_LastEntryIsSecureStop) { kUsageEntryInfoSecureStop2.key_set_id, _, 2, _, _)) .WillOnce(Return(true)); EXPECT_CALL(*crypto_session_, LoadUsageEntry(3, kUsageEntry)) - .WillOnce(Return(NO_ERROR)); + .WillOnce(Return(CdmResponseType(NO_ERROR))); EXPECT_CALL(*crypto_session_, MoveUsageEntry(2)); // Common to both moves. EXPECT_CALL(*crypto_session_, Open(kLevelDefault)) .Times(2) - .WillRepeatedly(Return(NO_ERROR)); + .WillRepeatedly(Return(CdmResponseType(NO_ERROR))); EXPECT_CALL(*crypto_session_, UpdateUsageEntry(NotNull(), NotNull())) .Times(2) .WillRepeatedly(DoAll(SetArgPointee<0>(kAnotherUsageTableHeader), SetArgPointee<1>(kAnotherUsageEntry), - Return(NO_ERROR))); + Return(CdmResponseType(NO_ERROR)))); EXPECT_CALL(*device_files_, StoreUsageTableInfo(kAnotherUsageTableHeader, _)) .Times(2) .WillRepeatedly(Return(true)); @@ -2760,8 +2787,8 @@ TEST_F(UsageTableHeaderTest, InvalidateEntry_LastEntryIsSecureStop) { // Shrink to contain the remaining valid entry. EXPECT_CALL(*crypto_session_, ShrinkUsageTableHeader(kLevelDefault, 3, NotNull())) - .WillOnce( - DoAll(SetArgPointee<2>(kYetAnotherUsageEntry), Return(NO_ERROR))); + .WillOnce(DoAll(SetArgPointee<2>(kYetAnotherUsageEntry), + Return(CdmResponseType(NO_ERROR)))); EXPECT_CALL(*device_files_, StoreUsageTableInfo(kYetAnotherUsageEntry, ElementsAre(kUsageEntryInfoOfflineLicense1, @@ -2789,7 +2816,7 @@ TEST_F(UsageTableHeaderTest, InvalidateEntry_LastEntryIsSecureStop) { // c. The selected entries will be moved. // d. Usage table will be resized. // e. Updated table will be saved. -// f. InvalidateEntry() will return NO_ERROR. +// f. InvalidateEntry() will return CdmResponseType(NO_ERROR). // // Storage type Usage entries // at start at end @@ -2841,8 +2868,9 @@ TEST_F(UsageTableHeaderTest, .WillRepeatedly( DoAll(SetArgPointee<1>(offline_license_3_data), Return(true))); EXPECT_CALL(*crypto_session_, LoadUsageEntry(4, kUsageEntry)) - .WillOnce(Return(NO_ERROR)); - EXPECT_CALL(*crypto_session_, MoveUsageEntry(1)).WillOnce(Return(NO_ERROR)); + .WillOnce(Return(CdmResponseType(NO_ERROR))); + EXPECT_CALL(*crypto_session_, MoveUsageEntry(1)) + .WillOnce(Return(CdmResponseType(NO_ERROR))); // Expect calls for moving offline license 2 (position 3) to position 2. const DeviceFiles::CdmLicenseData offline_license_2_data{ @@ -2869,13 +2897,14 @@ TEST_F(UsageTableHeaderTest, .WillRepeatedly( DoAll(SetArgPointee<1>(offline_license_2_data), Return(true))); EXPECT_CALL(*crypto_session_, LoadUsageEntry(3, kUsageEntry)) - .WillOnce(Return(NO_ERROR)); - EXPECT_CALL(*crypto_session_, MoveUsageEntry(2)).WillOnce(Return(NO_ERROR)); + .WillOnce(Return(CdmResponseType(NO_ERROR))); + EXPECT_CALL(*crypto_session_, MoveUsageEntry(2)) + .WillOnce(Return(CdmResponseType(NO_ERROR))); // Common to both moves. EXPECT_CALL(*crypto_session_, Open(kLevelDefault)) .Times(2) - .WillRepeatedly(Return(NO_ERROR)); + .WillRepeatedly(Return(CdmResponseType(NO_ERROR))); EXPECT_CALL(*device_files_, StoreLicense(_, NotNull())) .Times(2) .WillRepeatedly(Return(true)); @@ -2883,7 +2912,7 @@ TEST_F(UsageTableHeaderTest, .Times(2) .WillRepeatedly(DoAll(SetArgPointee<0>(kAnotherUsageTableHeader), SetArgPointee<1>(kAnotherUsageEntry), - Return(NO_ERROR))); + Return(CdmResponseType(NO_ERROR)))); EXPECT_CALL(*device_files_, StoreUsageTableInfo(kAnotherUsageTableHeader, _)) .Times(2) .WillRepeatedly(Return(true)); @@ -2891,8 +2920,8 @@ TEST_F(UsageTableHeaderTest, // Shrink to contain the remaining valid entry. EXPECT_CALL(*crypto_session_, ShrinkUsageTableHeader(kLevelDefault, 3, NotNull())) - .WillOnce( - DoAll(SetArgPointee<2>(kYetAnotherUsageEntry), Return(NO_ERROR))); + .WillOnce(DoAll(SetArgPointee<2>(kYetAnotherUsageEntry), + Return(CdmResponseType(NO_ERROR)))); EXPECT_CALL(*device_files_, StoreUsageTableInfo(kYetAnotherUsageEntry, ElementsAre(kUsageEntryInfoSecureStop1, @@ -2919,7 +2948,7 @@ TEST_F(UsageTableHeaderTest, // c. The selected entries will be moved. // d. Usage table will be resized. // e. Updated table will be saved. -// f. InvalidateEntry() will return NO_ERROR. +// f. InvalidateEntry() will return CdmResponseType(NO_ERROR). // // Storage type Usage entries // at start at end @@ -2969,7 +2998,7 @@ TEST_F(UsageTableHeaderTest, kUsageEntryInfoSecureStop3.key_set_id, _, 1, _, _)) .WillOnce(Return(true)); EXPECT_CALL(*crypto_session_, LoadUsageEntry(4, kUsageEntry)) - .WillOnce(Return(NO_ERROR)); + .WillOnce(Return(CdmResponseType(NO_ERROR))); EXPECT_CALL(*crypto_session_, MoveUsageEntry(1)); // Expect calls for moving streaming license 2 (position 3) to position 2. @@ -2995,18 +3024,18 @@ TEST_F(UsageTableHeaderTest, kUsageEntryInfoSecureStop2.key_set_id, _, 2, _, _)) .WillOnce(Return(true)); EXPECT_CALL(*crypto_session_, LoadUsageEntry(3, kUsageEntry)) - .WillOnce(Return(NO_ERROR)); + .WillOnce(Return(CdmResponseType(NO_ERROR))); EXPECT_CALL(*crypto_session_, MoveUsageEntry(2)); // Common to both moves. EXPECT_CALL(*crypto_session_, Open(kLevelDefault)) .Times(2) - .WillRepeatedly(Return(NO_ERROR)); + .WillRepeatedly(Return(CdmResponseType(NO_ERROR))); EXPECT_CALL(*crypto_session_, UpdateUsageEntry(NotNull(), NotNull())) .Times(2) .WillRepeatedly(DoAll(SetArgPointee<0>(kAnotherUsageTableHeader), SetArgPointee<1>(kAnotherUsageEntry), - Return(NO_ERROR))); + Return(CdmResponseType(NO_ERROR)))); EXPECT_CALL(*device_files_, StoreUsageTableInfo(kAnotherUsageTableHeader, _)) .Times(2) .WillRepeatedly(Return(true)); @@ -3014,8 +3043,8 @@ TEST_F(UsageTableHeaderTest, // Shrink to contain the remaining valid entry. EXPECT_CALL(*crypto_session_, ShrinkUsageTableHeader(kLevelDefault, 3, NotNull())) - .WillOnce( - DoAll(SetArgPointee<2>(kYetAnotherUsageEntry), Return(NO_ERROR))); + .WillOnce(DoAll(SetArgPointee<2>(kYetAnotherUsageEntry), + Return(CdmResponseType(NO_ERROR)))); EXPECT_CALL(*device_files_, StoreUsageTableInfo(kYetAnotherUsageEntry, @@ -3041,7 +3070,7 @@ TEST_F(UsageTableHeaderTest, // b. Defrag is skipped (no calls to Move()). // c. Usage table will be resized. // e. Updated table will be saved. -// f. InvalidateEntry() will return NO_ERROR. +// f. InvalidateEntry() will return CdmResponseType(NO_ERROR). // // Storage type Usage entries // at start at end @@ -3070,8 +3099,8 @@ TEST_F(UsageTableHeaderTest, InvalidateEntry_NoValidSessionsAfter) { // No calls related to defragging, just shrinking the table and save. EXPECT_CALL(*crypto_session_, ShrinkUsageTableHeader(kLevelDefault, 0, NotNull())) - .WillOnce( - DoAll(SetArgPointee<2>(kAnotherUsageTableHeader), Return(NO_ERROR))); + .WillOnce(DoAll(SetArgPointee<2>(kAnotherUsageTableHeader), + Return(CdmResponseType(NO_ERROR)))); EXPECT_CALL(*device_files_, StoreUsageTableInfo(kAnotherUsageTableHeader, kEmptyUsageEntryInfoVector)) @@ -3086,7 +3115,7 @@ TEST_F(UsageTableHeaderTest, InvalidateEntry_NoValidSessionsAfter) { // 1. Usage entry to be deleted is last valid entry (Secure stop 1) // 2. There exists an entry to be moved (Offline License 1) // 3. OEMCrypto is at max sessions, and any attempt to open a new session -// will fail with INSUFFICIENT_CRYPTO_RESOURCES. +// will fail with CdmResponseType(INSUFFICIENT_CRYPTO_RESOURCES). // // Attempting to delete the entry in (1) will result in: // a. The entry will be marked as kStorageTypeUnknown. @@ -3095,7 +3124,7 @@ TEST_F(UsageTableHeaderTest, InvalidateEntry_NoValidSessionsAfter) { // d. Defrag is aborted; but shrink is still made up to last valid. // e. Usage table will be resized. // f. Updated table will be saved. -// g. InvalidateEntry() will return NO_ERROR. +// g. InvalidateEntry() will return CdmResponseType(NO_ERROR). // // Storage type Usage entries // at start at end @@ -3140,14 +3169,14 @@ TEST_F(UsageTableHeaderTest, InvalidateEntry_MaxSessionReached) { NotNull(), NotNull())) .WillOnce(DoAll(SetArgPointee<1>(offline_license_1_data), Return(true))); EXPECT_CALL(*crypto_session_, Open(kLevelDefault)) - .WillRepeatedly(Return(INSUFFICIENT_CRYPTO_RESOURCES)); + .WillRepeatedly(Return(CdmResponseType(INSUFFICIENT_CRYPTO_RESOURCES))); // Despite being unable to open session, the table should be resized to // exclude the trailing invalid entries. EXPECT_CALL(*crypto_session_, ShrinkUsageTableHeader(kLevelDefault, 2, NotNull())) - .WillOnce( - DoAll(SetArgPointee<2>(kAnotherUsageTableHeader), Return(NO_ERROR))); + .WillOnce(DoAll(SetArgPointee<2>(kAnotherUsageTableHeader), + Return(CdmResponseType(NO_ERROR)))); EXPECT_CALL(*device_files_, StoreUsageTableInfo(kAnotherUsageTableHeader, ElementsAre(kUsageEntryInfoStorageTypeUnknown, @@ -3165,7 +3194,7 @@ TEST_F(UsageTableHeaderTest, InvalidateEntry_MaxSessionReached) { // 1. Usage entry to be deleted is first valid entry (Secure stop 1) // 2. There exists an entry to be moved (Offline License 1) // 3. OEMCrypto is at max sessions, and any attempt to open a new session -// will fail with INSUFFICIENT_CRYPTO_RESOURCES. +// will fail with CdmResponseType(INSUFFICIENT_CRYPTO_RESOURCES). // // Attempting to delete the entry in (1) will result in: // a. The entry will be marked as kStorageTypeUnknown. @@ -3174,7 +3203,7 @@ TEST_F(UsageTableHeaderTest, InvalidateEntry_MaxSessionReached) { // d. Defrag is aborted; but shrink is still made up to last valid. // e. Usage table will be resized. // f. Updated table will be saved. -// g. InvalidateEntry() will return NO_ERROR. +// g. InvalidateEntry() will return CdmResponseType(NO_ERROR). // // Storage type Usage entries // at start at end @@ -3219,14 +3248,14 @@ TEST_F(UsageTableHeaderTest, InvalidateEntry_FirstEntry_MaxSessionReached) { NotNull(), NotNull())) .WillOnce(DoAll(SetArgPointee<1>(offline_license_1_data), Return(true))); EXPECT_CALL(*crypto_session_, Open(kLevelDefault)) - .WillRepeatedly(Return(INSUFFICIENT_CRYPTO_RESOURCES)); + .WillRepeatedly(Return(CdmResponseType(INSUFFICIENT_CRYPTO_RESOURCES))); // Despite being unable to open session, the table should be resized to // exclude the trailing invalid entries. EXPECT_CALL(*crypto_session_, ShrinkUsageTableHeader(kLevelDefault, 2, NotNull())) - .WillOnce( - DoAll(SetArgPointee<2>(kAnotherUsageTableHeader), Return(NO_ERROR))); + .WillOnce(DoAll(SetArgPointee<2>(kAnotherUsageTableHeader), + Return(CdmResponseType(NO_ERROR)))); EXPECT_CALL(*device_files_, StoreUsageTableInfo(kAnotherUsageTableHeader, ElementsAre(kUsageEntryInfoStorageTypeUnknown, @@ -3295,10 +3324,11 @@ TEST_F(UsageTableHeaderTest, InvalidateEntry_SystemInvalidation_OnMove) { RetrieveLicense(kUsageEntryInfoOfflineLicense1.key_set_id, NotNull(), NotNull())) .WillOnce(DoAll(SetArgPointee<1>(offline_license_1_data), Return(true))); - EXPECT_CALL(*crypto_session_, Open(kLevelDefault)).WillOnce(Return(NO_ERROR)); + EXPECT_CALL(*crypto_session_, Open(kLevelDefault)) + .WillOnce(Return(CdmResponseType(NO_ERROR))); EXPECT_CALL(*crypto_session_, LoadUsageEntry(1, kUsageEntry)); EXPECT_CALL(*crypto_session_, MoveUsageEntry(0)) - .WillOnce(Return(SYSTEM_INVALIDATED_ERROR)); + .WillOnce(Return(CdmResponseType(SYSTEM_INVALIDATED_ERROR))); // Defrag is aborted, and table is saved, but no call to shrink(). EXPECT_CALL( @@ -3324,7 +3354,7 @@ TEST_F(UsageTableHeaderTest, InvalidateEntry_SystemInvalidation_OnMove) { // // Note: This is very similar to InvalidateEntry_SystemInvalidation_OnMove // except that the error returned is not of importance to the calling -// session and is ignored (NO_ERROR returned). +// session and is ignored (CdmResponseType(NO_ERROR) returned). // // Attempting to delete the entry in (1) will result in: // a. The entry will be marked as kStorageTypeUnknown. @@ -3332,7 +3362,7 @@ TEST_F(UsageTableHeaderTest, InvalidateEntry_SystemInvalidation_OnMove) { // c. Moving entry will result in session invalidation. // d. Defrag is aborted; no call to Shrink() // f. Updated table will be saved. -// g. InvalidateEntry() will return NO_ERROR. +// g. InvalidateEntry() will return CdmResponseType(NO_ERROR). // // Storage type Usage entries // at start at end @@ -3376,10 +3406,11 @@ TEST_F(UsageTableHeaderTest, InvalidateEntry_SessionInvalidation_OnMove) { RetrieveLicense(kUsageEntryInfoOfflineLicense1.key_set_id, NotNull(), NotNull())) .WillOnce(DoAll(SetArgPointee<1>(offline_license_1_data), Return(true))); - EXPECT_CALL(*crypto_session_, Open(kLevelDefault)).WillOnce(Return(NO_ERROR)); + EXPECT_CALL(*crypto_session_, Open(kLevelDefault)) + .WillOnce(Return(CdmResponseType(NO_ERROR))); EXPECT_CALL(*crypto_session_, LoadUsageEntry(1, kUsageEntry)); EXPECT_CALL(*crypto_session_, MoveUsageEntry(0)) - .WillOnce(Return(SESSION_LOST_STATE_ERROR)); + .WillOnce(Return(CdmResponseType(SESSION_LOST_STATE_ERROR))); // Defrag is aborted, and table is saved, but no call to shrink(). EXPECT_CALL( @@ -3408,9 +3439,10 @@ TEST_F(UsageTableHeaderTest, InvalidateEntry_SessionInvalidation_OnMove) { // a. The entry will be marked as kStorageTypeUnknown. // b. Only remaining entry is selected for move (Offline license 1) // c. Entry will be moved successfully. -// d. Shrinking table fill fail with SHRINK_USAGE_TABLE_HEADER_ENTRY_IN_USE. -// f. Updated table will be saved, with trailing invalid entries. -// g. InvalidateEntry() will return NO_ERROR. +// d. Shrinking table fill fail with +// CdmResponseType(SHRINK_USAGE_TABLE_HEADER_ENTRY_IN_USE). f. Updated table +// will be saved, with trailing invalid entries. g. InvalidateEntry() will +// return CdmResponseType(NO_ERROR). // // Storage type Usage entries // at start at end @@ -3455,12 +3487,15 @@ TEST_F(UsageTableHeaderTest, InvalidateEntry_ShrinkFails) { .Times(2) // First to get entry, then again to update. .WillRepeatedly( DoAll(SetArgPointee<1>(offline_license_1_data), Return(true))); - EXPECT_CALL(*crypto_session_, Open(kLevelDefault)).WillOnce(Return(NO_ERROR)); + EXPECT_CALL(*crypto_session_, Open(kLevelDefault)) + .WillOnce(Return(CdmResponseType(NO_ERROR))); EXPECT_CALL(*crypto_session_, LoadUsageEntry(1, kUsageEntry)); - EXPECT_CALL(*crypto_session_, MoveUsageEntry(0)).WillOnce(Return(NO_ERROR)); + EXPECT_CALL(*crypto_session_, MoveUsageEntry(0)) + .WillOnce(Return(CdmResponseType(NO_ERROR))); EXPECT_CALL(*crypto_session_, UpdateUsageEntry(NotNull(), NotNull())) .WillOnce(DoAll(SetArgPointee<0>(kAnotherUsageTableHeader), - SetArgPointee<1>(kUsageEntry), Return(NO_ERROR))); + SetArgPointee<1>(kUsageEntry), + Return(CdmResponseType(NO_ERROR)))); EXPECT_CALL( *device_files_, StoreUsageTableInfo(kAnotherUsageTableHeader, @@ -3476,7 +3511,8 @@ TEST_F(UsageTableHeaderTest, InvalidateEntry_ShrinkFails) { // entry being in use. EXPECT_CALL(*crypto_session_, ShrinkUsageTableHeader(kLevelDefault, 1, NotNull())) - .WillOnce(Return(SHRINK_USAGE_TABLE_HEADER_ENTRY_IN_USE)); + .WillOnce( + Return(CdmResponseType(SHRINK_USAGE_TABLE_HEADER_ENTRY_IN_USE))); EXPECT_EQ(NO_ERROR, usage_table_header_->InvalidateEntry( usage_entry_number_to_be_deleted, true, device_files_, @@ -3497,7 +3533,7 @@ TEST_F(UsageTableHeaderTest, InvalidateEntry_ShrinkFails) { // c. Call to move will fail with MOVE_USAGE_ENTRY_DESTINATION_IN_USE. // d. Usage table will be resized. // e. Updated table will be saved. -// f. InvalidateEntry() will return NO_ERROR. +// f. InvalidateEntry() will return CdmResponseType(NO_ERROR). // // Storage type Usage entries // at start at end @@ -3541,17 +3577,19 @@ TEST_F(UsageTableHeaderTest, InvalidateEntry_DestinationInUse_OnMove) { RetrieveLicense(kUsageEntryInfoOfflineLicense1.key_set_id, NotNull(), NotNull())) .WillOnce(DoAll(SetArgPointee<1>(offline_license_1_data), Return(true))); - EXPECT_CALL(*crypto_session_, Open(kLevelDefault)).WillOnce(Return(NO_ERROR)); + EXPECT_CALL(*crypto_session_, Open(kLevelDefault)) + .WillOnce(Return(CdmResponseType(NO_ERROR))); EXPECT_CALL(*crypto_session_, LoadUsageEntry(1, kUsageEntry)); EXPECT_CALL(*crypto_session_, MoveUsageEntry(0)) - .WillOnce(Return(MOVE_USAGE_ENTRY_DESTINATION_IN_USE)); + .WillOnce(Return(CdmResponseType(MOVE_USAGE_ENTRY_DESTINATION_IN_USE))); // No expectations for updating the entry or the header from the move // operation. // Shrink table down to the last valid entry. EXPECT_CALL(*crypto_session_, ShrinkUsageTableHeader(kLevelDefault, 2, NotNull())) - .WillOnce(DoAll(SetArgPointee<2>(kAnotherUsageEntry), Return(NO_ERROR))); + .WillOnce(DoAll(SetArgPointee<2>(kAnotherUsageEntry), + Return(CdmResponseType(NO_ERROR)))); EXPECT_CALL(*device_files_, StoreUsageTableInfo(kAnotherUsageEntry, ElementsAre(kUsageEntryInfoStorageTypeUnknown, @@ -3577,7 +3615,8 @@ TEST_F(UsageTableHeaderTest, StaleHeader) { EXPECT_CALL(*crypto_session_, GetNumberOfOpenSessions(kLevelDefault, NotNull())) - .WillRepeatedly(DoAll(SetArgPointee<1>(0), Return(NO_ERROR))); + .WillRepeatedly( + DoAll(SetArgPointee<1>(0), Return(CdmResponseType(NO_ERROR)))); EXPECT_CALL(*device_files_, RetrieveUsageTableInfo(NotNull(), NotNull(), NotNull())) .WillOnce(DoAll(SetArgPointee<0>(kUsageTableHeader), @@ -3585,12 +3624,12 @@ TEST_F(UsageTableHeaderTest, StaleHeader) { SetArgPointee<2>(false), Return(true))); EXPECT_CALL(*crypto_session_, LoadUsageTableHeader(kLevelDefault, kUsageTableHeader)) - .WillOnce(Return(LOAD_USAGE_HEADER_GENERATION_SKEW)); + .WillOnce(Return(CdmResponseType(LOAD_USAGE_HEADER_GENERATION_SKEW))); ExpectToDeleteUsageTableFiles(); EXPECT_CALL(*crypto_session_, CreateUsageTableHeader(kLevelDefault, NotNull())) - .WillOnce( - DoAll(SetArgPointee<1>(kAnotherUsageTableHeader), Return(NO_ERROR))); + .WillOnce(DoAll(SetArgPointee<1>(kAnotherUsageTableHeader), + Return(CdmResponseType(NO_ERROR)))); EXPECT_CALL(*device_files_, StoreUsageTableInfo(kAnotherUsageTableHeader, kEmptyUsageEntryInfoVector)) .WillOnce(Return(true)); @@ -3611,7 +3650,8 @@ TEST_F(UsageTableHeaderTest, Shrink_NoneOfTable) { .Times(0); EXPECT_CALL(*device_files_, StoreUsageTableInfo(_, _)).Times(0); - EXPECT_EQ(usage_table_header_->Shrink(&metrics, 0), NO_ERROR); + EXPECT_EQ(usage_table_header_->Shrink(&metrics, 0), + CdmResponseType(NO_ERROR)); } // Shrink some of the table, but not all of it. @@ -3627,12 +3667,13 @@ TEST_F(UsageTableHeaderTest, Shrink_PartOfTable) { ShrinkUsageTableHeader( kLevelDefault, static_cast(shrunken_entries.size()), NotNull())) - .WillOnce(Return(NO_ERROR)); + .WillOnce(Return(CdmResponseType(NO_ERROR))); EXPECT_CALL(*device_files_, StoreUsageTableInfo(kUsageTableHeader, shrunken_entries)) .WillOnce(Return(true)); - EXPECT_EQ(usage_table_header_->Shrink(&metrics, to_shink), NO_ERROR); + EXPECT_EQ(usage_table_header_->Shrink(&metrics, to_shink), + CdmResponseType(NO_ERROR)); } // Shrink all of the table, no entries left. @@ -3642,7 +3683,7 @@ TEST_F(UsageTableHeaderTest, Shrink_AllOfTable) { EXPECT_CALL(*crypto_session_, ShrinkUsageTableHeader(kLevelDefault, 0, NotNull())) - .WillOnce(Return(NO_ERROR)); + .WillOnce(Return(CdmResponseType(NO_ERROR))); EXPECT_CALL(*device_files_, StoreUsageTableInfo(kUsageTableHeader, kEmptyUsageEntryInfoVector)) .WillOnce(Return(true)); @@ -3650,7 +3691,7 @@ TEST_F(UsageTableHeaderTest, Shrink_AllOfTable) { EXPECT_EQ( usage_table_header_->Shrink( &metrics, static_cast(k10UsageEntryInfoVector.size())), - NO_ERROR); + CdmResponseType(NO_ERROR)); } // Request to shrink more entries than there are in the table; should remove @@ -3660,7 +3701,7 @@ TEST_F(UsageTableHeaderTest, Shrink_MoreThanTable) { metrics::CryptoMetrics metrics; EXPECT_CALL(*crypto_session_, ShrinkUsageTableHeader(kLevelDefault, 0, NotNull())) - .WillOnce(Return(NO_ERROR)); + .WillOnce(Return(CdmResponseType(NO_ERROR))); EXPECT_CALL(*device_files_, StoreUsageTableInfo(kUsageTableHeader, kEmptyUsageEntryInfoVector)) .WillOnce(Return(true)); @@ -3668,7 +3709,7 @@ TEST_F(UsageTableHeaderTest, Shrink_MoreThanTable) { EXPECT_EQ( usage_table_header_->Shrink( &metrics, static_cast(k10UsageEntryInfoVector.size()) + 10), - NO_ERROR); + CdmResponseType(NO_ERROR)); } // LRU Usage Table Upgrade Test @@ -3680,7 +3721,8 @@ TEST_F(UsageTableHeaderTest, Shrink_MoreThanTable) { TEST_F(UsageTableHeaderTest, LruUsageTableUpgrade_NoAction) { EXPECT_CALL(*crypto_session_, GetNumberOfOpenSessions(kLevelDefault, NotNull())) - .WillRepeatedly(DoAll(SetArgPointee<1>(0), Return(NO_ERROR))); + .WillRepeatedly( + DoAll(SetArgPointee<1>(0), Return(CdmResponseType(NO_ERROR)))); EXPECT_CALL(*device_files_, RetrieveUsageTableInfo(NotNull(), NotNull(), NotNull())) .WillOnce(DoAll(SetArgPointee<0>(kUpgradableUsageTableHeader), @@ -3689,7 +3731,7 @@ TEST_F(UsageTableHeaderTest, LruUsageTableUpgrade_NoAction) { Return(true))); EXPECT_CALL(*crypto_session_, LoadUsageTableHeader(kLevelDefault, kUpgradableUsageTableHeader)) - .WillOnce(Return(NO_ERROR)); + .WillOnce(Return(CdmResponseType(NO_ERROR))); // These function are called specifically by the LRU upgrading system. EXPECT_CALL(*device_files_, RetrieveLicense(_, _, _)).Times(0); @@ -3710,7 +3752,8 @@ TEST_F(UsageTableHeaderTest, LruUsageTableUpgrade_NoAction) { TEST_F(UsageTableHeaderTest, LruUsageTableUpgrade_Succeed) { EXPECT_CALL(*crypto_session_, GetNumberOfOpenSessions(kLevelDefault, NotNull())) - .WillRepeatedly(DoAll(SetArgPointee<1>(0), Return(NO_ERROR))); + .WillRepeatedly( + DoAll(SetArgPointee<1>(0), Return(CdmResponseType(NO_ERROR)))); EXPECT_CALL(*device_files_, RetrieveUsageTableInfo(NotNull(), NotNull(), NotNull())) .WillOnce(DoAll(SetArgPointee<0>(kUpgradableUsageTableHeader), @@ -3719,7 +3762,7 @@ TEST_F(UsageTableHeaderTest, LruUsageTableUpgrade_Succeed) { Return(true))); EXPECT_CALL(*crypto_session_, LoadUsageTableHeader(kLevelDefault, kUpgradableUsageTableHeader)) - .WillOnce(Return(NO_ERROR)); + .WillOnce(Return(CdmResponseType(NO_ERROR))); for (size_t i = 0; i < kUpgradableUsageEntryInfoList.size(); ++i) { const CdmUsageEntryInfo& info = kUpgradableUsageEntryInfoList[i]; @@ -3779,7 +3822,8 @@ TEST_F(UsageTableHeaderTest, // Load table expectations. EXPECT_CALL(*crypto_session_, GetNumberOfOpenSessions(kLevelDefault, NotNull())) - .WillRepeatedly(DoAll(SetArgPointee<1>(0), Return(NO_ERROR))); + .WillRepeatedly( + DoAll(SetArgPointee<1>(0), Return(CdmResponseType(NO_ERROR)))); EXPECT_CALL(*device_files_, RetrieveUsageTableInfo(NotNull(), NotNull(), NotNull())) .WillOnce(DoAll(SetArgPointee<0>(kUpgradableUsageTableHeader), @@ -3788,7 +3832,7 @@ TEST_F(UsageTableHeaderTest, Return(true))); EXPECT_CALL(*crypto_session_, LoadUsageTableHeader(kLevelDefault, kUpgradableUsageTableHeader)) - .WillOnce(Return(NO_ERROR)); + .WillOnce(Return(CdmResponseType(NO_ERROR))); // Expectations of the one successful license. EXPECT_CALL(*device_files_, @@ -3842,7 +3886,8 @@ TEST_F(UsageTableHeaderTest, EXPECT_CALL(*crypto_session_, GetNumberOfOpenSessions(kLevelDefault, NotNull())) - .WillRepeatedly(DoAll(SetArgPointee<1>(0), Return(NO_ERROR))); + .WillRepeatedly( + DoAll(SetArgPointee<1>(0), Return(CdmResponseType(NO_ERROR)))); EXPECT_CALL(*device_files_, RetrieveUsageTableInfo(NotNull(), NotNull(), NotNull())) .WillOnce(DoAll(SetArgPointee<0>(kUpgradableUsageTableHeader), @@ -3851,7 +3896,7 @@ TEST_F(UsageTableHeaderTest, Return(true))); EXPECT_CALL(*crypto_session_, LoadUsageTableHeader(kLevelDefault, kUpgradableUsageTableHeader)) - .WillOnce(Return(NO_ERROR)); + .WillOnce(Return(CdmResponseType(NO_ERROR))); for (size_t i = 0; i < kUpgradableUsageEntryInfoList.size(); ++i) { const CdmUsageEntryInfo& info = kUpgradableUsageEntryInfoList[i]; @@ -3900,7 +3945,8 @@ TEST_F(UsageTableHeaderTest, TEST_F(UsageTableHeaderTest, LruUsageTableUpgrade_AllFailure) { EXPECT_CALL(*crypto_session_, GetNumberOfOpenSessions(kLevelDefault, NotNull())) - .WillRepeatedly(DoAll(SetArgPointee<1>(0), Return(NO_ERROR))); + .WillRepeatedly( + DoAll(SetArgPointee<1>(0), Return(CdmResponseType(NO_ERROR)))); EXPECT_CALL(*device_files_, RetrieveUsageTableInfo(NotNull(), NotNull(), NotNull())) .WillOnce(DoAll(SetArgPointee<0>(kUpgradableUsageTableHeader), @@ -3909,7 +3955,7 @@ TEST_F(UsageTableHeaderTest, LruUsageTableUpgrade_AllFailure) { Return(true))); EXPECT_CALL(*crypto_session_, LoadUsageTableHeader(kLevelDefault, kUpgradableUsageTableHeader)) - .WillOnce(Return(NO_ERROR)); + .WillOnce(Return(CdmResponseType(NO_ERROR))); for (size_t i = 0; i < kUpgradableUsageEntryInfoList.size(); ++i) { const CdmUsageEntryInfo& info = kUpgradableUsageEntryInfoList[i]; @@ -3933,7 +3979,8 @@ TEST_F(UsageTableHeaderTest, LruUsageTableUpgrade_AllFailure) { ExpectToDeleteUsageTableFiles(); EXPECT_CALL(*crypto_session_, CreateUsageTableHeader(kLevelDefault, NotNull())) - .WillOnce(DoAll(SetArgPointee<1>(kUsageTableHeader), Return(NO_ERROR))); + .WillOnce(DoAll(SetArgPointee<1>(kUsageTableHeader), + Return(CdmResponseType(NO_ERROR)))); EXPECT_CALL(*device_files_, StoreUsageTableInfo(kUsageTableHeader, kEmptyUsageEntryInfoVector)) .WillOnce(Return(true)); @@ -3958,13 +4005,13 @@ TEST_F(UsageTableHeaderTest, LruLastUsedTime_CreateLicenseEntry) { // AddKey expectations EXPECT_CALL(*crypto_session_, CreateUsageEntry(NotNull())) .WillOnce(DoAll(SetArgPointee<0>(expected_usage_entry_number), - Return(NO_ERROR))); + Return(CdmResponseType(NO_ERROR)))); MockClock mock_clock; usage_table_header_->SetClock(&mock_clock); EXPECT_CALL(mock_clock, GetCurrentTime()).WillOnce(Return(kLruBaseTime)); EXPECT_CALL(*crypto_session_, UpdateUsageEntry(NotNull(), NotNull())) - .WillOnce( - DoAll(SetArgPointee<0>(kAnotherUsageTableHeader), Return(NO_ERROR))); + .WillOnce(DoAll(SetArgPointee<0>(kAnotherUsageTableHeader), + Return(CdmResponseType(NO_ERROR)))); EXPECT_CALL(*device_files_, StoreUsageTableInfo(kAnotherUsageTableHeader, _)); // The Call. @@ -3997,13 +4044,13 @@ TEST_F(UsageTableHeaderTest, LruLastUsedTime_CreateUsageInfoEntry) { // AddKey expectations EXPECT_CALL(*crypto_session_, CreateUsageEntry(NotNull())) .WillOnce(DoAll(SetArgPointee<0>(expected_usage_entry_number), - Return(NO_ERROR))); + Return(CdmResponseType(NO_ERROR)))); MockClock mock_clock; usage_table_header_->SetClock(&mock_clock); EXPECT_CALL(mock_clock, GetCurrentTime()).WillOnce(Return(kLruBaseTime)); EXPECT_CALL(*crypto_session_, UpdateUsageEntry(NotNull(), NotNull())) - .WillOnce( - DoAll(SetArgPointee<0>(kAnotherUsageTableHeader), Return(NO_ERROR))); + .WillOnce(DoAll(SetArgPointee<0>(kAnotherUsageTableHeader), + Return(CdmResponseType(NO_ERROR)))); EXPECT_CALL(*device_files_, StoreUsageTableInfo(kAnotherUsageTableHeader, _)); // The Call. @@ -4037,7 +4084,7 @@ TEST_F(UsageTableHeaderTest, LruLastUsedTime_UpdateEntry) { // Update expectations EXPECT_CALL(*crypto_session_, UpdateUsageEntry(NotNull(), NotNull())) - .WillOnce(Return(NO_ERROR)); + .WillOnce(Return(CdmResponseType(NO_ERROR))); EXPECT_CALL(mock_clock, GetCurrentTime()) .WillOnce(Return(expected_update_time)); EXPECT_CALL(*device_files_, @@ -4071,7 +4118,7 @@ TEST_F(UsageTableHeaderTest, LruLastUsedTime_LoadEntry) { // Update expectations EXPECT_CALL(*crypto_session_, LoadUsageEntry(usage_entry_number, _)) - .WillOnce(Return(NO_ERROR)); + .WillOnce(Return(CdmResponseType(NO_ERROR))); EXPECT_CALL(mock_clock, GetCurrentTime()) .WillOnce(Return(expected_update_time)); diff --git a/libwvdrmengine/cdm/metrics/src/attribute_handler.cpp b/libwvdrmengine/cdm/metrics/src/attribute_handler.cpp index a435e0df..39650c5a 100644 --- a/libwvdrmengine/cdm/metrics/src/attribute_handler.cpp +++ b/libwvdrmengine/cdm/metrics/src/attribute_handler.cpp @@ -20,6 +20,13 @@ template <> void SetAttributeField(const CdmResponseType& cdm_error, drm_metrics::Attributes* attributes) { + attributes->set_error_code(cdm_error.Enum()); +} + +template <> +void SetAttributeField(const CdmResponseEnum& cdm_error, + drm_metrics::Attributes* attributes) { attributes->set_error_code(cdm_error); } diff --git a/libwvdrmengine/cdm/metrics/test/metrics_collections_unittest.cpp b/libwvdrmengine/cdm/metrics/test/metrics_collections_unittest.cpp index b3931e60..077e6b4f 100644 --- a/libwvdrmengine/cdm/metrics/test/metrics_collections_unittest.cpp +++ b/libwvdrmengine/cdm/metrics/test/metrics_collections_unittest.cpp @@ -31,32 +31,42 @@ TEST_F(EngineMetricsTest, AllEngineMetrics) { EngineMetrics engine_metrics; // Set some values in all of the engine metrics. - engine_metrics.cdm_engine_add_key_.Record(1.0, KEY_ADDED, + engine_metrics.cdm_engine_add_key_.Record(1.0, CdmResponseType(KEY_ADDED), kLicenseTypeRelease); - engine_metrics.cdm_engine_close_session_.Increment(NO_ERROR); - engine_metrics.cdm_engine_decrypt_.Record(1.0, NO_ERROR, + engine_metrics.cdm_engine_close_session_.Increment(CdmResponseType(NO_ERROR)); + engine_metrics.cdm_engine_decrypt_.Record(1.0, CdmResponseType(NO_ERROR), metrics::Pow2Bucket(8)); engine_metrics.cdm_engine_find_session_for_key_.Increment(false); - engine_metrics.cdm_engine_generate_key_request_.Record(1.0, NO_ERROR, - kLicenseTypeRelease); - engine_metrics.cdm_engine_get_provisioning_request_.Record(1.0, NO_ERROR); - engine_metrics.cdm_engine_get_usage_info_.Record(1.0, NO_ERROR, - UNKNOWN_ERROR); - engine_metrics.cdm_engine_handle_provisioning_response_.Record(1.0, NO_ERROR); - engine_metrics.cdm_engine_open_key_set_session_.Increment(NO_ERROR); - engine_metrics.cdm_engine_open_session_.Increment(NO_ERROR); - engine_metrics.cdm_engine_query_key_status_.Record(1.0, NO_ERROR); - engine_metrics.cdm_engine_release_all_usage_info_.Increment(NO_ERROR); - engine_metrics.cdm_engine_release_usage_info_.Increment(NO_ERROR); - engine_metrics.cdm_engine_remove_keys_.Increment(NO_ERROR); - engine_metrics.cdm_engine_restore_key_.Record(1.0, NO_ERROR); - engine_metrics.cdm_engine_unprovision_.Increment(NO_ERROR, kSecurityLevelL1); + engine_metrics.cdm_engine_generate_key_request_.Record( + 1.0, CdmResponseType(NO_ERROR), kLicenseTypeRelease); + engine_metrics.cdm_engine_get_provisioning_request_.Record( + 1.0, CdmResponseType(NO_ERROR)); + engine_metrics.cdm_engine_get_usage_info_.Record( + 1.0, CdmResponseType(NO_ERROR), UNKNOWN_ERROR); + engine_metrics.cdm_engine_handle_provisioning_response_.Record( + 1.0, CdmResponseType(NO_ERROR)); + engine_metrics.cdm_engine_open_key_set_session_.Increment( + CdmResponseType(NO_ERROR)); + engine_metrics.cdm_engine_open_session_.Increment(CdmResponseType(NO_ERROR)); + engine_metrics.cdm_engine_query_key_status_.Record(1.0, + CdmResponseType(NO_ERROR)); + engine_metrics.cdm_engine_release_all_usage_info_.Increment( + CdmResponseType(NO_ERROR)); + engine_metrics.cdm_engine_release_usage_info_.Increment( + CdmResponseType(NO_ERROR)); + engine_metrics.cdm_engine_remove_keys_.Increment(CdmResponseType(NO_ERROR)); + engine_metrics.cdm_engine_restore_key_.Record(1.0, CdmResponseType(NO_ERROR)); + engine_metrics.cdm_engine_unprovision_.Increment(CdmResponseType(NO_ERROR), + kSecurityLevelL1); engine_metrics.SetAppPackageName("test package name"); engine_metrics.cdm_engine_cdm_version_.Record("test cdm version"); engine_metrics.cdm_engine_creation_time_millis_.Record(100); - engine_metrics.cdm_engine_get_secure_stop_ids_.Increment(UNKNOWN_ERROR); - engine_metrics.cdm_engine_remove_all_usage_info_.Increment(UNKNOWN_ERROR); - engine_metrics.cdm_engine_remove_usage_info_.Increment(UNKNOWN_ERROR); + engine_metrics.cdm_engine_get_secure_stop_ids_.Increment( + CdmResponseType(UNKNOWN_ERROR)); + engine_metrics.cdm_engine_remove_all_usage_info_.Increment( + CdmResponseType(UNKNOWN_ERROR)); + engine_metrics.cdm_engine_remove_usage_info_.Increment( + CdmResponseType(UNKNOWN_ERROR)); // Also set and serialize the oemcrypto dynamic adapter metrics. OemCryptoDynamicAdapterMetrics adapter_metrics; @@ -110,14 +120,17 @@ TEST_F(EngineMetricsTest, EngineAndCryptoMetrics) { EngineMetrics engine_metrics; // Set some values in some of the engine metrics and some crypto metrics. - engine_metrics.cdm_engine_add_key_.Record(1.0, KEY_ADDED, + engine_metrics.cdm_engine_add_key_.Record(1.0, CdmResponseType(KEY_ADDED), kLicenseTypeRelease); - engine_metrics.cdm_engine_close_session_.Increment(UNKNOWN_ERROR); + engine_metrics.cdm_engine_close_session_.Increment( + CdmResponseType(UNKNOWN_ERROR)); CryptoMetrics* crypto_metrics = engine_metrics.GetCryptoMetrics(); - crypto_metrics->crypto_session_get_device_unique_id_.Increment(NO_ERROR); + crypto_metrics->crypto_session_get_device_unique_id_.Increment( + CdmResponseType(NO_ERROR)); crypto_metrics->crypto_session_generic_decrypt_.Record( - 2.0, NO_ERROR, Pow2Bucket(1025), kEncryptionAlgorithmAesCbc128); + 2.0, CdmResponseType(NO_ERROR), Pow2Bucket(1025), + kEncryptionAlgorithmAesCbc128); WvCdmMetrics actual_metrics; engine_metrics.Serialize(&actual_metrics); @@ -178,10 +191,11 @@ TEST_F(EngineMetricsTest, EngineMetricsWithSessions) { EngineMetrics engine_metrics; // Set a values in an engine metric and in a crypto metric. - engine_metrics.cdm_engine_add_key_.Record(1.0, KEY_ADDED, + engine_metrics.cdm_engine_add_key_.Record(1.0, CdmResponseType(KEY_ADDED), kLicenseTypeRelease); engine_metrics.GetCryptoMetrics() - ->crypto_session_load_certificate_private_key_.Record(2.0, NO_ERROR); + ->crypto_session_load_certificate_private_key_.Record( + 2.0, CdmResponseType(NO_ERROR)); // Create two sessions and record some metrics. std::shared_ptr session_metrics_1 = @@ -192,7 +206,8 @@ TEST_F(EngineMetricsTest, EngineMetricsWithSessions) { session_metrics_2->SetSessionId(kSessionId2); // Record a CryptoMetrics metric in the session. session_metrics_2->GetCryptoMetrics()->crypto_session_generic_decrypt_.Record( - 2.0, NO_ERROR, Pow2Bucket(1025), kEncryptionAlgorithmAesCbc128); + 2.0, CdmResponseType(NO_ERROR), Pow2Bucket(1025), + kEncryptionAlgorithmAesCbc128); WvCdmMetrics actual_metrics; engine_metrics.Serialize(&actual_metrics); @@ -271,11 +286,13 @@ TEST_F(SessionMetricsTest, AllSessionMetrics) { SessionMetrics session_metrics; session_metrics.SetSessionId(kSessionId1); session_metrics.cdm_session_life_span_.Record(1.0); - session_metrics.cdm_session_renew_key_.Record(1.0, NO_ERROR); + session_metrics.cdm_session_renew_key_.Record(1.0, CdmResponseType(NO_ERROR)); session_metrics.cdm_session_restore_offline_session_.Increment( - NO_ERROR, DeviceFiles::ResponseType::kObjectNotInitialized); + CdmResponseType(NO_ERROR), + DeviceFiles::ResponseType::kObjectNotInitialized); session_metrics.cdm_session_restore_usage_session_.Increment( - NO_ERROR, DeviceFiles::ResponseType::kObjectNotInitialized); + CdmResponseType(NO_ERROR), + DeviceFiles::ResponseType::kObjectNotInitialized); session_metrics.cdm_session_license_request_latency_ms_.Record( 2.0, kKeyRequestTypeInitial); session_metrics.oemcrypto_build_info_.Record("test build info"); @@ -286,7 +303,8 @@ TEST_F(SessionMetricsTest, AllSessionMetrics) { // Record a CryptoMetrics metric in the session. session_metrics.GetCryptoMetrics()->crypto_session_generic_decrypt_.Record( - 2.0, NO_ERROR, Pow2Bucket(1025), kEncryptionAlgorithmAesCbc128); + 2.0, CdmResponseType(NO_ERROR), Pow2Bucket(1025), + kEncryptionAlgorithmAesCbc128); WvCdmMetrics::SessionMetrics actual; session_metrics.Serialize(&actual); @@ -327,33 +345,45 @@ TEST_F(CryptoMetricsTest, AllCryptoMetrics) { CryptoMetrics crypto_metrics; // Crypto session metrics. - crypto_metrics.crypto_session_delete_all_usage_reports_.Increment(NO_ERROR); + crypto_metrics.crypto_session_delete_all_usage_reports_.Increment( + CdmResponseType(NO_ERROR)); crypto_metrics.crypto_session_delete_multiple_usage_information_.Increment( - NO_ERROR); + CdmResponseType(NO_ERROR)); crypto_metrics.crypto_session_generic_decrypt_.Record( - 2.0, NO_ERROR, Pow2Bucket(1025), kEncryptionAlgorithmAesCbc128); + 2.0, CdmResponseType(NO_ERROR), Pow2Bucket(1025), + kEncryptionAlgorithmAesCbc128); crypto_metrics.crypto_session_generic_encrypt_.Record( - 2.0, NO_ERROR, Pow2Bucket(1025), kEncryptionAlgorithmAesCbc128); + 2.0, CdmResponseType(NO_ERROR), Pow2Bucket(1025), + kEncryptionAlgorithmAesCbc128); crypto_metrics.crypto_session_generic_sign_.Record( - 2.0, NO_ERROR, Pow2Bucket(1025), kSigningAlgorithmHmacSha256); + 2.0, CdmResponseType(NO_ERROR), Pow2Bucket(1025), + kSigningAlgorithmHmacSha256); crypto_metrics.crypto_session_generic_verify_.Record( - 2.0, NO_ERROR, Pow2Bucket(1025), kSigningAlgorithmHmacSha256); - crypto_metrics.crypto_session_get_device_unique_id_.Increment(NO_ERROR); - crypto_metrics.crypto_session_get_token_.Increment(NO_ERROR); + 2.0, CdmResponseType(NO_ERROR), Pow2Bucket(1025), + kSigningAlgorithmHmacSha256); + crypto_metrics.crypto_session_get_device_unique_id_.Increment( + CdmResponseType(NO_ERROR)); + crypto_metrics.crypto_session_get_token_.Increment(CdmResponseType(NO_ERROR)); crypto_metrics.crypto_session_life_span_.Record(1.0); - crypto_metrics.crypto_session_load_certificate_private_key_.Record(1.0, - NO_ERROR); - crypto_metrics.crypto_session_open_.Record(1.0, NO_ERROR, kLevelDefault); - crypto_metrics.crypto_session_update_usage_information_.Record(1.0, NO_ERROR); + crypto_metrics.crypto_session_load_certificate_private_key_.Record( + 1.0, CdmResponseType(NO_ERROR)); + crypto_metrics.crypto_session_open_.Record(1.0, CdmResponseType(NO_ERROR), + kLevelDefault); + crypto_metrics.crypto_session_update_usage_information_.Record( + 1.0, CdmResponseType(NO_ERROR)); crypto_metrics.crypto_session_usage_information_support_.Record(true); crypto_metrics.crypto_session_security_level_.Record(kSecurityLevelL2); // Usage table header metrics. crypto_metrics.usage_table_header_initial_size_.Record(200); - crypto_metrics.usage_table_header_add_entry_.Increment(UNKNOWN_ERROR); - crypto_metrics.usage_table_header_delete_entry_.Increment(UNKNOWN_ERROR); - crypto_metrics.usage_table_header_update_entry_.Record(2.0, UNKNOWN_ERROR); - crypto_metrics.usage_table_header_load_entry_.Increment(UNKNOWN_ERROR); + crypto_metrics.usage_table_header_add_entry_.Increment( + CdmResponseType(UNKNOWN_ERROR)); + crypto_metrics.usage_table_header_delete_entry_.Increment( + CdmResponseType(UNKNOWN_ERROR)); + crypto_metrics.usage_table_header_update_entry_.Record( + 2.0, CdmResponseType(UNKNOWN_ERROR)); + crypto_metrics.usage_table_header_load_entry_.Increment( + CdmResponseType(UNKNOWN_ERROR)); // Usage table LRU metrics. crypto_metrics.usage_table_header_lru_usage_info_count_.Record(150); crypto_metrics.usage_table_header_lru_offline_license_count_.Record(50); diff --git a/libwvdrmengine/cdm/src/wv_content_decryption_module.cpp b/libwvdrmengine/cdm/src/wv_content_decryption_module.cpp index a0f6edae..fcc1fb0c 100644 --- a/libwvdrmengine/cdm/src/wv_content_decryption_module.cpp +++ b/libwvdrmengine/cdm/src/wv_content_decryption_module.cpp @@ -85,7 +85,7 @@ CdmResponseType WvContentDecryptionModule::CloseSession( LOGV("Closing session ID: %s", session_id.c_str()); CdmEngine* cdm_engine = GetCdmForSessionId(session_id); // TODO(rfrias): Avoid reusing the error codes from CdmEngine. - if (!cdm_engine) return SESSION_NOT_FOUND_1; + if (!cdm_engine) return CdmResponseType(SESSION_NOT_FOUND_1); const CdmResponseType sts = cdm_engine->CloseSession(session_id); if (sts == NO_ERROR) { std::unique_lock auto_lock(cdms_lock_); @@ -145,7 +145,7 @@ CdmResponseType WvContentDecryptionModule::AddKey( CdmKeySetId* key_set_id) { CdmEngine* cdm_engine = session_id.empty() ? GetCdmForSessionId(*key_set_id) : GetCdmForSessionId(session_id); - if (!cdm_engine) return SESSION_NOT_FOUND_3; + if (!cdm_engine) return CdmResponseType(SESSION_NOT_FOUND_3); // Save key_set_id, as CDM will return an empty key_set_id on release CdmKeySetId release_key_set_id; if (session_id.empty() && key_set_id != nullptr) { @@ -166,7 +166,7 @@ CdmResponseType WvContentDecryptionModule::AddKey( CdmResponseType WvContentDecryptionModule::RestoreKey( const CdmSessionId& session_id, const CdmKeySetId& key_set_id) { CdmEngine* cdm_engine = GetCdmForSessionId(session_id); - if (!cdm_engine) return SESSION_NOT_FOUND_4; + if (!cdm_engine) return CdmResponseType(SESSION_NOT_FOUND_4); CdmResponseType sts; sts = cdm_engine->RestoreKey(session_id, key_set_id); return sts; @@ -175,7 +175,7 @@ CdmResponseType WvContentDecryptionModule::RestoreKey( CdmResponseType WvContentDecryptionModule::RemoveKeys( const CdmSessionId& session_id) { CdmEngine* cdm_engine = GetCdmForSessionId(session_id); - if (!cdm_engine) return SESSION_NOT_FOUND_5; + if (!cdm_engine) return CdmResponseType(SESSION_NOT_FOUND_5); CdmResponseType sts = cdm_engine->RemoveKeys(session_id); return sts; } @@ -190,14 +190,14 @@ CdmResponseType WvContentDecryptionModule::QueryStatus( CdmResponseType WvContentDecryptionModule::QuerySessionStatus( const CdmSessionId& session_id, CdmQueryMap* key_info) { CdmEngine* cdm_engine = GetCdmForSessionId(session_id); - if (!cdm_engine) return SESSION_NOT_FOUND_8; + if (!cdm_engine) return CdmResponseType(SESSION_NOT_FOUND_8); return cdm_engine->QuerySessionStatus(session_id, key_info); } CdmResponseType WvContentDecryptionModule::QueryKeyStatus( const CdmSessionId& session_id, CdmQueryMap* key_info) { CdmEngine* cdm_engine = GetCdmForSessionId(session_id); - if (!cdm_engine) return SESSION_NOT_FOUND_9; + if (!cdm_engine) return CdmResponseType(SESSION_NOT_FOUND_9); CdmResponseType sts; sts = cdm_engine->QueryKeyStatus(session_id, key_info); return sts; @@ -206,7 +206,7 @@ CdmResponseType WvContentDecryptionModule::QueryKeyStatus( CdmResponseType WvContentDecryptionModule::QueryOemCryptoSessionId( const CdmSessionId& session_id, CdmQueryMap* response) { CdmEngine* cdm_engine = GetCdmForSessionId(session_id); - if (!cdm_engine) return SESSION_NOT_FOUND_10; + if (!cdm_engine) return CdmResponseType(SESSION_NOT_FOUND_10); return cdm_engine->QueryOemCryptoSessionId(session_id, response); } @@ -300,7 +300,7 @@ CdmResponseType WvContentDecryptionModule::GetSecureStopIds( std::vector* ssids) { if (ssids == nullptr) { LOGE("Secure stop IDs destination not provided"); - return PARAMETER_NULL; + return CdmResponseType(PARAMETER_NULL); } CdmEngine* cdm_engine = EnsureCdmForIdentifier(identifier); @@ -328,7 +328,7 @@ CdmResponseType WvContentDecryptionModule::DecryptV16( CdmEngine* cdm_engine = GetCdmForSessionId(session_id); if (!cdm_engine) { LOGE("Decrypt session ID not found: %s", session_id.c_str()); - return SESSION_NOT_FOUND_18; + return CdmResponseType(SESSION_NOT_FOUND_18); } CdmSessionId local_session_id = session_id; @@ -362,7 +362,7 @@ CdmResponseType WvContentDecryptionModule::DecryptV16( OEMCrypto_FirstSubsample && parameters.samples[0].subsamples[0].flags & OEMCrypto_LastSubsample))) { - return KEY_NOT_FOUND_IN_SESSION; + return CdmResponseType(KEY_NOT_FOUND_IN_SESSION); } } } @@ -388,7 +388,7 @@ bool WvContentDecryptionModule::IsValidServiceCertificate( CdmResponseType WvContentDecryptionModule::GetMetrics( std::vector* metrics, bool* full_list_returned) { if (!metrics || !full_list_returned) { - return PARAMETER_NULL; + return CdmResponseType(PARAMETER_NULL); } std::unique_lock auto_lock(cdms_lock_); for (auto& key_value_pair : cdms_) { @@ -399,7 +399,7 @@ CdmResponseType WvContentDecryptionModule::GetMetrics( metrics->push_back(metric); } else { LOGD("GetMetrics call failed: cdm identifier=%u, error=%d", - identifier.unique_id, status); + identifier.unique_id, status.Enum()); } } // With no streaming activities, |cdms_| size would be zero, @@ -410,13 +410,14 @@ CdmResponseType WvContentDecryptionModule::GetMetrics( // - metrics && cdms_ sizes can both be zero, returns NO_ERROR // - metrics size <= cdms_, returns NO_ERROR // - metrics is empty, but cdms_ is not, returns UNKNOWN_ERROR - return (metrics->empty() && !cdms_.empty()) ? UNKNOWN_ERROR : NO_ERROR; + return (metrics->empty() && !cdms_.empty()) ? CdmResponseType(UNKNOWN_ERROR) + : CdmResponseType(NO_ERROR); } CdmResponseType WvContentDecryptionModule::GetMetrics( const CdmIdentifier& identifier, drm_metrics::WvCdmMetrics* metrics) { if (!metrics) { - return PARAMETER_NULL; + return CdmResponseType(PARAMETER_NULL); } std::unique_lock auto_lock(cdms_lock_); return GetMetricsInternal(identifier, metrics); @@ -429,10 +430,11 @@ CdmResponseType WvContentDecryptionModule::GetMetricsInternal( if (it == cdms_.end()) { LOGE("Cdm Identifier not found"); // TODO(blueeyes): Add a better error. - return UNKNOWN_ERROR; + return CdmResponseType(UNKNOWN_ERROR); } - return it->second.cdm_engine->GetMetricsSnapshot(metrics) ? NO_ERROR - : UNKNOWN_ERROR; + return it->second.cdm_engine->GetMetricsSnapshot(metrics) + ? CdmResponseType(NO_ERROR) + : CdmResponseType(UNKNOWN_ERROR); } WvContentDecryptionModule::CdmInfo::CdmInfo() @@ -489,7 +491,7 @@ CdmResponseType WvContentDecryptionModule::CloseCdm( if (it == cdms_.end()) { LOGE("Cdm Identifier not found"); // TODO(blueeyes): Create a better error. - return UNKNOWN_ERROR; + return CdmResponseType(UNKNOWN_ERROR); } // Remove any sessions that point to this engine. for (auto session_it = cdm_by_session_id_.begin(); @@ -501,7 +503,7 @@ CdmResponseType WvContentDecryptionModule::CloseCdm( } } cdms_.erase(it); - return NO_ERROR; + return CdmResponseType(NO_ERROR); } CdmResponseType WvContentDecryptionModule::SetDebugIgnoreKeyboxCount( @@ -517,7 +519,7 @@ CdmResponseType WvContentDecryptionModule::SetDecryptHash( const std::string& hash_data, CdmSessionId* id) { if (id == nullptr) { LOGE("Cdm session ID not provided"); - return PARAMETER_NULL; + return CdmResponseType(PARAMETER_NULL); } uint32_t frame_number; @@ -531,7 +533,7 @@ CdmResponseType WvContentDecryptionModule::SetDecryptHash( if (!cdm_engine) { LOGE("Unable to find CdmEngine"); - return SESSION_NOT_FOUND_20; + return CdmResponseType(SESSION_NOT_FOUND_20); } res = cdm_engine->SetDecryptHash(*id, frame_number, hash); @@ -544,7 +546,7 @@ CdmResponseType WvContentDecryptionModule::GetDecryptHashError( if (!cdm_engine) { LOGE("Unable to find CdmEngine"); - return SESSION_NOT_FOUND_20; + return CdmResponseType(SESSION_NOT_FOUND_20); } return cdm_engine->GetDecryptHashError(session_id, hash_error_string); } @@ -641,17 +643,17 @@ CdmResponseType WvContentDecryptionModule::SetPlaybackId( LOGV("Setting session ID %s playback ID %s", session_id.c_str(), playback_id.c_str()); CdmEngine* cdm_engine = GetCdmForSessionId(session_id); - if (!cdm_engine) return SESSION_NOT_FOUND_23; + if (!cdm_engine) return CdmResponseType(SESSION_NOT_FOUND_23); return cdm_engine->SetPlaybackId(session_id, playback_id); } CdmResponseType WvContentDecryptionModule::GetSessionUserId( const CdmSessionId& session_id, uint32_t* user_id) { - if (!user_id) return PARAMETER_NULL; + if (!user_id) return CdmResponseType(PARAMETER_NULL); CdmEngine* cdm_engine = GetCdmForSessionId(session_id); - if (!cdm_engine) return SESSION_NOT_FOUND_23; + if (!cdm_engine) return CdmResponseType(SESSION_NOT_FOUND_23); *user_id = cdm_engine->GetUserId(); - return NO_ERROR; + return CdmResponseType(NO_ERROR); } bool WvContentDecryptionModule::SetDefaultOtaKeyboxFallbackDurationRules() { diff --git a/libwvdrmengine/cdm/test/cdm_extended_duration_test.cpp b/libwvdrmengine/cdm/test/cdm_extended_duration_test.cpp index 55d2874e..60b39708 100644 --- a/libwvdrmengine/cdm/test/cdm_extended_duration_test.cpp +++ b/libwvdrmengine/cdm/test/cdm_extended_duration_test.cpp @@ -343,7 +343,7 @@ class WvCdmExtendedDurationTest : public WvCdmTestBase { } void GenerateKeyRelease(CdmKeySetId key_set_id) { - GenerateKeyRelease(key_set_id, KEY_MESSAGE); + GenerateKeyRelease(key_set_id, CdmResponseType(KEY_MESSAGE)); } void LogResponseError(const std::string& message, int http_status_code) { @@ -456,7 +456,7 @@ class WvCdmExtendedDurationTest : public WvCdmTestBase { void Provision() { CdmResponseType status = decryptor_->OpenSession( config_.key_system(), nullptr, kDefaultCdmIdentifier, nullptr, &session_id_); - switch (status) { + switch (status.Enum()) { case NO_ERROR: decryptor_->CloseSession(session_id_); return; @@ -717,7 +717,9 @@ class WvCdmExtendedDurationTest : public WvCdmTestBase { } else if (level == QUERY_VALUE_SECURITY_LEVEL_L3) { security_level = kSecurityLevelL3; } else { + // common_typos_disable EXPECT_TRUE(false); + // common_typos_enable } return security_level; } @@ -937,7 +939,7 @@ TEST_F(WvCdmExtendedDurationTest, DecryptionCloseSessionConcurrencyTest) { nullptr, &session_id_); EXPECT_EQ(KEY_ADDED, decryptor_->RestoreKey(session_id_, key_set_id_)); - CdmResponseType status = NO_ERROR; + CdmResponseType status(NO_ERROR); struct timespec decrypt_delay; decrypt_delay.tv_sec = 0; decrypt_delay.tv_nsec = 10000000ll; // 10 ms @@ -966,7 +968,7 @@ TEST_F(WvCdmExtendedDurationTest, DecryptionCloseSessionConcurrencyTest) { status = decryptor_->Decrypt(session_id_, (data + i)->validate_key_id, decryption_parameters); - switch (status) { + switch (status.Enum()) { case SESSION_NOT_FOUND_FOR_DECRYPT: case SESSION_NOT_FOUND_18: // Session was closed before decrypt was called. This is expected @@ -976,7 +978,9 @@ TEST_F(WvCdmExtendedDurationTest, DecryptionCloseSessionConcurrencyTest) { EXPECT_EQ((data + i)->decrypt_data, decrypt_buffer); break; default: - EXPECT_TRUE(false) << " Unexpected decrypt result: " << status; + // common_typos_disable + EXPECT_TRUE(false) << " Unexpected decrypt result: " << status.Enum(); + // common_typos_enable } } } @@ -1315,7 +1319,7 @@ TEST_P(WvCdmOfflineUsageReportTest, UsageTest) { session_id_.clear(); decryptor_->OpenSession(config_.key_system(), nullptr, kDefaultCdmIdentifier, nullptr, &session_id_); - EXPECT_EQ(KEY_ADDED, decryptor_->RestoreKey(session_id_, key_set_id)); + EXPECT_EQ(wvcdm::KEY_ADDED, decryptor_->RestoreKey(session_id_, key_set_id)); // Query and validate usage information int64_t license_duration_remaining = 0; @@ -1377,7 +1381,7 @@ TEST_P(WvCdmOfflineUsageReportTest, UsageTest) { session_id_.clear(); decryptor_->OpenSession(config_.key_system(), nullptr, kDefaultCdmIdentifier, nullptr, &session_id_); - EXPECT_EQ(KEY_ADDED, decryptor_->RestoreKey(session_id_, key_set_id)); + EXPECT_EQ(wvcdm::KEY_ADDED, decryptor_->RestoreKey(session_id_, key_set_id)); // Query and validate usage information int64_t license_duration_remaining = 0; diff --git a/libwvdrmengine/cdm/test/cdm_feature_test.cpp b/libwvdrmengine/cdm/test/cdm_feature_test.cpp index 88d59e32..321a9113 100644 --- a/libwvdrmengine/cdm/test/cdm_feature_test.cpp +++ b/libwvdrmengine/cdm/test/cdm_feature_test.cpp @@ -325,7 +325,7 @@ class WvCdmFeatureTest : public WvCdmTestBase { CdmLicenseType license_type, CdmClientPropertySet* property_set) { std::string init_data_type = "video/mp4"; - GenerateKeyRequest(wvcdm::KEY_MESSAGE, init_data_type, init_data, + GenerateKeyRequest(CdmResponseType(KEY_MESSAGE), init_data_type, init_data, app_parameters, license_type, property_set); } @@ -561,7 +561,7 @@ TEST_P(WvCdmSrmNotSupportedTest, Srm) { SrmTestParameters* config = GetParam(); std::string str; - EXPECT_NE(wvcdm::NO_ERROR, + EXPECT_NE(NO_ERROR, decryptor_.QueryStatus(kLevelDefault, wvcdm::QUERY_KEY_CURRENT_SRM_VERSION, &str)); @@ -589,7 +589,7 @@ TEST_P(WvCdmSrmNotSupportedTest, Srm) { ConfigTestEnv::GetLicenseServerUrl(kContentProtectionStagingServer), config_.client_auth()); - EXPECT_NE(wvcdm::NO_ERROR, + EXPECT_NE(NO_ERROR, decryptor_.QueryStatus(kLevelDefault, wvcdm::QUERY_KEY_CURRENT_SRM_VERSION, &str)); diff --git a/libwvdrmengine/cdm/test/request_license_test.cpp b/libwvdrmengine/cdm/test/request_license_test.cpp index d354056b..c01981d4 100644 --- a/libwvdrmengine/cdm/test/request_license_test.cpp +++ b/libwvdrmengine/cdm/test/request_license_test.cpp @@ -1730,7 +1730,7 @@ class DecryptCallbackTester { decryption_parameters.is_encrypted = sub_sample_info_->is_encrypted; decryption_parameters.is_secure = sub_sample_info_->is_secure; decryption_parameters.subsample_flags = sub_sample_info_->subsample_flags; - EXPECT_EQ(NO_ERROR, + EXPECT_EQ(wvcdm::NO_ERROR, decryptor_->Decrypt(session_id, sub_sample_info_->validate_key_id, decryption_parameters)); } @@ -1791,8 +1791,9 @@ class WvCdmRequestLicenseTest : public WvCdmTestBase { CdmLicenseType license_type, const CdmIdentifier& identifier) { CdmAppParameterMap app_parameters; - GenerateKeyRequest(wvcdm::KEY_MESSAGE, "video/mp4", init_data, - app_parameters, license_type, identifier, nullptr); + GenerateKeyRequest(CdmResponseType(wvcdm::KEY_MESSAGE), "video/mp4", + init_data, app_parameters, license_type, identifier, + nullptr); } void GenerateKeyRequest(const std::string& init_data, @@ -1807,8 +1808,8 @@ class WvCdmRequestLicenseTest : public WvCdmTestBase { CdmLicenseType license_type, CdmClientPropertySet* property_set) { std::string init_data_type = "video/mp4"; - GenerateKeyRequest(wvcdm::KEY_MESSAGE, init_data_type, init_data, - app_parameters, license_type, property_set); + GenerateKeyRequest(CdmResponseType(wvcdm::KEY_MESSAGE), init_data_type, + init_data, app_parameters, license_type, property_set); } void GenerateKeyRequest(CdmResponseType expected_response, @@ -2040,8 +2041,8 @@ class WvCdmRequestLicenseTest : public WvCdmTestBase { void VerifyKeyRequestResponse(const std::string& server_url, const std::string& client_auth, bool is_usage, std::string* response) { - VerifyKeyRequestResponse(wvcdm::KEY_ADDED, server_url, client_auth, - is_usage, response); + VerifyKeyRequestResponse(CdmResponseType(wvcdm::KEY_ADDED), server_url, + client_auth, is_usage, response); } void VerifyKeyRequestResponse(CdmResponseType expected_response, @@ -2058,7 +2059,7 @@ class WvCdmRequestLicenseTest : public WvCdmTestBase { bool VerifyDecryption(const CdmSessionId& session_id, const SubSampleInfo& data) { - return VerifyDecryption(session_id, data, NO_ERROR); + return VerifyDecryption(session_id, data, CdmResponseType(wvcdm::NO_ERROR)); } bool VerifyDecryption(const CdmSessionId& session_id, @@ -2074,7 +2075,7 @@ class WvCdmRequestLicenseTest : public WvCdmTestBase { CdmResponseType status = decryptor_->Decrypt( session_id, data.validate_key_id, decryption_parameters); EXPECT_EQ(expected_response, status); - if (status != NO_ERROR) return false; + if (status != wvcdm::NO_ERROR) return false; bool result = std::equal(data.decrypt_data.begin(), data.decrypt_data.end(), decrypt_buffer.begin()); @@ -2083,9 +2084,9 @@ class WvCdmRequestLicenseTest : public WvCdmTestBase { } void Unprovision() { - EXPECT_EQ(NO_ERROR, + EXPECT_EQ(wvcdm::NO_ERROR, decryptor_->Unprovision(kSecurityLevelL1, kDefaultCdmIdentifier)); - EXPECT_EQ(NO_ERROR, + EXPECT_EQ(wvcdm::NO_ERROR, decryptor_->Unprovision(kSecurityLevelL3, kDefaultCdmIdentifier)); } @@ -2102,7 +2103,7 @@ class WvCdmRequestLicenseTest : public WvCdmTestBase { CdmResponseType status = decryptor_->OpenSession( config_.key_system(), property_set, identifier, nullptr, &session_id_); - if (status == NO_ERROR) { + if (status == wvcdm::NO_ERROR) { wvcdm::CdmAppParameterMap app_parameters; status = GenerateKeyRequest(ISO_BMFF_VIDEO_MIME_TYPE, binary_key_id(), app_parameters, kLicenseTypeStreaming, @@ -2111,14 +2112,14 @@ class WvCdmRequestLicenseTest : public WvCdmTestBase { decryptor_->CloseSession(session_id_); - switch (status) { - case NO_ERROR: + switch (status.Enum()) { + case wvcdm::NO_ERROR: case KEY_MESSAGE: return true; case NEED_PROVISIONING: return false; default: - EXPECT_EQ(NO_ERROR, status); + EXPECT_EQ(wvcdm::NO_ERROR, status); return false; } } @@ -2165,9 +2166,10 @@ class WvCdmRequestLicenseTest : public WvCdmTestBase { } std::string GetSecurityLevel(TestWvCdmClientPropertySet* property_set) { - EXPECT_EQ(NO_ERROR, decryptor_->OpenSession( - config_.key_system(), property_set, - kDefaultCdmIdentifier, nullptr, &session_id_)); + EXPECT_EQ( + wvcdm::NO_ERROR, + decryptor_->OpenSession(config_.key_system(), property_set, + kDefaultCdmIdentifier, nullptr, &session_id_)); CdmQueryMap query_info; EXPECT_EQ(wvcdm::NO_ERROR, decryptor_->QuerySessionStatus(session_id_, &query_info)); @@ -2334,7 +2336,7 @@ TEST_F(WvCdmRequestLicenseTest, L3ProvisioningTest) { TEST_F(WvCdmRequestLicenseTest, PerOriginProvisioningTest) { Unprovision(); - EXPECT_EQ(NO_ERROR, + EXPECT_EQ(wvcdm::NO_ERROR, decryptor_->Unprovision(kSecurityLevelL3, kExampleIdentifier)); Provision(); @@ -2344,7 +2346,7 @@ TEST_F(WvCdmRequestLicenseTest, PerOriginProvisioningTest) { kDefaultCdmIdentifier, nullptr, &session_id_)); CdmAppParameterMap app_parameters; - EXPECT_EQ(KEY_MESSAGE, + EXPECT_EQ(wvcdm::KEY_MESSAGE, GenerateKeyRequest(ISO_BMFF_VIDEO_MIME_TYPE, binary_key_id(), app_parameters, kLicenseTypeStreaming, kDefaultCdmIdentifier, nullptr)); @@ -2365,9 +2367,9 @@ TEST_F(WvCdmRequestLicenseTest, PerOriginProvisioningSupportsOldPaths) { ASSERT_EQ("com.example", kExampleIdentifier.origin); // Unprovision the device and delete all files. - EXPECT_EQ(NO_ERROR, + EXPECT_EQ(wvcdm::NO_ERROR, decryptor_->Unprovision(kSecurityLevelL3, kExampleIdentifier)); - EXPECT_EQ(NO_ERROR, + EXPECT_EQ(wvcdm::NO_ERROR, decryptor_->Unprovision(kSecurityLevelL3, kDefaultCdmIdentifier)); Provision(kExampleIdentifier, kLevel3); @@ -2402,7 +2404,7 @@ TEST_F(WvCdmRequestLicenseTest, UnprovisionTest) { handle.RetrieveCertificate(false, &certificate, &wrapped_private_key, &serial_number, &system_id)); - EXPECT_EQ(NO_ERROR, + EXPECT_EQ(wvcdm::NO_ERROR, decryptor_->Unprovision(security_level, kDefaultCdmIdentifier)); EXPECT_NE( DeviceFiles::kCertificateValid, @@ -2589,14 +2591,14 @@ TEST_F(WvCdmRequestLicenseTest, ProvisioningRevocationTest) { decryptor_->OpenSession(config_.key_system(), nullptr, kDefaultCdmIdentifier, nullptr, &session_id_); - switch (result) { - case NO_ERROR: + switch (result.Enum()) { + case wvcdm::NO_ERROR: decryptor_->CloseSession(session_id_); return; case NEED_PROVISIONING: break; default: - EXPECT_EQ(NO_ERROR, result); + EXPECT_EQ(wvcdm::NO_ERROR, result); return; } @@ -2697,9 +2699,9 @@ TEST_F(WvCdmRequestLicenseTest, ProvisioningRevocationTest) { // the specified CDM engine is provisioned only during the certificate's // validity period. TEST_F(WvCdmRequestLicenseTest, ProvisioningWithExpiringCertTest) { - EXPECT_EQ(NO_ERROR, + EXPECT_EQ(wvcdm::NO_ERROR, decryptor_->Unprovision(kSecurityLevelL1, kExampleIdentifier)); - EXPECT_EQ(NO_ERROR, + EXPECT_EQ(wvcdm::NO_ERROR, decryptor_->Unprovision(kSecurityLevelL3, kExampleIdentifier)); EXPECT_FALSE(IsProvisioned(kExampleIdentifier, kLevelDefault)); @@ -2759,23 +2761,25 @@ TEST_F(WvCdmRequestLicenseTest, PropertySetTest) { std::string provisioning_server; CdmCertificateType cert_type = kCertificateWidevine; std::string cert_authority, cert, wrapped_key; - EXPECT_EQ(NO_ERROR, decryptor_->GetProvisioningRequest( - cert_type, cert_authority, kDefaultCdmIdentifier, - kEmptyServiceCertificate, kLevel3, &key_msg_, - &provisioning_server)); + EXPECT_EQ(wvcdm::NO_ERROR, + decryptor_->GetProvisioningRequest( + cert_type, cert_authority, kDefaultCdmIdentifier, + kEmptyServiceCertificate, kLevel3, &key_msg_, + &provisioning_server)); EXPECT_THAT(provisioning_server, IsSimilarUrlTo(kDefaultProvisioningServerUrl)); std::string response = GetCertRequestResponse(config_.provisioning_server()); EXPECT_NE(0, static_cast(response.size())); - EXPECT_EQ(NO_ERROR, decryptor_->HandleProvisioningResponse( - kDefaultCdmIdentifier, response, kLevel3, &cert, - &wrapped_key)); - EXPECT_EQ(NO_ERROR, decryptor_->OpenSession( - config_.key_system(), &property_set_L3, - kDefaultCdmIdentifier, nullptr, &session_id_L3)); + EXPECT_EQ(wvcdm::NO_ERROR, decryptor_->HandleProvisioningResponse( + kDefaultCdmIdentifier, response, kLevel3, + &cert, &wrapped_key)); + EXPECT_EQ(wvcdm::NO_ERROR, + decryptor_->OpenSession(config_.key_system(), &property_set_L3, + kDefaultCdmIdentifier, nullptr, + &session_id_L3)); } else { - EXPECT_EQ(NO_ERROR, sts); + EXPECT_EQ(wvcdm::NO_ERROR, sts); } property_set_Ln.set_security_level(""); @@ -2946,9 +2950,9 @@ TEST_F(WvCdmRequestLicenseTest, StreamingWithExpiringCertTest) { kExampleIdentifier, nullptr, &session_id_)); CdmAppParameterMap app_parameters; - GenerateKeyRequest(KEY_MESSAGE, ISO_BMFF_VIDEO_MIME_TYPE, binary_key_id(), - app_parameters, kLicenseTypeStreaming, kExampleIdentifier, - nullptr); + GenerateKeyRequest(CdmResponseType(wvcdm::KEY_MESSAGE), + ISO_BMFF_VIDEO_MIME_TYPE, binary_key_id(), app_parameters, + kLicenseTypeStreaming, kExampleIdentifier, nullptr); VerifyKeyRequestResponse(config_.license_server(), config_.client_auth()); decryptor_->CloseSession(session_id_); @@ -2958,9 +2962,9 @@ TEST_F(WvCdmRequestLicenseTest, StreamingWithExpiringCertTest) { EXPECT_EQ(NO_ERROR, decryptor_->OpenSession(config_.key_system(), nullptr, kExampleIdentifier, nullptr, &session_id_)); - GenerateKeyRequest(NEED_PROVISIONING, ISO_BMFF_VIDEO_MIME_TYPE, - binary_key_id(), app_parameters, kLicenseTypeStreaming, - kExampleIdentifier, nullptr); + GenerateKeyRequest(CdmResponseType(NEED_PROVISIONING), + ISO_BMFF_VIDEO_MIME_TYPE, binary_key_id(), app_parameters, + kLicenseTypeStreaming, kExampleIdentifier, nullptr); decryptor_->CloseSession(session_id_); } @@ -3048,9 +3052,9 @@ TEST_F(WvCdmRequestLicenseTest, RestoreOfflineKeysWithExpiringCertTest) { kExampleIdentifier, nullptr, &session_id_)); CdmAppParameterMap app_parameters; - GenerateKeyRequest(KEY_MESSAGE, ISO_BMFF_VIDEO_MIME_TYPE, key_id, - app_parameters, kLicenseTypeOffline, kExampleIdentifier, - nullptr); + GenerateKeyRequest(CdmResponseType(wvcdm::KEY_MESSAGE), + ISO_BMFF_VIDEO_MIME_TYPE, key_id, app_parameters, + kLicenseTypeOffline, kExampleIdentifier, nullptr); VerifyKeyRequestResponse(config_.license_server(), client_auth); const CdmKeySetId key_set_id = key_set_id_; @@ -4493,7 +4497,7 @@ TEST_F(WvCdmRequestLicenseTest, DISABLED_OfflineLicenseDecryptionTest) { size_t encrypt_length = data.encrypt_data.size(); decrypt_buffer.resize(encrypt_length); - EXPECT_EQ(NO_ERROR, decryptor_->Decrypt(session_id_, + EXPECT_EQ(wvcdm::NO_ERROR, decryptor_->Decrypt(session_id_, data.is_encrypted, data.is_secure, data.key_id, @@ -4554,7 +4558,7 @@ TEST_F(WvCdmRequestLicenseTest, DISABLED_RestoreOfflineLicenseDecryptionTest) { size_t encrypt_length = data.encrypt_data.size(); decrypt_buffer.resize(encrypt_length); - EXPECT_EQ(NO_ERROR, decryptor_->Decrypt(session_id_, + EXPECT_EQ(wvcdm::NO_ERROR, decryptor_->Decrypt(session_id_, data.is_encrypted, data.is_secure, data.key_id, @@ -4609,7 +4613,7 @@ TEST_F(WvCdmRequestLicenseTest, KeyControlBlockDecryptionTest) { size_t encrypt_length = data[i].encrypt_data.size(); decrypt_buffer.resize(encrypt_length); - EXPECT_EQ(NO_ERROR, decryptor_->Decrypt(session_id_, + EXPECT_EQ(wvcdm::NO_ERROR, decryptor_->Decrypt(session_id_, data.is_encrypted, data.is_secure, data.key_id, @@ -4644,7 +4648,7 @@ TEST_P(WvCdmSessionSharingTest, SessionSharingTest) { property_set.set_session_sharing_mode( session_sharing_info->session_sharing_enabled); - ASSERT_EQ(NO_ERROR, + ASSERT_EQ(wvcdm::NO_ERROR, decryptor_->OpenSession(config_.key_system(), &property_set, cdm_identifier, nullptr, &session_id_)); CdmSessionId gp_session_id_1 = session_id_; @@ -4659,7 +4663,7 @@ TEST_P(WvCdmSessionSharingTest, SessionSharingTest) { "edef8ba979d64acea3c827dcd51d21ed00000014" // Widevine system id "08011210bdf1cb4fffc6506b8b7945b0bd2917fb"); // pssh data - ASSERT_EQ(NO_ERROR, + ASSERT_EQ(wvcdm::NO_ERROR, decryptor_->OpenSession(config_.key_system(), &property_set, cdm_identifier, nullptr, &session_id_)); CdmSessionId gp_session_id_2 = session_id_; @@ -4676,7 +4680,7 @@ TEST_P(WvCdmSessionSharingTest, SessionSharingTest) { decryption_parameters.subsample_flags = data->subsample_flags; if (session_sharing_info->session_sharing_enabled || !data->is_encrypted) { - EXPECT_EQ(NO_ERROR, + EXPECT_EQ(wvcdm::NO_ERROR, decryptor_->Decrypt(gp_session_id_2, data->validate_key_id, decryption_parameters)) << "session_sharing_info->session_sharing_enabled " @@ -4744,8 +4748,9 @@ TEST_F(WvCdmRequestLicenseTest, SessionSharingTest) { decryption_parameters.is_secure = data->is_secure; decryption_parameters.subsample_flags = data->subsample_flags; - EXPECT_EQ(NO_ERROR, decryptor_->Decrypt(session_id1, data->validate_key_id, - decryption_parameters)); + EXPECT_EQ(wvcdm::NO_ERROR, + decryptor_->Decrypt(session_id1, data->validate_key_id, + decryption_parameters)); sleep(kSingleEncryptedSubSampleIcpLicenseDurationExpiration - kSingleEncryptedSubSampleIcpLicenseExpirationWindow); @@ -4756,13 +4761,15 @@ TEST_F(WvCdmRequestLicenseTest, SessionSharingTest) { GenerateKeyRequest(init_data1, kLicenseTypeStreaming); VerifyKeyRequestResponse(config_.license_server(), config_.client_auth()); - EXPECT_EQ(NO_ERROR, decryptor_->Decrypt(session_id1, data->validate_key_id, - decryption_parameters)); + EXPECT_EQ(wvcdm::NO_ERROR, + decryptor_->Decrypt(session_id1, data->validate_key_id, + decryption_parameters)); sleep(kSingleEncryptedSubSampleIcpLicenseExpirationWindow); // session 1 will be expired, shared session 3 will be used to decrypt - EXPECT_EQ(NO_ERROR, decryptor_->Decrypt(session_id1, data->validate_key_id, - decryption_parameters)); + EXPECT_EQ(wvcdm::NO_ERROR, + decryptor_->Decrypt(session_id1, data->validate_key_id, + decryption_parameters)); decryptor_->CloseSession(session_id1); decryptor_->CloseSession(session_id2); @@ -4789,8 +4796,9 @@ TEST_F(WvCdmRequestLicenseTest, DecryptionKeyExpiredTest) { decryption_parameters.is_encrypted = data->is_encrypted; decryption_parameters.is_secure = data->is_secure; decryption_parameters.subsample_flags = data->subsample_flags; - EXPECT_EQ(NO_ERROR, decryptor_->Decrypt(session_id_, data->validate_key_id, - decryption_parameters)); + EXPECT_EQ(wvcdm::NO_ERROR, + decryptor_->Decrypt(session_id_, data->validate_key_id, + decryption_parameters)); sleep(kSingleEncryptedSubSampleIcpLicenseDurationExpiration + kSingleEncryptedSubSampleIcpLicenseExpirationWindow); EXPECT_EQ(NEED_KEY, decryptor_->Decrypt(session_id_, data->validate_key_id, @@ -4834,8 +4842,8 @@ TEST_F(WvCdmRequestLicenseTest, PlaybackExpiry_DecryptBeforeLicense) { // Decrypt before license is received is expected to fail but should // not start the playback timer - EXPECT_FALSE( - VerifyDecryption(session_id_, usage_info_sub_samples_icp[0], NEED_KEY)); + EXPECT_FALSE(VerifyDecryption(session_id_, usage_info_sub_samples_icp[0], + CdmResponseType(NEED_KEY))); std::this_thread::sleep_for(kExpirationStreamingClip21PlaybackDurationTimeMs); EXPECT_CALL(listener, @@ -4917,7 +4925,7 @@ TEST_P(WvCdmDecryptionTest, DecryptionTest) { expected_decrypt_data.insert(expected_decrypt_data.end(), (data + i)->decrypt_data.begin(), (data + i)->decrypt_data.end()); - EXPECT_EQ(NO_ERROR, + EXPECT_EQ(wvcdm::NO_ERROR, decryptor_->Decrypt(session_id_, (data + i)->validate_key_id, decryption_parameters)); @@ -4974,7 +4982,7 @@ TEST_P(WvCdmSessionSharingNoKeyTest, DecryptionTest) { bool can_decrypt = !data->is_encrypted && data->subsample_flags & OEMCrypto_FirstSubsample && data->subsample_flags & OEMCrypto_LastSubsample; - EXPECT_EQ(can_decrypt ? NO_ERROR : KEY_NOT_FOUND_IN_SESSION, + EXPECT_EQ(can_decrypt ? wvcdm::NO_ERROR : KEY_NOT_FOUND_IN_SESSION, decryptor_->Decrypt(gp_session_id_2, data->validate_key_id, decryption_parameters)); if (can_decrypt) { @@ -5008,7 +5016,7 @@ TEST_F(WvCdmRequestLicenseTest, AddHlsStreamingKeyTest) { decryptor_->OpenSession(config_.key_system(), nullptr, kDefaultCdmIdentifier, nullptr, &session_id_); CdmAppParameterMap app_parameters; - GenerateKeyRequest(wvcdm::KEY_MESSAGE, HLS_INIT_DATA_FORMAT, + GenerateKeyRequest(CdmResponseType(wvcdm::KEY_MESSAGE), HLS_INIT_DATA_FORMAT, kAttributeListSampleAes, app_parameters, kLicenseTypeStreaming, nullptr); // TODO(rfrias): Remove once we switch to git-on-borg @@ -5025,7 +5033,7 @@ TEST_P(WvHlsInitDataTest, InvalidHlsFormatTest) { nullptr, &session_id_); CdmAppParameterMap app_parameters; std::string init_data = GetParam(); - GenerateKeyRequest(wvcdm::INIT_DATA_NOT_FOUND, HLS_INIT_DATA_FORMAT, + GenerateKeyRequest(CdmResponseType(INIT_DATA_NOT_FOUND), HLS_INIT_DATA_FORMAT, init_data, app_parameters, kLicenseTypeStreaming, nullptr); decryptor_->CloseSession(session_id_); } @@ -5051,7 +5059,7 @@ TEST_P(WvHlsDecryptionTest, HlsDecryptionTest) { decryptor_->OpenSession(config_.key_system(), &client_property_set, kDefaultCdmIdentifier, &listener, &session_id_); CdmAppParameterMap app_parameters; - GenerateKeyRequest(wvcdm::KEY_MESSAGE, HLS_INIT_DATA_FORMAT, + GenerateKeyRequest(CdmResponseType(KEY_MESSAGE), HLS_INIT_DATA_FORMAT, info->attribute_list, app_parameters, kLicenseTypeStreaming, nullptr); // TODO(rfrias): Remove once we switch to git-on-borg @@ -5077,7 +5085,7 @@ TEST_P(WvHlsDecryptionTest, HlsDecryptionTest) { decryption_parameters.pattern_descriptor.skip_blocks = 9; } decryption_parameters.subsample_flags = data->subsample_flags; - EXPECT_EQ(NO_ERROR, + EXPECT_EQ(wvcdm::NO_ERROR, decryptor_->Decrypt(session_id_, false, decryption_parameters)); EXPECT_EQ(data->clear_data, std::string(reinterpret_cast(&output_buffer[0]), @@ -5105,7 +5113,7 @@ TEST_P(WvHlsFourCCBackwardCompatibilityTest, HlsDecryptionTest) { decryptor_->OpenSession(config_.key_system(), &client_property_set, kDefaultCdmIdentifier, &listener, &session_id_); CdmAppParameterMap app_parameters; - GenerateKeyRequest(wvcdm::KEY_MESSAGE, ISO_BMFF_VIDEO_MIME_TYPE, + GenerateKeyRequest(CdmResponseType(KEY_MESSAGE), ISO_BMFF_VIDEO_MIME_TYPE, info->attribute_list, app_parameters, kLicenseTypeStreaming, nullptr); // TODO(rfrias): Remove once we switch to git-on-borg @@ -5131,7 +5139,7 @@ TEST_P(WvHlsFourCCBackwardCompatibilityTest, HlsDecryptionTest) { decryption_parameters.pattern_descriptor.skip_blocks = 9; } decryption_parameters.subsample_flags = data->subsample_flags; - EXPECT_EQ(NO_ERROR, + EXPECT_EQ(wvcdm::NO_ERROR, decryptor_->Decrypt(session_id_, false, decryption_parameters)); EXPECT_EQ(data->clear_data, std::string(reinterpret_cast(&output_buffer[0]), @@ -5192,7 +5200,7 @@ TEST_P(WvCenc30Test, DecryptionTest) { decryption_parameters.is_secure = false; decryption_parameters.cipher_mode = data->cipher_mode; decryption_parameters.subsample_flags = data->subsample_flags; - EXPECT_EQ(NO_ERROR, + EXPECT_EQ(wvcdm::NO_ERROR, decryptor_->Decrypt(session_id_, false, decryption_parameters)); EXPECT_EQ(data->clear_data, std::string(reinterpret_cast(&output_buffer[0]), @@ -5252,7 +5260,7 @@ TEST_P(WvCenc30SwitchCipherModeTest, DecryptionTest) { decryption_parameters.is_secure = false; decryption_parameters.cipher_mode = data->cipher_mode; decryption_parameters.subsample_flags = data->subsample_flags; - EXPECT_EQ(NO_ERROR, + EXPECT_EQ(wvcdm::NO_ERROR, decryptor_->Decrypt(session_id_, false, decryption_parameters)); EXPECT_EQ(data->clear_data, std::string(reinterpret_cast(&output_buffer[0]), @@ -5270,9 +5278,9 @@ TEST_F(WvCdmRequestLicenseTest, CloseCdmReleaseResourcesTest) { Provision(kAlternateCdmIdentifier1, kLevelDefault); // Retrieve a streaming license - EXPECT_EQ(NO_ERROR, decryptor_->OpenSession(config_.key_system(), nullptr, - kDefaultCdmIdentifier, nullptr, - &session_id_)); + EXPECT_EQ(wvcdm::NO_ERROR, decryptor_->OpenSession( + config_.key_system(), nullptr, + kDefaultCdmIdentifier, nullptr, &session_id_)); GenerateKeyRequest(binary_key_id(), kLicenseTypeStreaming); VerifyKeyRequestResponse(config_.license_server(), config_.client_auth()); @@ -5282,21 +5290,22 @@ TEST_F(WvCdmRequestLicenseTest, CloseCdmReleaseResourcesTest) { CdmSessionId session_id3; CdmSessionId session_id4; CdmSessionId alternate_session_id; - EXPECT_EQ(NO_ERROR, decryptor_->OpenSession(config_.key_system(), nullptr, - kDefaultCdmIdentifier, nullptr, - &session_id1)); - EXPECT_EQ(NO_ERROR, decryptor_->OpenSession(config_.key_system(), nullptr, - kDefaultCdmIdentifier, nullptr, - &session_id2)); - EXPECT_EQ(NO_ERROR, decryptor_->OpenSession(config_.key_system(), nullptr, - kDefaultCdmIdentifier, nullptr, - &session_id3)); - EXPECT_EQ(NO_ERROR, decryptor_->OpenSession(config_.key_system(), nullptr, - kDefaultCdmIdentifier, nullptr, - &session_id4)); - EXPECT_EQ(NO_ERROR, decryptor_->OpenSession(config_.key_system(), nullptr, - kAlternateCdmIdentifier1, nullptr, - &alternate_session_id)); + EXPECT_EQ(wvcdm::NO_ERROR, decryptor_->OpenSession( + config_.key_system(), nullptr, + kDefaultCdmIdentifier, nullptr, &session_id1)); + EXPECT_EQ(wvcdm::NO_ERROR, decryptor_->OpenSession( + config_.key_system(), nullptr, + kDefaultCdmIdentifier, nullptr, &session_id2)); + EXPECT_EQ(wvcdm::NO_ERROR, decryptor_->OpenSession( + config_.key_system(), nullptr, + kDefaultCdmIdentifier, nullptr, &session_id3)); + EXPECT_EQ(wvcdm::NO_ERROR, decryptor_->OpenSession( + config_.key_system(), nullptr, + kDefaultCdmIdentifier, nullptr, &session_id4)); + EXPECT_EQ(wvcdm::NO_ERROR, + decryptor_->OpenSession(config_.key_system(), nullptr, + kAlternateCdmIdentifier1, nullptr, + &alternate_session_id)); // Close all open sessions and disable the timer running for |session_id_| decryptor_->CloseCdm(kDefaultCdmIdentifier); @@ -5315,9 +5324,9 @@ TEST_F(WvCdmRequestLicenseTest, DISABLED_DecryptPathTest) { Provision(); // Retrieve a streaming license - EXPECT_EQ(NO_ERROR, decryptor_->OpenSession(config_.key_system(), nullptr, - kDefaultCdmIdentifier, nullptr, - &session_id_)); + EXPECT_EQ(wvcdm::NO_ERROR, decryptor_->OpenSession( + config_.key_system(), nullptr, + kDefaultCdmIdentifier, nullptr, &session_id_)); CdmSessionId invalid_session_id = session_id_ + "more"; std::string frame_number = std::to_string(5); @@ -5329,11 +5338,13 @@ TEST_F(WvCdmRequestLicenseTest, DISABLED_DecryptPathTest) { invalid_session_id + kComma + std::to_string(5) + kComma + hash; CdmSessionId session_id; - EXPECT_NE(NO_ERROR, decryptor_->SetDecryptHash(hash_data, &session_id)); + EXPECT_NE(wvcdm::NO_ERROR, + decryptor_->SetDecryptHash(hash_data, &session_id)); // Valid hash data hash_data = session_id_ + kComma + std::to_string(5) + kComma + hash; - EXPECT_EQ(NO_ERROR, decryptor_->SetDecryptHash(hash_data, &session_id)); + EXPECT_EQ(wvcdm::NO_ERROR, + decryptor_->SetDecryptHash(hash_data, &session_id)); EXPECT_EQ(session_id_, session_id); decryptor_->CloseSession(session_id_); @@ -5393,19 +5404,21 @@ TEST_F(WvCdmRequestLicenseTest, RemoveOfflineLicenseWithMissingUsageEntry) { EXPECT_EQ(DeviceFiles::kNoError, sub_result); std::vector key_set_ids; - EXPECT_EQ(NO_ERROR, decryptor_->ListStoredLicenses( - security_level, kDefaultCdmIdentifier, &key_set_ids)); + EXPECT_EQ(wvcdm::NO_ERROR, + decryptor_->ListStoredLicenses( + security_level, kDefaultCdmIdentifier, &key_set_ids)); // Note: It is possible that future changes to the CDM will cause this // check to fail (such by filtering results from ListStoreLicenses). EXPECT_THAT(key_set_ids, Contains(original_key_set_id)); - EXPECT_EQ(NO_ERROR, + EXPECT_EQ(wvcdm::NO_ERROR, decryptor_->RemoveOfflineLicense( original_key_set_id, security_level, kDefaultCdmIdentifier)); // Verify license has been removed. - EXPECT_EQ(NO_ERROR, decryptor_->ListStoredLicenses( - security_level, kDefaultCdmIdentifier, &key_set_ids)); + EXPECT_EQ(wvcdm::NO_ERROR, + decryptor_->ListStoredLicenses( + security_level, kDefaultCdmIdentifier, &key_set_ids)); EXPECT_THAT(key_set_ids, Not(Contains(original_key_set_id))); // Re-provision. @@ -5426,17 +5439,19 @@ TEST_F(WvCdmRequestLicenseTest, RemoveOfflineLicenseWithMissingUsageEntry) { decryptor_->CloseSession(session_id_); // Get list of existing offline licenses. - EXPECT_EQ(NO_ERROR, decryptor_->ListStoredLicenses( - security_level, kDefaultCdmIdentifier, &key_set_ids)); + EXPECT_EQ(wvcdm::NO_ERROR, + decryptor_->ListStoredLicenses( + security_level, kDefaultCdmIdentifier, &key_set_ids)); EXPECT_THAT(key_set_ids, Contains(original_key_set_id)); - EXPECT_EQ(NO_ERROR, + EXPECT_EQ(wvcdm::NO_ERROR, decryptor_->RemoveOfflineLicense( original_key_set_id, security_level, kDefaultCdmIdentifier)); // Verify license has been removed. - EXPECT_EQ(NO_ERROR, decryptor_->ListStoredLicenses( - security_level, kDefaultCdmIdentifier, &key_set_ids)); + EXPECT_EQ(wvcdm::NO_ERROR, + decryptor_->ListStoredLicenses( + security_level, kDefaultCdmIdentifier, &key_set_ids)); EXPECT_THAT(key_set_ids, Not(Contains(original_key_set_id))); } @@ -5538,14 +5553,14 @@ TEST_F(WvCdmRequestLicenseRollbackTest, Streaming_ExpireAfterRollback) { Unprovision(); Provision(); - ASSERT_EQ(NO_ERROR, decryptor_->OpenSession(config_.key_system(), nullptr, - kDefaultCdmIdentifier, nullptr, - &session_id_)); + ASSERT_EQ(wvcdm::NO_ERROR, decryptor_->OpenSession( + config_.key_system(), nullptr, + kDefaultCdmIdentifier, nullptr, &session_id_)); GenerateKeyRequest(init_data_with_expiry_, kLicenseTypeStreaming); VerifyKeyRequestResponse(config_.license_server(), config_.client_auth()); // Verify that we can decrypt a subsample to begin with. - EXPECT_EQ(NO_ERROR, Decrypt(session_id_)); + EXPECT_EQ(wvcdm::NO_ERROR, Decrypt(session_id_)); RollbackSystemTime(kExpirationWithWindowMs_); @@ -5558,21 +5573,21 @@ TEST_F(WvCdmRequestLicenseRollbackTest, Streaming_ExpireAfterRollback) { RestoreSystemTime(); - ASSERT_EQ(NO_ERROR, decryptor_->CloseSession(session_id_)); + ASSERT_EQ(wvcdm::NO_ERROR, decryptor_->CloseSession(session_id_)); } TEST_F(WvCdmRequestLicenseRollbackTest, Streaming_ExpireBeforeRollback) { Unprovision(); Provision(); - ASSERT_EQ(NO_ERROR, decryptor_->OpenSession(config_.key_system(), nullptr, - kDefaultCdmIdentifier, nullptr, - &session_id_)); + ASSERT_EQ(wvcdm::NO_ERROR, decryptor_->OpenSession( + config_.key_system(), nullptr, + kDefaultCdmIdentifier, nullptr, &session_id_)); GenerateKeyRequest(init_data_with_expiry_, kLicenseTypeStreaming); VerifyKeyRequestResponse(config_.license_server(), config_.client_auth()); // Start playback timer. - EXPECT_EQ(NO_ERROR, Decrypt(session_id_)); + EXPECT_EQ(wvcdm::NO_ERROR, Decrypt(session_id_)); // Elapse time so that the key should now be considered expired. std::this_thread::sleep_for( @@ -5587,7 +5602,7 @@ TEST_F(WvCdmRequestLicenseRollbackTest, Streaming_ExpireBeforeRollback) { RestoreSystemTime(); - ASSERT_EQ(NO_ERROR, decryptor_->CloseSession(session_id_)); + ASSERT_EQ(wvcdm::NO_ERROR, decryptor_->CloseSession(session_id_)); } TEST_F(WvCdmRequestLicenseRollbackTest, Offline_RollbackBeforeRestoreKey) { @@ -5598,14 +5613,14 @@ TEST_F(WvCdmRequestLicenseRollbackTest, Offline_RollbackBeforeRestoreKey) { std::string client_auth; GetOfflineConfiguration(&unused_key_id, &client_auth); - ASSERT_EQ(NO_ERROR, decryptor_->OpenSession(config_.key_system(), nullptr, - kDefaultCdmIdentifier, nullptr, - &session_id_)); + ASSERT_EQ(wvcdm::NO_ERROR, decryptor_->OpenSession( + config_.key_system(), nullptr, + kDefaultCdmIdentifier, nullptr, &session_id_)); GenerateKeyRequest(init_data_with_expiry_, kLicenseTypeOffline); VerifyKeyRequestResponse(config_.license_server(), client_auth); // Verify that we can decrypt a subsample to begin with. - EXPECT_EQ(NO_ERROR, Decrypt(session_id_)); + EXPECT_EQ(wvcdm::NO_ERROR, Decrypt(session_id_)); CdmKeySetId key_set_id = key_set_id_; EXPECT_FALSE(key_set_id_.empty()); @@ -5636,7 +5651,7 @@ TEST_F(WvCdmRequestLicenseRollbackTest, Offline_RollbackBeforeRestoreKey) { // clock is restored/rolled forward. EXPECT_EQ(NEED_KEY, Decrypt(session_id_)); - ASSERT_EQ(NO_ERROR, decryptor_->CloseSession(session_id_)); + ASSERT_EQ(wvcdm::NO_ERROR, decryptor_->CloseSession(session_id_)); } // The difference between this test and Offline_RollbackBeforeRestoreKey is @@ -5657,14 +5672,14 @@ TEST_F(WvCdmRequestLicenseRollbackTest, GetOfflineConfiguration(&key_id, &client_auth); key_id[key_id.size() - 1] = '8'; - ASSERT_EQ(NO_ERROR, decryptor_->OpenSession(config_.key_system(), nullptr, - kDefaultCdmIdentifier, nullptr, - &session_id_)); + ASSERT_EQ(wvcdm::NO_ERROR, decryptor_->OpenSession( + config_.key_system(), nullptr, + kDefaultCdmIdentifier, nullptr, &session_id_)); GenerateKeyRequest(key_id, kLicenseTypeOffline); VerifyKeyRequestResponse(config_.license_server(), client_auth); // Verify that we can decrypt a subsample to begin with. - EXPECT_EQ(NO_ERROR, Decrypt(session_id_)); + EXPECT_EQ(wvcdm::NO_ERROR, Decrypt(session_id_)); CdmKeySetId key_set_id = key_set_id_; EXPECT_FALSE(key_set_id_.empty()); @@ -5689,7 +5704,7 @@ TEST_F(WvCdmRequestLicenseRollbackTest, std::this_thread::sleep_for(std::chrono::milliseconds(kExpirationWindowMs_)); // Verify we can decrypt. - EXPECT_EQ(NO_ERROR, Decrypt(session_id_)); + EXPECT_EQ(wvcdm::NO_ERROR, Decrypt(session_id_)); // Sleep for a while more. std::this_thread::sleep_for(std::chrono::milliseconds(kExpirationTimeMs_)); @@ -5699,7 +5714,7 @@ TEST_F(WvCdmRequestLicenseRollbackTest, // licenses (15s). The license should have expired. EXPECT_EQ(NEED_KEY, Decrypt(session_id_)); - ASSERT_EQ(NO_ERROR, decryptor_->CloseSession(session_id_)); + ASSERT_EQ(wvcdm::NO_ERROR, decryptor_->CloseSession(session_id_)); } TEST_F(WvCdmRequestLicenseRollbackTest, @@ -5711,9 +5726,9 @@ TEST_F(WvCdmRequestLicenseRollbackTest, std::string client_auth; GetOfflineConfiguration(&unused_key_id, &client_auth); - ASSERT_EQ(NO_ERROR, decryptor_->OpenSession(config_.key_system(), nullptr, - kDefaultCdmIdentifier, nullptr, - &session_id_)); + ASSERT_EQ(wvcdm::NO_ERROR, decryptor_->OpenSession( + config_.key_system(), nullptr, + kDefaultCdmIdentifier, nullptr, &session_id_)); GenerateKeyRequest(init_data_with_expiry_, kLicenseTypeOffline); VerifyKeyRequestResponse(config_.license_server(), client_auth); @@ -5727,7 +5742,7 @@ TEST_F(WvCdmRequestLicenseRollbackTest, EXPECT_EQ(wvcdm::KEY_ADDED, decryptor_->RestoreKey(session_id_, key_set_id)); // Start playback timer. - EXPECT_EQ(NO_ERROR, Decrypt(session_id_)); + EXPECT_EQ(wvcdm::NO_ERROR, Decrypt(session_id_)); RollbackSystemTime(kExpirationWithWindowMs_); @@ -5742,7 +5757,7 @@ TEST_F(WvCdmRequestLicenseRollbackTest, EXPECT_EQ(NEED_KEY, Decrypt(session_id_)); - ASSERT_EQ(NO_ERROR, decryptor_->CloseSession(session_id_)); + ASSERT_EQ(wvcdm::NO_ERROR, decryptor_->CloseSession(session_id_)); } TEST_F(WvCdmRequestLicenseRollbackTest, @@ -5754,9 +5769,9 @@ TEST_F(WvCdmRequestLicenseRollbackTest, std::string client_auth; GetOfflineConfiguration(&unused_key_id, &client_auth); - ASSERT_EQ(NO_ERROR, decryptor_->OpenSession(config_.key_system(), nullptr, - kDefaultCdmIdentifier, nullptr, - &session_id_)); + ASSERT_EQ(wvcdm::NO_ERROR, decryptor_->OpenSession( + config_.key_system(), nullptr, + kDefaultCdmIdentifier, nullptr, &session_id_)); GenerateKeyRequest(init_data_with_expiry_, kLicenseTypeOffline); VerifyKeyRequestResponse(config_.license_server(), client_auth); @@ -5770,7 +5785,7 @@ TEST_F(WvCdmRequestLicenseRollbackTest, EXPECT_EQ(wvcdm::KEY_ADDED, decryptor_->RestoreKey(session_id_, key_set_id)); // Start playback timer. - EXPECT_EQ(NO_ERROR, Decrypt(session_id_)); + EXPECT_EQ(wvcdm::NO_ERROR, Decrypt(session_id_)); // Elapse time so that the key should now be considered expired. std::this_thread::sleep_for( @@ -5785,7 +5800,7 @@ TEST_F(WvCdmRequestLicenseRollbackTest, RestoreSystemTime(); - ASSERT_EQ(NO_ERROR, decryptor_->CloseSession(session_id_)); + ASSERT_EQ(wvcdm::NO_ERROR, decryptor_->CloseSession(session_id_)); } } // namespace wvcdm diff --git a/libwvdrmengine/cdm/test/wv_cdm_metrics_test.cpp b/libwvdrmengine/cdm/test/wv_cdm_metrics_test.cpp index 86cac233..2fda2fe8 100644 --- a/libwvdrmengine/cdm/test/wv_cdm_metrics_test.cpp +++ b/libwvdrmengine/cdm/test/wv_cdm_metrics_test.cpp @@ -55,11 +55,10 @@ TEST_F(WvContentDecryptionModuleMetricsTest, EngineOnlyMetrics) { std::string cert_authority, cert, wrapped_key; // This call will create a CdmEngine instance with an EngineMetrics instance. - EXPECT_EQ(wvcdm::NO_ERROR, - decryptor_.GetProvisioningRequest( - cert_type, cert_authority, kDefaultCdmIdentifier, - kEmptyServiceCertificate, kLevelDefault, &request, - &provisioning_server_url)); + EXPECT_EQ(NO_ERROR, decryptor_.GetProvisioningRequest( + cert_type, cert_authority, kDefaultCdmIdentifier, + kEmptyServiceCertificate, kLevelDefault, &request, + &provisioning_server_url)); drm_metrics::WvCdmMetrics metrics; ASSERT_EQ(wvcdm::NO_ERROR, @@ -105,7 +104,7 @@ TEST_F(WvContentDecryptionModuleMetricsTest, EngineAndSessionMetrics) { // Opening the session will fail with NEEDS_PROVISIONING error. But it will // still create some session-level stats. - EXPECT_EQ(CdmResponseType::NEED_PROVISIONING, + EXPECT_EQ(wvcdm::NEED_PROVISIONING, decryptor_.OpenSession(key_system, nullptr, kDefaultCdmIdentifier, nullptr, &session_id)); @@ -127,7 +126,7 @@ TEST_F(WvContentDecryptionModuleMetricsTest, EngineAndSessionMetrics) { .cdm_engine_open_session(0) .attributes() .error_code(), - Eq(CdmResponseType::NEED_PROVISIONING)); + Eq(NEED_PROVISIONING)); // Validate a session-level metric. ASSERT_THAT(metrics.session_metrics().size(), Eq(1)); @@ -154,7 +153,7 @@ TEST_F(WvContentDecryptionModuleMetricsTest, // make the open session call a different number of times for // each identifier. for (int j = 0; j <= i; j++) { - EXPECT_EQ(CdmResponseType::NEED_PROVISIONING, + EXPECT_EQ(NEED_PROVISIONING, decryptor_.OpenSession(key_system, nullptr, identifiers[i], nullptr, &session_id)); } @@ -177,7 +176,7 @@ TEST_F(WvContentDecryptionModuleMetricsTest, .cdm_engine_open_session(0) .attributes() .error_code(), - Eq(CdmResponseType::NEED_PROVISIONING)); + Eq(NEED_PROVISIONING)); // Spot check a session-level metric. ASSERT_THAT(metrics.session_metrics().size(), Eq(i + 1)) diff --git a/libwvdrmengine/include/mapErrors-inl.h b/libwvdrmengine/include/mapErrors-inl.h index 045566e8..42964482 100644 --- a/libwvdrmengine/include/mapErrors-inl.h +++ b/libwvdrmengine/include/mapErrors-inl.h @@ -18,6 +18,11 @@ using ::aidl::android::hardware::drm::Status; template static S mapCdmResponseType(wvcdm::CdmResponseType res) { + return mapCdmResponseType(static_cast(res)); +} + +template +static S mapCdmResponseType(wvcdm::CdmResponseEnum res) { Status err = Status::ERROR_DRM_UNKNOWN; switch (res) { case wvcdm::KEY_ADDED: diff --git a/libwvdrmengine/mediacrypto/src/WVCryptoPlugin.cpp b/libwvdrmengine/mediacrypto/src/WVCryptoPlugin.cpp index f565d8c9..ee352642 100644 --- a/libwvdrmengine/mediacrypto/src/WVCryptoPlugin.cpp +++ b/libwvdrmengine/mediacrypto/src/WVCryptoPlugin.cpp @@ -96,7 +96,7 @@ SharedBufferBase::~SharedBufferBase() { CdmResponseType res = mCDM->QuerySessionStatus(mSessionId, &status); if (!::wvdrm::isCdmResponseTypeSuccess(res)) { - ALOGE("Error querying CDM status: %u", res); + ALOGE("Error querying CDM status: %d", static_cast(res)); *_aidl_return = false; return ::ndk::ScopedAStatus::ok(); } @@ -305,8 +305,8 @@ Status WVCryptoPlugin::attemptDecrypt(const CdmDecryptionParametersV16& params, return Status::OK; } else { ALOGE("Decrypt error in session %s during a sample %s protected data: %d", - mSessionId.c_str(), hasProtectedData ? "with" : "without", res); - switch (res) { + mSessionId.c_str(), hasProtectedData ? "with" : "without", static_cast(res)); + switch (res.Enum()) { case wvcdm::INSUFFICIENT_CRYPTO_RESOURCES: errorDetailMsg->assign( "Error decrypting data: insufficient crypto resources"); diff --git a/libwvdrmengine/mediacrypto/test/WVCryptoPlugin_hal_test.cpp b/libwvdrmengine/mediacrypto/test/WVCryptoPlugin_hal_test.cpp index 3861f77b..249256bf 100644 --- a/libwvdrmengine/mediacrypto/test/WVCryptoPlugin_hal_test.cpp +++ b/libwvdrmengine/mediacrypto/test/WVCryptoPlugin_hal_test.cpp @@ -106,7 +106,7 @@ public: fclose(fp); // Set default CdmResponseType value for gMock - DefaultValue::Set(wvcdm::NO_ERROR); + DefaultValue::Set(CdmResponseType(wvcdm::NO_ERROR)); heapBases.clear(); mCdm = new NiceMock(); @@ -156,7 +156,7 @@ public: uint8_t *base = static_cast( mmap(nullptr, size, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0)); EXPECT_NE(MAP_FAILED, base); - auto p = reinterpret_cast(base); + auto p = reinterpret_cast(base); for (size_t i = 0; i < size / sizeof(uint32_t); i++) { p[i] = rand(); } @@ -175,10 +175,10 @@ TEST_F(WVCryptoPluginTest, CorrectlyReportsSecureBuffers) { // Specify the expected calls to QuerySessionStatus EXPECT_CALL(*mCdm, QuerySessionStatus(_, _)) - .WillOnce( - DoAll(SetArgPointee<1>(l1Map), testing::Return(wvcdm::NO_ERROR))) - .WillOnce( - DoAll(SetArgPointee<1>(l3Map), testing::Return(wvcdm::NO_ERROR))); + .WillOnce(DoAll(SetArgPointee<1>(l1Map), + testing::Return(CdmResponseType(wvcdm::NO_ERROR)))) + .WillOnce(DoAll(SetArgPointee<1>(l3Map), + testing::Return(CdmResponseType(wvcdm::NO_ERROR)))); bool isSecure = false; auto ret = mPlugin->requiresSecureDecoderComponent("video/mp4", &isSecure); diff --git a/libwvdrmengine/mediadrm/src/WVDrmPlugin.cpp b/libwvdrmengine/mediadrm/src/WVDrmPlugin.cpp index 9afcc155..b5213ce2 100644 --- a/libwvdrmengine/mediadrm/src/WVDrmPlugin.cpp +++ b/libwvdrmengine/mediadrm/src/WVDrmPlugin.cpp @@ -446,7 +446,7 @@ SecurityLevel WVDrmPlugin::mapSecurityLevel(const std::string& level) { if (in_keyType == KeyType::RELEASE) { // When releasing keys, we do not have a session ID. - status = mapCdmResponseType(res); + status = mapCdmResponseType(res); } else { // For all other requests, we have a session ID. status = mapAndNotifyOfCdmResponseType(in_scope, res); @@ -949,7 +949,8 @@ Status WVDrmPlugin::unprovisionDevice() { std::string level = info[wvcdm::QUERY_KEY_SECURITY_LEVEL]; securityLevel = mapSecurityLevel(level); } else { - ALOGE("Failed to query security level, status=%d", status); + ALOGE("Failed to query security level, status=%d", + static_cast(status)); } *_aidl_return = securityLevel; @@ -971,7 +972,7 @@ Status WVDrmPlugin::unprovisionDevice() { vector levels = {wvcdm::kSecurityLevelL1, wvcdm::kSecurityLevelL3}; - CdmResponseType res = wvcdm::UNKNOWN_ERROR; + CdmResponseType res(wvcdm::UNKNOWN_ERROR); for (auto level : levels) { vector cdmKeySetIds; @@ -1010,7 +1011,7 @@ Status WVDrmPlugin::unprovisionDevice() { return toNdkScopedAStatus(status); } - CdmResponseType res = wvcdm::UNKNOWN_ERROR; + CdmResponseType res = wvcdm::CdmResponseType(wvcdm::UNKNOWN_ERROR); CdmKeySetId keySetIdStr(in_keySetId.keySetId.begin(), in_keySetId.keySetId.end()); @@ -1056,7 +1057,7 @@ Status WVDrmPlugin::unprovisionDevice() { return toNdkScopedAStatus(status); } - CdmResponseType res = wvcdm::UNKNOWN_ERROR; + CdmResponseType res(wvcdm::UNKNOWN_ERROR); res = mCDM->RemoveOfflineLicense( std::string(in_keySetId.keySetId.begin(), in_keySetId.keySetId.end()), @@ -1313,6 +1314,7 @@ Status WVDrmPlugin::unprovisionDevice() { CdmResponseType res = mCDM->SetDecryptHash(_value.c_str(), &sessionId); if (wvcdm::NO_ERROR == res) mDecryptHashSessionId = sessionId; + return toNdkScopedAStatus(mapCdmResponseType(res)); } else if (name == "decryptHashSessionId") { mDecryptHashSessionId = _value.c_str(); @@ -1846,7 +1848,7 @@ Status WVDrmPlugin::queryProperty(RequestedSecurityLevel securityLevel, mCDM->QueryStatus(securityLevel, property, &stringValue); if (res != wvcdm::NO_ERROR) { - ALOGE("Error querying CDM status: %u", res); + ALOGE("Error querying CDM status: %d", static_cast(res)); } return mapCdmResponseType(res); } diff --git a/libwvdrmengine/mediadrm/test/WVDrmPlugin_hal_test.cpp b/libwvdrmengine/mediadrm/test/WVDrmPlugin_hal_test.cpp index c1079bf3..4fda3b95 100644 --- a/libwvdrmengine/mediadrm/test/WVDrmPlugin_hal_test.cpp +++ b/libwvdrmengine/mediadrm/test/WVDrmPlugin_hal_test.cpp @@ -279,7 +279,7 @@ template CdmResponseType setSessionIdOnMap(testing::Unused, CdmQueryMap *map) { static const char oecId[] = {DIGIT + '0', '\0'}; (*map)[QUERY_KEY_OEMCRYPTO_SESSION_ID] = oecId; - return wvcdm::NO_ERROR; + return CdmResponseType(wvcdm::NO_ERROR); } MATCHER_P(HasOrigin, origin, "") { return arg.origin == origin; } @@ -319,7 +319,7 @@ public: keySetId.keySetId.assign(keySetIdRaw, keySetIdRaw + kKeySetIdSize); // Set default return values for gMock - DefaultValue::Set(wvcdm::NO_ERROR); + DefaultValue::Set(CdmResponseType(wvcdm::NO_ERROR)); DefaultValue::Set(OEMCrypto_SUCCESS); DefaultValue::Set(true); @@ -365,9 +365,9 @@ TEST_F(WVDrmPluginHalTest, OpensSessions) { // Provide expected mock behavior EXPECT_CALL(*mCdm, QueryStatus(_, QUERY_KEY_SECURITY_LEVEL, _)) .WillOnce(DoAll(SetArgPointee<2>(QUERY_VALUE_SECURITY_LEVEL_L1), - testing::Return(wvcdm::NO_ERROR))) + testing::Return(CdmResponseType(wvcdm::NO_ERROR)))) .WillOnce(DoAll(SetArgPointee<2>(QUERY_VALUE_SECURITY_LEVEL_L3), - testing::Return(wvcdm::NO_ERROR))); + testing::Return(CdmResponseType(wvcdm::NO_ERROR)))); CdmQueryMap securityLevelQueryMap; securityLevelQueryMap[wvcdm::QUERY_KEY_SECURITY_LEVEL] = @@ -375,12 +375,12 @@ TEST_F(WVDrmPluginHalTest, OpensSessions) { EXPECT_CALL(*mCdm, QuerySessionStatus(_, NotNull())) .WillOnce(DoAll(SetArgPointee<1>(securityLevelQueryMap), - testing::Return(wvcdm::NO_ERROR))); + testing::Return(CdmResponseType(wvcdm::NO_ERROR)))); EXPECT_CALL(*mCdm, OpenSession(_, _, _, _, _)) .WillRepeatedly(DoAll(SetArgPointee<4>(mCdmSessionId), SaveArg<1>(&propertySet), - testing::Return(wvcdm::NO_ERROR))); + testing::Return(CdmResponseType(wvcdm::NO_ERROR)))); EXPECT_CALL(*mCdm, QueryOemCryptoSessionId(mCdmSessionId, _)) .WillRepeatedly(Invoke(setSessionIdOnMap<4>)); @@ -410,7 +410,7 @@ TEST_F(WVDrmPluginHalTest, ClosesSessions) { TEST_F(WVDrmPluginHalTest, ClosesSessionWithError) { EXPECT_CALL(*mCdm, CloseSession(mCdmSessionId)) - .WillOnce(testing::Return(wvcdm::SESSION_NOT_FOUND_1)); + .WillOnce(testing::Return(CdmResponseType(wvcdm::SESSION_NOT_FOUND_1))); auto ret = mPlugin->closeSession(sessionId); EXPECT_EQ(static_cast(Status::ERROR_DRM_SESSION_NOT_OPENED), @@ -523,23 +523,26 @@ TEST_F(WVDrmPluginHalTest, DISABLED_GeneratesKeyRequests) { GenerateKeyRequest(mCdmSessionId, "", mimeType, initData, kLicenseTypeOffline, mCdmParameters, NotNull(), HasOrigin(EMPTY_ORIGIN), _)) - .WillOnce(DoAll(SetArgPointee<8>(initialRequest), - testing::Return(wvcdm::KEY_MESSAGE))); + .WillOnce( + DoAll(SetArgPointee<8>(initialRequest), + testing::Return(CdmResponseType(wvcdm::KEY_MESSAGE)))); EXPECT_CALL(*mCdm, GenerateKeyRequest(mCdmSessionId, "", mimeType, initData, kLicenseTypeStreaming, mCdmParameters, NotNull(), HasOrigin(EMPTY_ORIGIN), _)) - .WillOnce(DoAll(SetArgPointee<8>(renewalRequest), - testing::Return(wvcdm::KEY_MESSAGE))); + .WillOnce( + DoAll(SetArgPointee<8>(renewalRequest), + testing::Return(CdmResponseType(wvcdm::KEY_MESSAGE)))); EXPECT_CALL(*mCdm, GenerateKeyRequest("", mCdmKeySetId, mimeType, initData, kLicenseTypeRelease, mCdmParameters, NotNull(), HasOrigin(EMPTY_ORIGIN), _)) - .WillOnce(DoAll(SetArgPointee<8>(releaseRequest), - testing::Return(wvcdm::KEY_MESSAGE))); + .WillOnce( + DoAll(SetArgPointee<8>(releaseRequest), + testing::Return(CdmResponseType(wvcdm::KEY_MESSAGE)))); } } @@ -593,8 +596,9 @@ TEST_F(WVDrmPluginHalTest, AddsKeys) { EXPECT_CALL(*mCdm, AddKey(mCdmSessionId, ElementsAreArray(responseRaw, kResponseSize), _)) - .WillOnce(DoAll(SetArgPointee<2>(mCdmKeySetId), - testing::Return(wvcdm::KEY_ADDED))); + .WillOnce( + DoAll(SetArgPointee<2>(mCdmKeySetId), + testing::Return(wvcdm::CdmResponseType(wvcdm::KEY_ADDED)))); EXPECT_CALL(*mCdm, AddKey("", ElementsAreArray(responseRaw, kResponseSize), Pointee(mCdmKeySetId))) @@ -618,7 +622,7 @@ TEST_F(WVDrmPluginHalTest, HandlesPrivacyCertCaseOfAddKey) { EXPECT_CALL(*mCdm, OpenSession(_, _, _, _, _)) .WillRepeatedly(DoAll(SetArgPointee<4>(mCdmSessionId), SaveArg<1>(&propertySet), - testing::Return(wvcdm::NO_ERROR))); + testing::Return(CdmResponseType(wvcdm::NO_ERROR)))); // Provide expected behavior when mPlugin requests session control info EXPECT_CALL(*mCdm, QueryOemCryptoSessionId(mCdmSessionId, _)) @@ -634,7 +638,7 @@ TEST_F(WVDrmPluginHalTest, HandlesPrivacyCertCaseOfAddKey) { fclose(fp); EXPECT_CALL(*mCdm, AddKey(_, _, _)) - .WillRepeatedly(testing::Return(wvcdm::NEED_KEY)); + .WillRepeatedly(testing::Return(CdmResponseType(wvcdm::NEED_KEY))); SessionId sessionId; auto ret = mPlugin->openSession(SecurityLevel::DEFAULT, &sessionId); @@ -685,7 +689,7 @@ TEST_F(WVDrmPluginHalTest, QueriesKeyStatus) { EXPECT_CALL(*mCdm, QueryKeyStatus(mCdmSessionId, _)) .WillOnce(DoAll(SetArgPointee<1>(mCdmLicenseStatus), - testing::Return(wvcdm::NO_ERROR))); + testing::Return(CdmResponseType(wvcdm::NO_ERROR)))); std::vector keyValues; auto ret = mPlugin->queryKeyStatus(sessionId, &keyValues); @@ -716,7 +720,7 @@ TEST_F(WVDrmPluginHalTest, GetsProvisioningRequests) { EXPECT_CALL(*mCdm, QueryStatus(_, QUERY_KEY_SECURITY_LEVEL, _)) .WillOnce(DoAll(SetArgPointee<2>(QUERY_VALUE_SECURITY_LEVEL_L1), - testing::Return(wvcdm::NO_ERROR))); + testing::Return(CdmResponseType(wvcdm::NO_ERROR)))); // The first and the third invocation should be at default security level, // while the second one should be L3 @@ -726,13 +730,13 @@ TEST_F(WVDrmPluginHalTest, GetsProvisioningRequests) { .Times(2) .WillRepeatedly(DoAll(SetArgPointee<5>(mCdmRequest), SetArgPointee<6>(kDefaultUrl), - testing::Return(wvcdm::NO_ERROR))); + testing::Return(CdmResponseType(wvcdm::NO_ERROR)))); EXPECT_CALL(*mCdm, GetProvisioningRequest(kCertificateWidevine, IsEmpty(), HasOrigin(EMPTY_ORIGIN), IsEmpty(), wvcdm::kLevel3, _, _)) .WillOnce(DoAll(SetArgPointee<5>(mCdmRequest), SetArgPointee<6>(kDefaultUrl), - testing::Return(wvcdm::NO_ERROR))); + testing::Return(CdmResponseType(wvcdm::NO_ERROR)))); // Make 3 provisioning requests at security level default then L3 then L1 ProvisionRequest result; @@ -791,7 +795,7 @@ TEST_F(WVDrmPluginHalTest, HandlesProvisioningResponses) { EXPECT_CALL(*mCdm, QueryStatus(_, QUERY_KEY_SECURITY_LEVEL, _)) .WillOnce(DoAll(SetArgPointee<2>(QUERY_VALUE_SECURITY_LEVEL_L1), - testing::Return(wvcdm::NO_ERROR))); + testing::Return(CdmResponseType(wvcdm::NO_ERROR)))); // The first and the third invocation should be at default security level, // while the second one should be L3 @@ -845,13 +849,13 @@ TEST_F(WVDrmPluginHalTest, MuxesUnprovisioningErrors) { // Tests that both Unprovisions are called even if one fails. Also tests that // no matter which fails, the function always propagates the error. EXPECT_CALL(*mCdm, Unprovision(kSecurityLevelL1, HasOrigin(EMPTY_ORIGIN))) - .WillOnce(testing::Return(wvcdm::UNKNOWN_ERROR)) - .WillOnce(testing::Return(wvcdm::NO_ERROR)) - .WillOnce(testing::Return(wvcdm::UNKNOWN_ERROR)); + .WillOnce(testing::Return(CdmResponseType(wvcdm::UNKNOWN_ERROR))) + .WillOnce(testing::Return(CdmResponseType(wvcdm::NO_ERROR))) + .WillOnce(testing::Return(CdmResponseType(wvcdm::UNKNOWN_ERROR))); EXPECT_CALL(*mCdm, Unprovision(kSecurityLevelL3, HasOrigin(EMPTY_ORIGIN))) - .WillOnce(testing::Return(wvcdm::NO_ERROR)) - .WillOnce(testing::Return(wvcdm::UNKNOWN_ERROR)) - .WillOnce(testing::Return(wvcdm::UNKNOWN_ERROR)); + .WillOnce(testing::Return(CdmResponseType(wvcdm::NO_ERROR))) + .WillOnce(testing::Return(CdmResponseType(wvcdm::UNKNOWN_ERROR))) + .WillOnce(testing::Return(CdmResponseType(wvcdm::UNKNOWN_ERROR))); Status res = mPlugin->unprovisionDevice(); ASSERT_NE(Status::OK, res); @@ -889,8 +893,8 @@ TEST_F(WVDrmPluginHalTest, UnprovisionsGloballyWithSpoid) { ASSERT_TRUE(cdm) << "Failed to create mocked CDM"; EXPECT_CALL(*cdm, QueryStatus(_, QUERY_KEY_DEVICE_ID, _)) - .WillRepeatedly( - DoAll(SetArgPointee<2>(kDeviceId), testing::Return(wvcdm::NO_ERROR))); + .WillRepeatedly(DoAll(SetArgPointee<2>(kDeviceId), + testing::Return(CdmResponseType(wvcdm::NO_ERROR)))); EXPECT_CALL(*cdm, Unprovision(kSecurityLevelL1, HasOrigin(EMPTY_ORIGIN))) .Times(1); @@ -927,13 +931,13 @@ TEST_F(WVDrmPluginHalTest, MuxesOriginUnprovisioningErrors) { // Tests that both Unprovisions are called even if one fails. Also tests that // no matter which fails, the function always propagates the error. EXPECT_CALL(*mCdm, Unprovision(kSecurityLevelL1, HasOrigin(kOrigin.c_str()))) - .WillOnce(testing::Return(wvcdm::UNKNOWN_ERROR)) - .WillOnce(testing::Return(wvcdm::NO_ERROR)) - .WillOnce(testing::Return(wvcdm::UNKNOWN_ERROR)); + .WillOnce(testing::Return(CdmResponseType(wvcdm::UNKNOWN_ERROR))) + .WillOnce(testing::Return(CdmResponseType(wvcdm::NO_ERROR))) + .WillOnce(testing::Return(CdmResponseType(wvcdm::UNKNOWN_ERROR))); EXPECT_CALL(*mCdm, Unprovision(kSecurityLevelL3, HasOrigin(kOrigin.c_str()))) - .WillOnce(testing::Return(wvcdm::NO_ERROR)) - .WillOnce(testing::Return(wvcdm::UNKNOWN_ERROR)) - .WillOnce(testing::Return(wvcdm::UNKNOWN_ERROR)); + .WillOnce(testing::Return(CdmResponseType(wvcdm::NO_ERROR))) + .WillOnce(testing::Return(CdmResponseType(wvcdm::UNKNOWN_ERROR))) + .WillOnce(testing::Return(CdmResponseType(wvcdm::UNKNOWN_ERROR))); auto ret = mPlugin->setPropertyString(std::string("origin"), std::string(kOrigin)); @@ -991,104 +995,105 @@ TEST_F(WVDrmPluginHalTest, ReturnsExpectedPropertyValues) { EXPECT_CALL(*mCdm, QueryStatus(_, QUERY_KEY_SECURITY_LEVEL, _)) .WillOnce(DoAll(SetArgPointee<2>(QUERY_VALUE_SECURITY_LEVEL_L1), - testing::Return(wvcdm::NO_ERROR))) + testing::Return(CdmResponseType(wvcdm::NO_ERROR)))) .WillRepeatedly(DoAll(SetArgPointee<2>(QUERY_VALUE_SECURITY_LEVEL_L3), - testing::Return(wvcdm::NO_ERROR))); + testing::Return(CdmResponseType(wvcdm::NO_ERROR)))); EXPECT_CALL(*mCdm, QueryStatus(_, QUERY_KEY_DEVICE_ID, _)) - .WillOnce( - DoAll(SetArgPointee<2>(kDeviceId), testing::Return(wvcdm::NO_ERROR))); + .WillOnce(DoAll(SetArgPointee<2>(kDeviceId), + testing::Return(CdmResponseType(wvcdm::NO_ERROR)))); EXPECT_CALL(*mCdm, QueryStatus(_, QUERY_KEY_SYSTEM_ID, _)) - .WillOnce( - DoAll(SetArgPointee<2>(systemId), testing::Return(wvcdm::NO_ERROR))); + .WillOnce(DoAll(SetArgPointee<2>(systemId), + testing::Return(CdmResponseType(wvcdm::NO_ERROR)))); EXPECT_CALL(*mCdm, QueryStatus(_, QUERY_KEY_PROVISIONING_ID, _)) .WillOnce(DoAll(SetArgPointee<2>(provisioningId), - testing::Return(wvcdm::NO_ERROR))); + testing::Return(CdmResponseType(wvcdm::NO_ERROR)))); EXPECT_CALL(*mCdm, QueryStatus(_, QUERY_KEY_NUMBER_OF_OPEN_SESSIONS, _)) .WillOnce(DoAll(SetArgPointee<2>(openSessions), - testing::Return(wvcdm::NO_ERROR))); + testing::Return(CdmResponseType(wvcdm::NO_ERROR)))); EXPECT_CALL(*mCdm, QueryStatus(_, QUERY_KEY_MAX_NUMBER_OF_SESSIONS, _)) .WillOnce(DoAll(SetArgPointee<2>(maxSessions), - testing::Return(wvcdm::NO_ERROR))); + testing::Return(CdmResponseType(wvcdm::NO_ERROR)))); EXPECT_CALL(*mCdm, QueryStatus(_, QUERY_KEY_OEMCRYPTO_API_VERSION, _)) .WillOnce(DoAll(SetArgPointee<2>(oemCryptoApiVersion), - testing::Return(wvcdm::NO_ERROR))); + testing::Return(CdmResponseType(wvcdm::NO_ERROR)))); EXPECT_CALL(*mCdm, QueryStatus(_, QUERY_KEY_OEMCRYPTO_API_MINOR_VERSION, _)) .WillOnce(DoAll(SetArgPointee<2>(oemCryptoApiMinorVersion), - testing::Return(wvcdm::NO_ERROR))); + testing::Return(CdmResponseType(wvcdm::NO_ERROR)))); EXPECT_CALL(*mCdm, QueryStatus(_, QUERY_KEY_SRM_UPDATE_SUPPORT, _)) - .WillOnce( - DoAll(SetArgPointee<2>("True"), testing::Return(wvcdm::NO_ERROR))); + .WillOnce(DoAll(SetArgPointee<2>("True"), + testing::Return(CdmResponseType(wvcdm::NO_ERROR)))); EXPECT_CALL(*mCdm, QueryStatus(_, QUERY_KEY_CURRENT_SRM_VERSION, _)) .WillOnce(DoAll(SetArgPointee<2>(currentSRMVersion), - testing::Return(wvcdm::NO_ERROR))); + testing::Return(CdmResponseType(wvcdm::NO_ERROR)))); EXPECT_CALL(*mCdm, QueryStatus(_, QUERY_KEY_WVCDM_VERSION, _)) .WillOnce(DoAll(SetArgPointee<2>(mCdmVersion), - testing::Return(wvcdm::NO_ERROR))); + testing::Return(CdmResponseType(wvcdm::NO_ERROR)))); EXPECT_CALL(*mCdm, QueryStatus(_, QUERY_KEY_RESOURCE_RATING_TIER, _)) .WillOnce(DoAll(SetArgPointee<2>(resourceRatingTier), - testing::Return(wvcdm::NO_ERROR))); + testing::Return(CdmResponseType(wvcdm::NO_ERROR)))); EXPECT_CALL(*mCdm, QueryStatus(_, QUERY_KEY_DECRYPT_HASH_SUPPORT, _)) - .WillOnce(DoAll(SetArgPointee<2>("1"), testing::Return(wvcdm::NO_ERROR))); + .WillOnce(DoAll(SetArgPointee<2>("1"), + testing::Return(CdmResponseType(wvcdm::NO_ERROR)))); EXPECT_CALL(*mCdm, QueryStatus(_, QUERY_KEY_OEMCRYPTO_BUILD_INFORMATION, _)) .WillOnce(DoAll(SetArgPointee<2>(oemCryptoBuildInformation), - testing::Return(wvcdm::NO_ERROR))); + testing::Return(CdmResponseType(wvcdm::NO_ERROR)))); EXPECT_CALL(*mCdm, GetDecryptHashError(_, _)) .WillOnce(DoAll(SetArgPointee<1>(decryptHashErrorBadHashAndFrameNumber), - testing::Return(wvcdm::NO_ERROR))); + testing::Return(CdmResponseType(wvcdm::NO_ERROR)))); EXPECT_CALL(*mCdm, QueryStatus(_, QUERY_KEY_PROVISIONING_MODEL, _)) .WillOnce(DoAll(SetArgPointee<2>(provisioningModel), - testing::Return(wvcdm::NO_ERROR))); + testing::Return(CdmResponseType(wvcdm::NO_ERROR)))); EXPECT_CALL(*mCdm, QueryStatus(_, QUERY_KEY_ANALOG_OUTPUT_CAPABILITIES, _)) .WillOnce(DoAll(SetArgPointee<2>(analogOutputCap), - testing::Return(wvcdm::NO_ERROR))); + testing::Return(CdmResponseType(wvcdm::NO_ERROR)))); EXPECT_CALL(*mCdm, QueryStatus(_, QUERY_KEY_CAN_DISABLE_ANALOG_OUTPUT, _)) - .WillOnce( - DoAll(SetArgPointee<2>("True"), testing::Return(wvcdm::NO_ERROR))); + .WillOnce(DoAll(SetArgPointee<2>("True"), + testing::Return(CdmResponseType(wvcdm::NO_ERROR)))); EXPECT_CALL(*mCdm, QueryStatus(_, QUERY_KEY_CURRENT_HDCP_LEVEL, _)) .WillOnce(DoAll(SetArgPointee<2>(currentHdcpLevel), - testing::Return(wvcdm::NO_ERROR))); + testing::Return(CdmResponseType(wvcdm::NO_ERROR)))); EXPECT_CALL(*mCdm, QueryStatus(_, QUERY_KEY_MAX_HDCP_LEVEL, _)) .WillOnce(DoAll(SetArgPointee<2>(maxHdcpLevel), - testing::Return(wvcdm::NO_ERROR))); + testing::Return(CdmResponseType(wvcdm::NO_ERROR)))); EXPECT_CALL(*mCdm, QueryStatus(_, QUERY_KEY_MAX_USAGE_TABLE_ENTRIES, _)) .WillOnce(DoAll(SetArgPointee<2>(maxUsageEntries), - testing::Return(wvcdm::NO_ERROR))); + testing::Return(CdmResponseType(wvcdm::NO_ERROR)))); EXPECT_CALL(*mCdm, QueryStatus(_, QUERY_KEY_PRODUCTION_READY, _)) .WillOnce(DoAll(SetArgPointee<2>(wvcdm::QUERY_VALUE_TRUE), - testing::Return(wvcdm::NO_ERROR))); + testing::Return(CdmResponseType(wvcdm::NO_ERROR)))); EXPECT_CALL(*mCdm, QueryStatus(_, QUERY_KEY_USAGE_SUPPORT, _)) - .WillOnce( - DoAll(SetArgPointee<2>("True"), testing::Return(wvcdm::NO_ERROR))); + .WillOnce(DoAll(SetArgPointee<2>("True"), + testing::Return(CdmResponseType(wvcdm::NO_ERROR)))); EXPECT_CALL(*mCdm, QueryStatus(_, QUERY_KEY_WATERMARKING_SUPPORT, _)) .WillOnce(DoAll(SetArgPointee<2>(wvcdm::QUERY_VALUE_NOT_SUPPORTED), - testing::Return(wvcdm::NO_ERROR))); + testing::Return(CdmResponseType(wvcdm::NO_ERROR)))); EXPECT_CALL(*mCdm, GetMetrics(_, _)) .WillOnce(DoAll(SetArgPointee<1>(expected_metrics), - testing::Return(wvcdm::NO_ERROR))); + testing::Return(CdmResponseType(wvcdm::NO_ERROR)))); std::string stringResult; std::vector vectorResult; @@ -1242,7 +1247,7 @@ TEST_F(WVDrmPluginHalTest, ReturnsExpectedPropertyValues) { EXPECT_CALL(*mCdm, OpenSession(StrEq("com.widevine"), _, HasOrigin(EMPTY_ORIGIN), _, _)) .WillOnce(DoAll(SetArgPointee<4>(mCdmSessionId), - testing::Return(wvcdm::NO_ERROR))); + testing::Return(CdmResponseType(wvcdm::NO_ERROR)))); // Provide expected behavior when mPlugin requests session control info EXPECT_CALL(*mCdm, QueryOemCryptoSessionId(mCdmSessionId, _)) .Times(AtLeast(1)) @@ -1338,8 +1343,9 @@ TEST_F(WVDrmPluginHalTest, CompliesWithSpoidVariability) { EXPECT_CALL(*cdm, QueryStatus(_, QUERY_KEY_DEVICE_ID, _)) .Times(AtLeast(kPluginsPerCdm)) - .WillRepeatedly(DoAll(SetArgPointee<2>(deviceId), - testing::Return(wvcdm::NO_ERROR))); + .WillRepeatedly( + DoAll(SetArgPointee<2>(deviceId), + testing::Return(CdmResponseType(wvcdm::NO_ERROR)))); for (size_t appIndex = 0; appIndex < kAppCount; ++appIndex) { const std::string &appPackageName = kAppNames[appIndex]; @@ -1419,13 +1425,13 @@ TEST_F(WVDrmPluginHalTest, ReturnsSameL1Spoid) { EXPECT_CALL(*cdm, QueryStatus(wvcdm::kLevelDefault, QUERY_KEY_DEVICE_ID, _)) .Times(kSpoidQuery) .WillRepeatedly(DoAll(SetArgPointee<2>(kL1DeviceId), - testing::Return(wvcdm::NO_ERROR))); + testing::Return(CdmResponseType(wvcdm::NO_ERROR)))); // Provide expected behavior to support session creation EXPECT_CALL(*cdm, OpenSession(StrEq("com.widevine"), _, _, _, _)) .Times(kSpoidQuery) .WillRepeatedly(DoAll(SetArgPointee<4>(mCdmSessionId), - testing::Return(wvcdm::NO_ERROR))); + testing::Return(CdmResponseType(wvcdm::NO_ERROR)))); EXPECT_CALL(*cdm, QueryOemCryptoSessionId(mCdmSessionId, _)) .Times(kSpoidQuery) @@ -1471,13 +1477,13 @@ TEST_F(WVDrmPluginHalTest, ReturnsL3SpoidsWhenL3ProvisionedUsingL3Spoid) { EXPECT_CALL(*cdm, QueryStatus(wvcdm::kLevel3, QUERY_KEY_DEVICE_ID, _)) .Times(kSpoidQuery) .WillRepeatedly(DoAll(SetArgPointee<2>(kL3DeviceId), - testing::Return(wvcdm::NO_ERROR))); + testing::Return(CdmResponseType(wvcdm::NO_ERROR)))); // Provide expected behavior to support session creation EXPECT_CALL(*cdm, OpenSession(StrEq("com.widevine"), _, _, _, _)) .Times(kSpoidQuery) .WillRepeatedly(DoAll(SetArgPointee<4>(mCdmSessionId), - testing::Return(wvcdm::NO_ERROR))); + testing::Return(CdmResponseType(wvcdm::NO_ERROR)))); EXPECT_CALL(*cdm, QueryOemCryptoSessionId(mCdmSessionId, _)) .Times(kSpoidQuery) @@ -1535,19 +1541,19 @@ TEST_F(WVDrmPluginHalTest, ReturnsL3SpoidsWhenL3Unprovisioned) { EXPECT_CALL(*cdm, QueryStatus(wvcdm::kLevelDefault, QUERY_KEY_DEVICE_ID, _)) .WillOnce(DoAll(SetArgPointee<2>(kL1DeviceId), - testing::Return(wvcdm::NO_ERROR))); + testing::Return(CdmResponseType(wvcdm::NO_ERROR)))); EXPECT_CALL(*cdm, QueryStatus(wvcdm::kLevel3, QUERY_KEY_DEVICE_ID, _)) .Times(kSpoidQuery) .WillRepeatedly(DoAll(SetArgPointee<2>(kL3DeviceId), - testing::Return(wvcdm::NO_ERROR))); + testing::Return(CdmResponseType(wvcdm::NO_ERROR)))); // Provide expected behavior to support session creation EXPECT_CALL(*cdm, OpenSession(StrEq("com.widevine"), _, _, _, _)) .Times(kSpoidQuery) - .WillOnce(testing::Return(wvcdm::NEED_PROVISIONING)) + .WillOnce(testing::Return(CdmResponseType(wvcdm::NEED_PROVISIONING))) .WillOnce(DoAll(SetArgPointee<4>(mCdmSessionId), - testing::Return(wvcdm::NO_ERROR))); + testing::Return(CdmResponseType(wvcdm::NO_ERROR)))); EXPECT_CALL(*cdm, QueryOemCryptoSessionId(mCdmSessionId, _)) .WillOnce(Invoke(setSessionIdOnMap<4>)); @@ -1628,13 +1634,13 @@ TEST_F(WVDrmPluginHalTest, ReturnsL1SpoidsWhenL3ProvisionedUsingL1Spoid) { EXPECT_CALL(*cdm1, QueryStatus(wvcdm::kLevelDefault, QUERY_KEY_DEVICE_ID, _)) .WillOnce(DoAll(SetArgPointee<2>(kL1DeviceId), - testing::Return(wvcdm::NO_ERROR))); + testing::Return(CdmResponseType(wvcdm::NO_ERROR)))); // Provide expected behavior to support session creation EXPECT_CALL(*cdm1, OpenSession(StrEq("com.widevine"), _, _, _, _)) .WillOnce(DoAll(SetArgPointee<4>(mCdmSessionId), - testing::Return(wvcdm::NO_ERROR))) - .WillOnce(testing::Return(wvcdm::NEED_PROVISIONING)); + testing::Return(CdmResponseType(wvcdm::NO_ERROR)))) + .WillOnce(testing::Return(CdmResponseType(wvcdm::NEED_PROVISIONING))); EXPECT_CALL(*cdm1, QueryOemCryptoSessionId(mCdmSessionId, _)) .WillOnce(Invoke(setSessionIdOnMap<4>)); @@ -1686,16 +1692,16 @@ TEST_F(WVDrmPluginHalTest, ReturnsL1SpoidsWhenL3ProvisionedUsingL1Spoid) { EXPECT_CALL(*cdm2, QueryStatus(wvcdm::kLevelDefault, QUERY_KEY_DEVICE_ID, _)) .WillOnce(DoAll(SetArgPointee<2>(kL1DeviceId), - testing::Return(wvcdm::NO_ERROR))); + testing::Return(CdmResponseType(wvcdm::NO_ERROR)))); EXPECT_CALL(*cdm2, QueryStatus(wvcdm::kLevel3, QUERY_KEY_DEVICE_ID, _)) .WillOnce(DoAll(SetArgPointee<2>(kL3DeviceId), - testing::Return(wvcdm::NO_ERROR))); + testing::Return(CdmResponseType(wvcdm::NO_ERROR)))); // Provide expected behavior to support session creation EXPECT_CALL(*cdm2, OpenSession(StrEq("com.widevine"), _, _, _, _)) .WillOnce(DoAll(SetArgPointee<4>(mCdmSessionId), - testing::Return(wvcdm::NO_ERROR))); + testing::Return(CdmResponseType(wvcdm::NO_ERROR)))); EXPECT_CALL(*cdm2, QueryOemCryptoSessionId(mCdmSessionId, _)) .WillOnce(Invoke(setSessionIdOnMap<4>)); @@ -1748,7 +1754,7 @@ TEST_F(WVDrmPluginHalTest, FailsGenericMethodsWithoutAnAlgorithmSet) { EXPECT_CALL(*mCdm, OpenSession(StrEq("com.widevine"), _, _, _, _)) .Times(AtLeast(1)) .WillRepeatedly(DoAll(SetArgPointee<4>(mCdmSessionId), - testing::Return(wvcdm::NO_ERROR))); + testing::Return(CdmResponseType(wvcdm::NO_ERROR)))); EXPECT_CALL(*mCdm, QueryOemCryptoSessionId(mCdmSessionId, _)) .Times(AtLeast(1)) @@ -1831,7 +1837,7 @@ TEST_F(WVDrmPluginHalTest, CallsGenericEncrypt) { EXPECT_CALL(*mCdm, OpenSession(StrEq("com.widevine"), _, _, _, _)) .Times(AtLeast(1)) .WillRepeatedly(DoAll(SetArgPointee<4>(mCdmSessionId), - testing::Return(wvcdm::NO_ERROR))); + testing::Return(CdmResponseType(wvcdm::NO_ERROR)))); EXPECT_CALL(*mCdm, QueryOemCryptoSessionId(mCdmSessionId, _)) .Times(AtLeast(1)) @@ -1889,7 +1895,7 @@ TEST_F(WVDrmPluginHalTest, CallsGenericDecrypt) { EXPECT_CALL(*mCdm, OpenSession(StrEq("com.widevine"), _, _, _, _)) .Times(AtLeast(1)) .WillRepeatedly(DoAll(SetArgPointee<4>(mCdmSessionId), - testing::Return(wvcdm::NO_ERROR))); + testing::Return(CdmResponseType(wvcdm::NO_ERROR)))); EXPECT_CALL(*mCdm, QueryOemCryptoSessionId(mCdmSessionId, _)) .Times(AtLeast(1)) @@ -1949,7 +1955,7 @@ TEST_F(WVDrmPluginHalTest, CallsGenericSign) { EXPECT_CALL(*mCdm, OpenSession(StrEq("com.widevine"), _, _, _, _)) .Times(AtLeast(1)) .WillRepeatedly(DoAll(SetArgPointee<4>(mCdmSessionId), - testing::Return(wvcdm::NO_ERROR))); + testing::Return(CdmResponseType(wvcdm::NO_ERROR)))); EXPECT_CALL(*mCdm, QueryOemCryptoSessionId(mCdmSessionId, _)) .Times(AtLeast(1)) @@ -2018,7 +2024,7 @@ TEST_F(WVDrmPluginHalTest, CallsGenericVerify) { EXPECT_CALL(*mCdm, OpenSession(StrEq("com.widevine"), _, _, _, _)) .Times(AtLeast(1)) .WillRepeatedly(DoAll(SetArgPointee<4>(mCdmSessionId), - testing::Return(wvcdm::NO_ERROR))); + testing::Return(CdmResponseType(wvcdm::NO_ERROR)))); EXPECT_CALL(*mCdm, QueryOemCryptoSessionId(mCdmSessionId, _)) .Times(AtLeast(1)) @@ -2048,7 +2054,7 @@ TEST_F(WVDrmPluginHalTest, RegistersForEvents) { EXPECT_CALL(*mCdm, OpenSession(StrEq("com.widevine"), _, _, _, _)) .Times(AtLeast(1)) .WillRepeatedly(DoAll(SetArgPointee<4>(mCdmSessionId), - testing::Return(wvcdm::NO_ERROR))); + testing::Return(CdmResponseType(wvcdm::NO_ERROR)))); EXPECT_CALL(*mCdm, QueryOemCryptoSessionId(mCdmSessionId, _)) .Times(AtLeast(1)) @@ -2075,9 +2081,9 @@ TEST_F(WVDrmPluginHalTest, UnregistersForAllEventsOnDestruction) { EXPECT_CALL(*mCdm, OpenSession(StrEq("com.widevine"), _, _, _, _)) .WillOnce(DoAll(SetArgPointee<4>(mCdmSessionId1), - testing::Return(wvcdm::NO_ERROR))) + testing::Return(CdmResponseType(wvcdm::NO_ERROR)))) .WillOnce(DoAll(SetArgPointee<4>(mCdmSessionId2), - testing::Return(wvcdm::NO_ERROR))); + testing::Return(CdmResponseType(wvcdm::NO_ERROR)))); EXPECT_CALL(*mCdm, QueryOemCryptoSessionId(mCdmSessionId1, _)) .WillOnce(Invoke(setSessionIdOnMap<4>)); @@ -2159,8 +2165,9 @@ TEST_F(WVDrmPluginHalTest, MarshalsEvents) { TEST_F(WVDrmPluginHalTest, GeneratesProvisioningNeededEvent) { EXPECT_CALL(*mCdm, OpenSession(StrEq("com.widevine"), _, _, _, _)) .Times(AtLeast(1)) - .WillRepeatedly(DoAll(SetArgPointee<4>(mCdmSessionId), - testing::Return(wvcdm::NEED_PROVISIONING))); + .WillRepeatedly( + DoAll(SetArgPointee<4>(mCdmSessionId), + testing::Return(CdmResponseType(wvcdm::NEED_PROVISIONING)))); EXPECT_CALL(*mCdm, CloseSession(_)).Times(AtLeast(0)); @@ -2178,9 +2185,9 @@ TEST_F(WVDrmPluginHalTest, ProvidesExpectedDefaultPropertiesToCdm) { // Provide expected behavior in response to OpenSession and store the // property set EXPECT_CALL(*mCdm, OpenSession(_, _, _, _, _)) - .WillRepeatedly(DoAll(SetArgPointee<4>(mCdmSessionId), - SaveArg<1>(&propertySet), - testing::Return(wvcdm::NO_ERROR))); + .WillRepeatedly( + DoAll(SetArgPointee<4>(mCdmSessionId), SaveArg<1>(&propertySet), + testing::Return(CdmResponseType(wvcdm::NO_ERROR)))); // Provide expected behavior when mPlugin requests session control info EXPECT_CALL(*mCdm, QueryOemCryptoSessionId(mCdmSessionId, _)) @@ -2210,14 +2217,15 @@ TEST_F(WVDrmPluginHalTest, CanSetAppId) { // Provide expected behavior in response to OpenSession and store the // property set EXPECT_CALL(*mCdm, OpenSession(_, _, _, _, _)) - .WillRepeatedly(DoAll(SetArgPointee<4>(mCdmSessionId), - SaveArg<1>(&propertySet), - testing::Return(wvcdm::NO_ERROR))); + .WillRepeatedly( + DoAll(SetArgPointee<4>(mCdmSessionId), SaveArg<1>(&propertySet), + testing::Return(CdmResponseType(wvcdm::NO_ERROR)))); // Provide expected behavior when mPlugin queries for the security level EXPECT_CALL(*mCdm, QueryStatus(_, QUERY_KEY_SECURITY_LEVEL, _)) - .WillRepeatedly(DoAll(SetArgPointee<2>(QUERY_VALUE_SECURITY_LEVEL_L3), - testing::Return(wvcdm::NO_ERROR))); + .WillRepeatedly( + DoAll(SetArgPointee<2>(QUERY_VALUE_SECURITY_LEVEL_L3), + testing::Return(CdmResponseType(wvcdm::NO_ERROR)))); // Provide expected behavior when mPlugin requests session control info EXPECT_CALL(*mCdm, QueryOemCryptoSessionId(mCdmSessionId, _)) @@ -2264,7 +2272,7 @@ TEST_P(WVDrmPluginHalOriginTest, CanSetOrigin) { // Note which mock calls we expect EXPECT_CALL(*mCdm, OpenSession(_, _, HasOrigin(params.expectedOrigin), _, _)) .WillOnce(DoAll(SetArgPointee<4>(mCdmSessionId), - testing::Return(wvcdm::NO_ERROR))); + testing::Return(CdmResponseType(wvcdm::NO_ERROR)))); // Set the properties & run the test @@ -2295,18 +2303,18 @@ TEST_F(WVDrmPluginHalTest, CanSetSecurityLevel) { EXPECT_CALL(*mCdm, QueryStatus(_, QUERY_KEY_SECURITY_LEVEL, _)) .WillOnce(DoAll(SetArgPointee<2>(QUERY_VALUE_SECURITY_LEVEL_L3), - testing::Return(wvcdm::NO_ERROR))) + testing::Return(CdmResponseType(wvcdm::NO_ERROR)))) .WillOnce(DoAll(SetArgPointee<2>(QUERY_VALUE_SECURITY_LEVEL_L1), - testing::Return(wvcdm::NO_ERROR))); + testing::Return(CdmResponseType(wvcdm::NO_ERROR)))); // Provide expected mock behavior { // Provide expected behavior in response to OpenSession and store the // property set EXPECT_CALL(*mCdm, OpenSession(_, _, _, _, _)) - .WillRepeatedly(DoAll(SetArgPointee<4>(mCdmSessionId), - SaveArg<1>(&propertySet), - testing::Return(wvcdm::NO_ERROR))); + .WillRepeatedly( + DoAll(SetArgPointee<4>(mCdmSessionId), SaveArg<1>(&propertySet), + testing::Return(CdmResponseType(wvcdm::NO_ERROR)))); // Provide expected behavior when mPlugin requests session control info EXPECT_CALL(*mCdm, QueryOemCryptoSessionId(mCdmSessionId, _)) @@ -2416,9 +2424,9 @@ TEST_F(WVDrmPluginHalTest, CanSetPrivacyMode) { // Provide expected behavior in response to OpenSession and store the // property set EXPECT_CALL(*mCdm, OpenSession(_, _, _, _, _)) - .WillRepeatedly(DoAll(SetArgPointee<4>(mCdmSessionId), - SaveArg<1>(&propertySet), - testing::Return(wvcdm::NO_ERROR))); + .WillRepeatedly( + DoAll(SetArgPointee<4>(mCdmSessionId), SaveArg<1>(&propertySet), + testing::Return(CdmResponseType(wvcdm::NO_ERROR)))); // Provide expected behavior when mPlugin requests session control info EXPECT_CALL(*mCdm, QueryOemCryptoSessionId(mCdmSessionId, _)) @@ -2472,9 +2480,9 @@ TEST_F(WVDrmPluginHalTest, CanSetServiceCertificate) { // Provide expected behavior in response to OpenSession and store the // property set EXPECT_CALL(*mCdm, OpenSession(_, _, _, _, _)) - .WillRepeatedly(DoAll(SetArgPointee<4>(mCdmSessionId), - SaveArg<1>(&propertySet), - testing::Return(wvcdm::NO_ERROR))); + .WillRepeatedly( + DoAll(SetArgPointee<4>(mCdmSessionId), SaveArg<1>(&propertySet), + testing::Return(CdmResponseType(wvcdm::NO_ERROR)))); // Provide expected behavior when mPlugin requests session control info EXPECT_CALL(*mCdm, QueryOemCryptoSessionId(mCdmSessionId, _)) @@ -2523,9 +2531,9 @@ TEST_F(WVDrmPluginHalTest, CanSetSessionSharing) { // Provide expected behavior in response to OpenSession and store the // property set EXPECT_CALL(*mCdm, OpenSession(_, _, _, _, _)) - .WillRepeatedly(DoAll(SetArgPointee<4>(mCdmSessionId), - SaveArg<1>(&propertySet), - testing::Return(wvcdm::NO_ERROR))); + .WillRepeatedly( + DoAll(SetArgPointee<4>(mCdmSessionId), SaveArg<1>(&propertySet), + testing::Return(CdmResponseType(wvcdm::NO_ERROR)))); // Provide expected behavior when mPlugin requests session control info EXPECT_CALL(*mCdm, QueryOemCryptoSessionId(mCdmSessionId, _)) @@ -2591,9 +2599,9 @@ TEST_F(WVDrmPluginHalTest, AllowsStoringOfSessionSharingId) { // Provide expected behavior in response to OpenSession and store the // property set EXPECT_CALL(*mCdm, OpenSession(_, _, _, _, _)) - .WillRepeatedly(DoAll(SetArgPointee<4>(mCdmSessionId), - SaveArg<1>(&propertySet), - testing::Return(wvcdm::NO_ERROR))); + .WillRepeatedly( + DoAll(SetArgPointee<4>(mCdmSessionId), SaveArg<1>(&propertySet), + testing::Return(CdmResponseType(wvcdm::NO_ERROR)))); // Provide expected behavior when mPlugin requests session control info EXPECT_CALL(*mCdm, QueryOemCryptoSessionId(mCdmSessionId, _)) @@ -2628,14 +2636,15 @@ TEST_F(WVDrmPluginHalTest, CanSetAtscMode) { .WillOnce(DoAll(SetArgPointee<4>(mCdmSessionId), SaveArg<1>(&propertySet), SaveArg<2>(&mCdmIdAtscModeNotSet), - testing::Return(wvcdm::NO_ERROR))) - .WillOnce(DoAll( - SetArgPointee<4>(mCdmSessionId), SaveArg<1>(&propertySet), - SaveArg<2>(&mCdmIdAtscModeSet), testing::Return(wvcdm::NO_ERROR))) + testing::Return(CdmResponseType(wvcdm::NO_ERROR)))) + .WillOnce(DoAll(SetArgPointee<4>(mCdmSessionId), + SaveArg<1>(&propertySet), + SaveArg<2>(&mCdmIdAtscModeSet), + testing::Return(CdmResponseType(wvcdm::NO_ERROR)))) .WillOnce(DoAll(SetArgPointee<4>(mCdmSessionId), SaveArg<1>(&propertySet), SaveArg<2>(&mCdmIdAtscModeReset), - testing::Return(wvcdm::NO_ERROR))); + testing::Return(CdmResponseType(wvcdm::NO_ERROR)))); // Provide expected behavior when mPlugin requests session control info EXPECT_CALL(*cdm, QueryOemCryptoSessionId(mCdmSessionId, _)) @@ -2720,8 +2729,9 @@ TEST_F(WVDrmPluginHalTest, CanSetDecryptHashProperties) { // Provide expected behavior in response to OpenSession and store the // property set EXPECT_CALL(*mCdm, OpenSession(_, _, _, _, _)) - .WillRepeatedly(DoAll(SetArgPointee<4>(mCdmSessionId), - testing::Return(wvcdm::NO_ERROR))); + .WillRepeatedly( + DoAll(SetArgPointee<4>(mCdmSessionId), + testing::Return(CdmResponseType(wvcdm::NO_ERROR)))); // Provide expected behavior when mPlugin requests session control info EXPECT_CALL(*mCdm, QueryOemCryptoSessionId(mCdmSessionId, _)) @@ -2759,8 +2769,9 @@ TEST_F(WVDrmPluginHalTest, DoesNotSetDecryptHashProperties) { // Provide expected behavior in response to OpenSession and store the // property set EXPECT_CALL(*mCdm, OpenSession(_, _, _, _, _)) - .WillRepeatedly(DoAll(SetArgPointee<4>(mCdmSessionId), - testing::Return(wvcdm::NO_ERROR))); + .WillRepeatedly( + DoAll(SetArgPointee<4>(mCdmSessionId), + testing::Return(CdmResponseType(wvcdm::NO_ERROR)))); // Provide expected behavior when mPlugin requests session control info EXPECT_CALL(*mCdm, QueryOemCryptoSessionId(mCdmSessionId, _)) @@ -2837,13 +2848,13 @@ TEST_F(WVDrmPluginHalTest, GetOfflineLicenseIds) { EXPECT_CALL(*mCdm, ListStoredLicenses(kSecurityLevelL1, HasOrigin(EMPTY_ORIGIN), _)) - .WillOnce( - DoAll(SetArgPointee<2>(mockIdsL1), testing::Return(wvcdm::NO_ERROR))); + .WillOnce(DoAll(SetArgPointee<2>(mockIdsL1), + testing::Return(CdmResponseType(wvcdm::NO_ERROR)))); EXPECT_CALL(*mCdm, ListStoredLicenses(kSecurityLevelL3, HasOrigin(EMPTY_ORIGIN), _)) - .WillOnce( - DoAll(SetArgPointee<2>(mockIdsL3), testing::Return(wvcdm::NO_ERROR))); + .WillOnce(DoAll(SetArgPointee<2>(mockIdsL3), + testing::Return(CdmResponseType(wvcdm::NO_ERROR)))); std::vector offlineIds; auto ret = mPlugin->getOfflineLicenseKeySetIds(&offlineIds); @@ -2860,16 +2871,16 @@ TEST_F(WVDrmPluginHalTest, GetOfflineLicenseIds) { TEST_F(WVDrmPluginHalTest, GetOfflineLicenseState) { EXPECT_CALL(*mCdm, QueryStatus(_, QUERY_KEY_SECURITY_LEVEL, _)) .WillRepeatedly(DoAll(SetArgPointee<2>(QUERY_VALUE_SECURITY_LEVEL_L1), - testing::Return(wvcdm::NO_ERROR))); + testing::Return(CdmResponseType(wvcdm::NO_ERROR)))); EXPECT_CALL(*mCdm, GetOfflineLicenseState(_, kSecurityLevelL1, HasOrigin(EMPTY_ORIGIN), _)) .WillOnce(DoAll(SetArgPointee<3>(wvcdm::kLicenseStateActive), - testing::Return(wvcdm::NO_ERROR))) + testing::Return(CdmResponseType(wvcdm::NO_ERROR)))) .WillOnce(DoAll(SetArgPointee<3>(wvcdm::kLicenseStateReleasing), - testing::Return(wvcdm::NO_ERROR))) + testing::Return(CdmResponseType(wvcdm::NO_ERROR)))) .WillOnce(DoAll(SetArgPointee<3>(wvcdm::kLicenseStateUnknown), - testing::Return(wvcdm::NO_ERROR))); + testing::Return(CdmResponseType(wvcdm::NO_ERROR)))); auto ret = mPlugin->setPropertyString(std::string("securityLevel"), std::string("L1")); diff --git a/libwvdrmengine/src/WVDrmFactory.cpp b/libwvdrmengine/src/WVDrmFactory.cpp index c5f78de0..b8a8844b 100644 --- a/libwvdrmengine/src/WVDrmFactory.cpp +++ b/libwvdrmengine/src/WVDrmFactory.cpp @@ -205,8 +205,9 @@ void WVDrmFactory::printCdmMetrics(int fd) { dprintf(fd, "%s\n", formatted.c_str()); } } else { - dprintf(fd, " error_message: %s\n", ::wvcdm::CdmResponseTypeToString(result)); - dprintf(fd, " error_code: %d\n", result); + dprintf(fd, " error_message: %s\n", + wvcdm::CdmResponseEnumToString(result.Enum())); + dprintf(fd, " error_code: %d\n", static_cast(result)); } } diff --git a/libwvdrmengine/src/wv_metrics.cpp b/libwvdrmengine/src/wv_metrics.cpp index 8cacddaa..381c6e8d 100644 --- a/libwvdrmengine/src/wv_metrics.cpp +++ b/libwvdrmengine/src/wv_metrics.cpp @@ -162,8 +162,8 @@ string FormatAttributes(const string& indent, const Attributes& attributes) { result.append("error_code:\n"); string next_indent = indent + kIndentSpaces; result.append(next_indent + "name: "); - result.append(CdmResponseTypeToString(static_cast( - attributes.error_code()))); + result.append(wvcdm::CdmResponseEnumToString( + wvcdm::CdmResponseEnum(attributes.error_code()))); result.append("\n" + next_indent + "value: "); result.append(to_string(attributes.error_code())); } diff --git a/libwvdrmengine/tools/metrics_dump/src/wv_metrics.cpp b/libwvdrmengine/tools/metrics_dump/src/wv_metrics.cpp index 78d4980f..af4df3b7 100644 --- a/libwvdrmengine/tools/metrics_dump/src/wv_metrics.cpp +++ b/libwvdrmengine/tools/metrics_dump/src/wv_metrics.cpp @@ -27,7 +27,7 @@ const string kIndentPerLine = " "; string FormatCdmErrorTranslation(int error_code) { std::stringstream os; - os << static_cast(error_code); + os << error_code; return " " + os.str(); }