Add Property for Provisioning ID
Adds a property that allows applications to get the provisioning-unique serial number. Bug: 9175567 Also fixes some missing mutexes that were causing intermittent failures in calls to OEMCrypto due to concurrency issues. Bug: 9175583 Merge of https://widevine-internal-review.googlesource.com/#/c/5831/ from the Widevine CDM repository Change-Id: I1d7e3ca9f3b06da345022f5f0d64e0c17a5cedca
This commit is contained in:
@@ -382,12 +382,30 @@ status_t WVDrmPlugin::getPropertyByteArray(const String8& name,
|
||||
ALOGE("Error querying CDM status: %u", res);
|
||||
return mapCdmResponseType(res);
|
||||
} else if (!status.count(QUERY_KEY_DEVICE_ID)) {
|
||||
ALOGE("CDM did not report a unique ID");
|
||||
ALOGE("CDM did not report a device unique ID");
|
||||
return kErrorCDMGeneric;
|
||||
}
|
||||
|
||||
const string& uniqueId = status[QUERY_KEY_DEVICE_ID];
|
||||
|
||||
value.clear();
|
||||
value.appendArray(reinterpret_cast<const uint8_t*>(uniqueId.data()),
|
||||
uniqueId.size());
|
||||
} else if (name == "provisioningUniqueId") {
|
||||
CdmQueryMap status;
|
||||
|
||||
CdmResponseType res = mCDM->QueryStatus(&status);
|
||||
|
||||
if (!isCdmResponseTypeSuccess(res)) {
|
||||
ALOGE("Error querying CDM status: %u", res);
|
||||
return mapCdmResponseType(res);
|
||||
} else if (!status.count(QUERY_KEY_PROVISIONING_ID)) {
|
||||
ALOGE("CDM did not report a provisioning unique ID");
|
||||
return kErrorCDMGeneric;
|
||||
}
|
||||
|
||||
const string& uniqueId = status[QUERY_KEY_PROVISIONING_ID];
|
||||
|
||||
value.clear();
|
||||
value.appendArray(reinterpret_cast<const uint8_t*>(uniqueId.data()),
|
||||
uniqueId.size());
|
||||
|
||||
@@ -520,6 +520,10 @@ TEST_F(WVDrmPluginTest, ReturnsExpectedPropertyValues) {
|
||||
CdmQueryMap systemIDMap;
|
||||
systemIDMap[QUERY_KEY_SYSTEM_ID] = systemId;
|
||||
|
||||
static const string provisioningId("Life\0&Everything", 16);
|
||||
CdmQueryMap provisioningIDMap;
|
||||
provisioningIDMap[QUERY_KEY_PROVISIONING_ID] = provisioningId;
|
||||
|
||||
EXPECT_CALL(cdm, QueryStatus(_))
|
||||
.WillOnce(DoAll(SetArgPointee<0>(l1Map),
|
||||
Return(wvcdm::NO_ERROR)))
|
||||
@@ -528,6 +532,8 @@ TEST_F(WVDrmPluginTest, ReturnsExpectedPropertyValues) {
|
||||
.WillOnce(DoAll(SetArgPointee<0>(deviceIDMap),
|
||||
Return(wvcdm::NO_ERROR)))
|
||||
.WillOnce(DoAll(SetArgPointee<0>(systemIDMap),
|
||||
Return(wvcdm::NO_ERROR)))
|
||||
.WillOnce(DoAll(SetArgPointee<0>(provisioningIDMap),
|
||||
Return(wvcdm::NO_ERROR)));
|
||||
|
||||
String8 stringResult;
|
||||
@@ -564,6 +570,11 @@ TEST_F(WVDrmPluginTest, ReturnsExpectedPropertyValues) {
|
||||
res = plugin.getPropertyString(String8("systemId"), stringResult);
|
||||
ASSERT_EQ(OK, res);
|
||||
EXPECT_STREQ(systemId.c_str(), stringResult.string());
|
||||
|
||||
res = plugin.getPropertyByteArray(String8("provisioningUniqueId"), vectorResult);
|
||||
ASSERT_EQ(OK, res);
|
||||
EXPECT_THAT(vectorResult, ElementsAreArray(provisioningId.data(),
|
||||
provisioningId.size()));
|
||||
}
|
||||
|
||||
TEST_F(WVDrmPluginTest, DoesNotGetUnknownProperties) {
|
||||
|
||||
Reference in New Issue
Block a user