Add query to CDM to get provisioning model
Bug: b/133855570 Tests: Android tests/CE CDM tests/Linux tests Merge of http://go/wvgerrit/80163 Adds a query option to QueryStatus to get the provisioning model of the OEMCrypto. Change-Id: I1896984be6294a5ada9a97b63e6d9080297e92b0
This commit is contained in:
@@ -81,6 +81,7 @@ static const std::string QUERY_KEY_RESOURCE_RATING_TIER = "ResourceRatingTier";
|
||||
static const std::string QUERY_KEY_OEMCRYPTO_BUILD_INFORMATION =
|
||||
"OemCryptoBuildInformation";
|
||||
static const std::string QUERY_KEY_DECRYPT_HASH_SUPPORT = "DecryptHashSupport";
|
||||
static const std::string QUERY_KEY_PROVISIONING_MODEL = "ProvisioningModel";
|
||||
|
||||
static const std::string QUERY_VALUE_TRUE = "True";
|
||||
static const std::string QUERY_VALUE_FALSE = "False";
|
||||
@@ -100,6 +101,9 @@ static const std::string QUERY_VALUE_HDCP_V2_1 = "HDCP-2.1";
|
||||
static const std::string QUERY_VALUE_HDCP_V2_2 = "HDCP-2.2";
|
||||
static const std::string QUERY_VALUE_HDCP_V2_3 = "HDCP-2.3";
|
||||
static const std::string QUERY_VALUE_HDCP_LEVEL_UNKNOWN = "HDCP-LevelUnknown";
|
||||
static const std::string QUERY_VALUE_DRM_CERTIFICATE = "DrmCertificate";
|
||||
static const std::string QUERY_VALUE_KEYBOX = "Keybox";
|
||||
static const std::string QUERY_VALUE_OEM_CERTIFICATE = "OEMCertificate";
|
||||
|
||||
static const std::string ISO_BMFF_VIDEO_MIME_TYPE = "video/mp4";
|
||||
static const std::string ISO_BMFF_AUDIO_MIME_TYPE = "audio/mp4";
|
||||
|
||||
@@ -672,6 +672,33 @@ CdmResponseType CdmEngine::QueryStatus(SecurityLevel security_level,
|
||||
*query_response =
|
||||
std::to_string(crypto_session->IsDecryptHashSupported(security_level));
|
||||
return NO_ERROR;
|
||||
} else if (query_token == QUERY_KEY_PROVISIONING_MODEL) {
|
||||
CdmClientTokenType token_type = kClientTokenUninitialized;
|
||||
status = crypto_session->GetProvisioningMethod(security_level, &token_type);
|
||||
if (status != NO_ERROR) {
|
||||
LOGW("CdmEngine::QueryStatus: GetProvisioningMethod failed: %d", status);
|
||||
return status;
|
||||
}
|
||||
switch (token_type) {
|
||||
case kClientTokenDrmCert:
|
||||
*query_response = QUERY_VALUE_DRM_CERTIFICATE;
|
||||
break;
|
||||
case kClientTokenKeybox:
|
||||
*query_response = QUERY_VALUE_KEYBOX;
|
||||
break;
|
||||
case kClientTokenOemCert:
|
||||
*query_response = QUERY_VALUE_OEM_CERTIFICATE;
|
||||
break;
|
||||
case kClientTokenUninitialized:
|
||||
default:
|
||||
LOGW(
|
||||
"CdmEngine::QueryStatus: GetProvisioningMethod returns invalid "
|
||||
"token type: %d",
|
||||
token_type);
|
||||
return GET_PROVISIONING_METHOD_ERROR;
|
||||
break;
|
||||
}
|
||||
return NO_ERROR;
|
||||
}
|
||||
|
||||
M_TIME(status = crypto_session->Open(security_level),
|
||||
|
||||
@@ -4830,9 +4830,15 @@ TEST_F(WvCdmRequestLicenseTest, QueryStatus) {
|
||||
EXPECT_TRUE(!value.empty());
|
||||
|
||||
EXPECT_EQ(wvcdm::NO_ERROR,
|
||||
decryptor_->QueryStatus(kLevelDefault,
|
||||
wvcdm::QUERY_KEY_CURRENT_SRM_VERSION,
|
||||
&value));
|
||||
decryptor_->QueryStatus(
|
||||
kLevelDefault, wvcdm::QUERY_KEY_CURRENT_SRM_VERSION, &value));
|
||||
|
||||
EXPECT_EQ(wvcdm::NO_ERROR,
|
||||
decryptor_->QueryStatus(
|
||||
kLevelDefault, wvcdm::QUERY_KEY_PROVISIONING_MODEL, &value));
|
||||
// These are the only valid values for Android devices.
|
||||
EXPECT_TRUE(value == wvcdm::QUERY_VALUE_KEYBOX ||
|
||||
value == wvcdm::QUERY_VALUE_OEM_CERTIFICATE);
|
||||
}
|
||||
|
||||
TEST_F(WvCdmRequestLicenseTest, QueryStatusL3) {
|
||||
@@ -4937,6 +4943,13 @@ TEST_F(WvCdmRequestLicenseTest, QueryStatusL3) {
|
||||
ASSERT_FALSE(ss.fail());
|
||||
EXPECT_TRUE(ss.eof());
|
||||
EXPECT_LE(10u, api_version);
|
||||
|
||||
EXPECT_EQ(wvcdm::NO_ERROR,
|
||||
decryptor_->QueryStatus(
|
||||
kLevel3, wvcdm::QUERY_KEY_PROVISIONING_MODEL, &value));
|
||||
// These are the only valid values for Android devices.
|
||||
EXPECT_TRUE(value == wvcdm::QUERY_VALUE_KEYBOX ||
|
||||
value == wvcdm::QUERY_VALUE_OEM_CERTIFICATE);
|
||||
}
|
||||
|
||||
TEST_F(WvCdmRequestLicenseTest, QueryOemCryptoSessionId) {
|
||||
|
||||
Reference in New Issue
Block a user