From 199cfb8f1968c9be89258c03000feb08e0afaf4f Mon Sep 17 00:00:00 2001 From: Rahul Frias Date: Tue, 8 Sep 2015 16:33:58 -0700 Subject: [PATCH] Make OEM Crypto API version available through mediaDrm properties [ Merge of http://go/wvgerrit/15540 ] b/22771529 Change-Id: I8a3d3b3d7a943c531ef0ff2c860442e0690b9175 --- .../cdm/core/include/wv_cdm_constants.h | 2 + libwvdrmengine/cdm/core/src/cdm_engine.cpp | 8 +++ .../cdm/test/request_license_test.cpp | 50 +++++++++++++++++++ libwvdrmengine/mediadrm/src/WVDrmPlugin.cpp | 2 + .../mediadrm/test/WVDrmPlugin_test.cpp | 10 ++++ 5 files changed, 72 insertions(+) diff --git a/libwvdrmengine/cdm/core/include/wv_cdm_constants.h b/libwvdrmengine/cdm/core/include/wv_cdm_constants.h index 352da201..c576d8a4 100644 --- a/libwvdrmengine/cdm/core/include/wv_cdm_constants.h +++ b/libwvdrmengine/cdm/core/include/wv_cdm_constants.h @@ -57,6 +57,8 @@ static const std::string QUERY_KEY_NUMBER_OF_OPEN_SESSIONS = "NumberOfOpenSessions"; static const std::string QUERY_KEY_MAX_NUMBER_OF_SESSIONS = "MaxNumberOfSessions"; +static const std::string QUERY_KEY_OEMCRYPTO_API_VERSION = + "OemCryptoApiVersion"; static const std::string QUERY_VALUE_TRUE = "True"; static const std::string QUERY_VALUE_FALSE = "False"; diff --git a/libwvdrmengine/cdm/core/src/cdm_engine.cpp b/libwvdrmengine/cdm/core/src/cdm_engine.cpp index 2b6072ce..1bab8f63 100644 --- a/libwvdrmengine/cdm/core/src/cdm_engine.cpp +++ b/libwvdrmengine/cdm/core/src/cdm_engine.cpp @@ -473,6 +473,14 @@ CdmResponseType CdmEngine::QueryStatus(SecurityLevel security_level, max_sessions_stream.str(); } + uint32_t api_version; + success = crypto_session.GetApiVersion(&api_version); + if (success) { + std::ostringstream api_version_stream; + api_version_stream << api_version; + (*key_info)[QUERY_KEY_OEMCRYPTO_API_VERSION] = api_version_stream.str(); + } + return NO_ERROR; } diff --git a/libwvdrmengine/cdm/test/request_license_test.cpp b/libwvdrmengine/cdm/test/request_license_test.cpp index f4a6534f..4a733b2c 100644 --- a/libwvdrmengine/cdm/test/request_license_test.cpp +++ b/libwvdrmengine/cdm/test/request_license_test.cpp @@ -2056,6 +2056,56 @@ TEST_F(WvCdmRequestLicenseTest, QueryStatus) { itr = query_info.find(wvcdm::QUERY_KEY_PROVISIONING_ID); ASSERT_TRUE(itr != query_info.end()); EXPECT_EQ(16u, itr->second.size()); + + itr = query_info.find(QUERY_KEY_CURRENT_HDCP_LEVEL); + ASSERT_TRUE(itr != query_info.end()); + EXPECT_TRUE(itr->second == QUERY_VALUE_UNPROTECTED || + itr->second == QUERY_VALUE_HDCP_V1 || + itr->second == QUERY_VALUE_HDCP_V2_0 || + itr->second == QUERY_VALUE_HDCP_V2_1 || + itr->second == QUERY_VALUE_HDCP_V2_2 || + itr->second == QUERY_VALUE_DISCONNECTED); + + itr = query_info.find(QUERY_KEY_MAX_HDCP_LEVEL); + ASSERT_TRUE(itr != query_info.end()); + EXPECT_TRUE(itr->second == QUERY_VALUE_UNPROTECTED || + itr->second == QUERY_VALUE_HDCP_V1 || + itr->second == QUERY_VALUE_HDCP_V2_0 || + itr->second == QUERY_VALUE_HDCP_V2_1 || + itr->second == QUERY_VALUE_HDCP_V2_2 || + itr->second == QUERY_VALUE_DISCONNECTED); + + itr = query_info.find(QUERY_KEY_USAGE_SUPPORT); + ASSERT_TRUE(itr != query_info.end()); + EXPECT_TRUE(itr->second == QUERY_VALUE_TRUE || + itr->second == QUERY_VALUE_FALSE); + + itr = query_info.find(QUERY_KEY_NUMBER_OF_OPEN_SESSIONS); + ASSERT_TRUE(itr != query_info.end()); + ss.clear(); + ss.str(itr->second); + uint32_t open_sessions; + EXPECT_TRUE(ss >> open_sessions); + EXPECT_TRUE(ss.eof()); + + itr = query_info.find(QUERY_KEY_MAX_NUMBER_OF_SESSIONS); + ASSERT_TRUE(itr != query_info.end()); + ss.clear(); + ss.str(itr->second); + uint32_t max_sessions; + EXPECT_TRUE(ss >> max_sessions); + EXPECT_TRUE(ss.eof()); + EXPECT_LE(open_sessions, max_sessions); + EXPECT_LE(8u, max_sessions); + + itr = query_info.find(QUERY_KEY_OEMCRYPTO_API_VERSION); + ASSERT_TRUE(itr != query_info.end()); + ss.clear(); + ss.str(itr->second); + uint32_t api_version; + EXPECT_TRUE(ss >> api_version); + EXPECT_TRUE(ss.eof()); + EXPECT_LE(10u, api_version); } TEST_F(WvCdmRequestLicenseTest, QueryStatusL3) { diff --git a/libwvdrmengine/mediadrm/src/WVDrmPlugin.cpp b/libwvdrmengine/mediadrm/src/WVDrmPlugin.cpp index faee4475..0dd7f051 100644 --- a/libwvdrmengine/mediadrm/src/WVDrmPlugin.cpp +++ b/libwvdrmengine/mediadrm/src/WVDrmPlugin.cpp @@ -478,6 +478,8 @@ status_t WVDrmPlugin::getPropertyString(const String8& name, return queryProperty(QUERY_KEY_NUMBER_OF_OPEN_SESSIONS, value); } else if (name == "maxNumberOfSessions") { return queryProperty(QUERY_KEY_MAX_NUMBER_OF_SESSIONS, value); + } else if (name == "oemCryptoApiVersion") { + return queryProperty(QUERY_KEY_OEMCRYPTO_API_VERSION, value); } else if (name == "appId") { value = mPropertySet.app_id().c_str(); } else if (name == "origin") { diff --git a/libwvdrmengine/mediadrm/test/WVDrmPlugin_test.cpp b/libwvdrmengine/mediadrm/test/WVDrmPlugin_test.cpp index 5a409312..15741030 100644 --- a/libwvdrmengine/mediadrm/test/WVDrmPlugin_test.cpp +++ b/libwvdrmengine/mediadrm/test/WVDrmPlugin_test.cpp @@ -827,6 +827,10 @@ TEST_F(WVDrmPluginTest, ReturnsExpectedPropertyValues) { CdmQueryMap maxSessionsMap; maxSessionsMap[QUERY_KEY_MAX_NUMBER_OF_SESSIONS] = maxSessions; + static const string oemCryptoApiVersion = "10"; + CdmQueryMap oemCryptoApiVersionMap; + oemCryptoApiVersionMap[QUERY_KEY_OEMCRYPTO_API_VERSION] = oemCryptoApiVersion; + EXPECT_CALL(*cdm, QueryStatus(_, _)) .WillOnce(DoAll(SetArgPointee<1>(l1Map), Return(wvcdm::NO_ERROR))) @@ -841,6 +845,8 @@ TEST_F(WVDrmPluginTest, ReturnsExpectedPropertyValues) { .WillOnce(DoAll(SetArgPointee<1>(openSessionsMap), Return(wvcdm::NO_ERROR))) .WillOnce(DoAll(SetArgPointee<1>(maxSessionsMap), + Return(wvcdm::NO_ERROR))) + .WillOnce(DoAll(SetArgPointee<1>(oemCryptoApiVersionMap), Return(wvcdm::NO_ERROR))); String8 stringResult; @@ -890,6 +896,10 @@ TEST_F(WVDrmPluginTest, ReturnsExpectedPropertyValues) { res = plugin.getPropertyString(String8("maxNumberOfSessions"), stringResult); ASSERT_EQ(OK, res); EXPECT_EQ(maxSessions, stringResult.string()); + + res = plugin.getPropertyString(String8("oemCryptoApiVersion"), stringResult); + ASSERT_EQ(OK, res); + EXPECT_EQ(oemCryptoApiVersion, stringResult.string()); } TEST_F(WVDrmPluginTest, DoesNotGetUnknownProperties) {