Pass CdmIdentifier to UsageInfo Methods am: 43b8522b70 am: ed50683f80
am: 6db464ca54
Change-Id: I4dd629161df7a1f1e07b1913d8cf422ef58e8c6d
This commit is contained in:
@@ -99,13 +99,17 @@ class WvContentDecryptionModule : public android::RefBase, public TimerHandler {
|
|||||||
|
|
||||||
// Secure stop related methods
|
// Secure stop related methods
|
||||||
virtual CdmResponseType GetUsageInfo(const std::string& app_id,
|
virtual CdmResponseType GetUsageInfo(const std::string& app_id,
|
||||||
|
const CdmIdentifier& identifier,
|
||||||
CdmUsageInfo* usage_info);
|
CdmUsageInfo* usage_info);
|
||||||
virtual CdmResponseType GetUsageInfo(const std::string& app_id,
|
virtual CdmResponseType GetUsageInfo(const std::string& app_id,
|
||||||
const CdmSecureStopId& ssid,
|
const CdmSecureStopId& ssid,
|
||||||
|
const CdmIdentifier& identifier,
|
||||||
CdmUsageInfo* usage_info);
|
CdmUsageInfo* usage_info);
|
||||||
virtual CdmResponseType ReleaseAllUsageInfo(const std::string& app_id);
|
virtual CdmResponseType ReleaseAllUsageInfo(const std::string& app_id,
|
||||||
|
const CdmIdentifier& identifier);
|
||||||
virtual CdmResponseType ReleaseUsageInfo(
|
virtual CdmResponseType ReleaseUsageInfo(
|
||||||
const CdmUsageInfoReleaseMessage& message);
|
const CdmUsageInfoReleaseMessage& message,
|
||||||
|
const CdmIdentifier& identifier);
|
||||||
|
|
||||||
// Accept encrypted buffer and decrypt data.
|
// Accept encrypted buffer and decrypt data.
|
||||||
// Decryption parameters that need to be specified are
|
// Decryption parameters that need to be specified are
|
||||||
|
|||||||
@@ -303,8 +303,9 @@ CdmResponseType WvContentDecryptionModule::Unprovision(
|
|||||||
}
|
}
|
||||||
|
|
||||||
CdmResponseType WvContentDecryptionModule::GetUsageInfo(
|
CdmResponseType WvContentDecryptionModule::GetUsageInfo(
|
||||||
const std::string& app_id, CdmUsageInfo* usage_info) {
|
const std::string& app_id, const CdmIdentifier& identifier,
|
||||||
CdmEngine* cdm_engine = EnsureCdmForIdentifier(kDefaultCdmIdentifier);
|
CdmUsageInfo* usage_info) {
|
||||||
|
CdmEngine* cdm_engine = EnsureCdmForIdentifier(identifier);
|
||||||
CdmResponseType sts;
|
CdmResponseType sts;
|
||||||
M_TIME(
|
M_TIME(
|
||||||
sts = cdm_engine->GetUsageInfo(
|
sts = cdm_engine->GetUsageInfo(
|
||||||
@@ -319,8 +320,9 @@ CdmResponseType WvContentDecryptionModule::GetUsageInfo(
|
|||||||
CdmResponseType WvContentDecryptionModule::GetUsageInfo(
|
CdmResponseType WvContentDecryptionModule::GetUsageInfo(
|
||||||
const std::string& app_id,
|
const std::string& app_id,
|
||||||
const CdmSecureStopId& ssid,
|
const CdmSecureStopId& ssid,
|
||||||
|
const CdmIdentifier& identifier,
|
||||||
CdmUsageInfo* usage_info) {
|
CdmUsageInfo* usage_info) {
|
||||||
CdmEngine* cdm_engine = EnsureCdmForIdentifier(kDefaultCdmIdentifier);
|
CdmEngine* cdm_engine = EnsureCdmForIdentifier(identifier);
|
||||||
CdmResponseType sts;
|
CdmResponseType sts;
|
||||||
M_TIME(
|
M_TIME(
|
||||||
sts = cdm_engine->GetUsageInfo(
|
sts = cdm_engine->GetUsageInfo(
|
||||||
@@ -334,8 +336,8 @@ CdmResponseType WvContentDecryptionModule::GetUsageInfo(
|
|||||||
}
|
}
|
||||||
|
|
||||||
CdmResponseType WvContentDecryptionModule::ReleaseAllUsageInfo(
|
CdmResponseType WvContentDecryptionModule::ReleaseAllUsageInfo(
|
||||||
const std::string& app_id) {
|
const std::string& app_id, const CdmIdentifier& identifier) {
|
||||||
CdmEngine* cdm_engine = EnsureCdmForIdentifier(kDefaultCdmIdentifier);
|
CdmEngine* cdm_engine = EnsureCdmForIdentifier(identifier);
|
||||||
CdmResponseType sts;
|
CdmResponseType sts;
|
||||||
M_TIME(
|
M_TIME(
|
||||||
sts = cdm_engine->ReleaseAllUsageInfo(
|
sts = cdm_engine->ReleaseAllUsageInfo(
|
||||||
@@ -347,8 +349,9 @@ CdmResponseType WvContentDecryptionModule::ReleaseAllUsageInfo(
|
|||||||
}
|
}
|
||||||
|
|
||||||
CdmResponseType WvContentDecryptionModule::ReleaseUsageInfo(
|
CdmResponseType WvContentDecryptionModule::ReleaseUsageInfo(
|
||||||
const CdmUsageInfoReleaseMessage& message) {
|
const CdmUsageInfoReleaseMessage& message,
|
||||||
CdmEngine* cdm_engine = EnsureCdmForIdentifier(kDefaultCdmIdentifier);
|
const CdmIdentifier& identifier) {
|
||||||
|
CdmEngine* cdm_engine = EnsureCdmForIdentifier(identifier);
|
||||||
CdmResponseType sts;
|
CdmResponseType sts;
|
||||||
M_TIME(
|
M_TIME(
|
||||||
sts = cdm_engine->ReleaseUsageInfo(
|
sts = cdm_engine->ReleaseUsageInfo(
|
||||||
|
|||||||
@@ -969,15 +969,17 @@ TEST_F(WvCdmExtendedDurationTest, UsageOverflowTest) {
|
|||||||
uint32_t num_usage_info = 0;
|
uint32_t num_usage_info = 0;
|
||||||
CdmUsageInfo usage_info;
|
CdmUsageInfo usage_info;
|
||||||
CdmUsageInfoReleaseMessage release_msg;
|
CdmUsageInfoReleaseMessage release_msg;
|
||||||
CdmResponseType status = decryptor_.GetUsageInfo("", &usage_info);
|
CdmResponseType status = decryptor_.GetUsageInfo(
|
||||||
|
"", kDefaultCdmIdentifier, &usage_info);
|
||||||
EXPECT_EQ(usage_info.empty() ? NO_ERROR : KEY_MESSAGE, status);
|
EXPECT_EQ(usage_info.empty() ? NO_ERROR : KEY_MESSAGE, status);
|
||||||
while (usage_info.size() > 0) {
|
while (usage_info.size() > 0) {
|
||||||
for (size_t i = 0; i < usage_info.size(); ++i) {
|
for (size_t i = 0; i < usage_info.size(); ++i) {
|
||||||
release_msg =
|
release_msg =
|
||||||
GetUsageInfoResponse(g_license_server, g_client_auth, usage_info[i]);
|
GetUsageInfoResponse(g_license_server, g_client_auth, usage_info[i]);
|
||||||
EXPECT_EQ(NO_ERROR, decryptor_.ReleaseUsageInfo(release_msg));
|
EXPECT_EQ(NO_ERROR, decryptor_.ReleaseUsageInfo(release_msg,
|
||||||
|
kDefaultCdmIdentifier));
|
||||||
}
|
}
|
||||||
status = decryptor_.GetUsageInfo("", &usage_info);
|
status = decryptor_.GetUsageInfo("", kDefaultCdmIdentifier, &usage_info);
|
||||||
switch (status) {
|
switch (status) {
|
||||||
case KEY_MESSAGE: EXPECT_FALSE(usage_info.empty()); break;
|
case KEY_MESSAGE: EXPECT_FALSE(usage_info.empty()); break;
|
||||||
case NO_ERROR: EXPECT_TRUE(usage_info.empty()); break;
|
case NO_ERROR: EXPECT_TRUE(usage_info.empty()); break;
|
||||||
@@ -1406,7 +1408,8 @@ TEST_P(WvCdmStreamingUsageReportTest, UsageTest) {
|
|||||||
uint32_t num_usage_info = 0;
|
uint32_t num_usage_info = 0;
|
||||||
CdmUsageInfo usage_info;
|
CdmUsageInfo usage_info;
|
||||||
CdmUsageInfoReleaseMessage release_msg;
|
CdmUsageInfoReleaseMessage release_msg;
|
||||||
CdmResponseType status = decryptor_.GetUsageInfo("", &usage_info);
|
CdmResponseType status = decryptor_.GetUsageInfo(
|
||||||
|
"", kDefaultCdmIdentifier, &usage_info);
|
||||||
EXPECT_EQ(usage_info.empty() ? NO_ERROR : KEY_MESSAGE, status);
|
EXPECT_EQ(usage_info.empty() ? NO_ERROR : KEY_MESSAGE, status);
|
||||||
while (usage_info.size() > 0) {
|
while (usage_info.size() > 0) {
|
||||||
for (size_t i = 0; i < usage_info.size(); ++i) {
|
for (size_t i = 0; i < usage_info.size(); ++i) {
|
||||||
@@ -1416,9 +1419,10 @@ TEST_P(WvCdmStreamingUsageReportTest, UsageTest) {
|
|||||||
expected_seconds_since_last_playback);
|
expected_seconds_since_last_playback);
|
||||||
release_msg =
|
release_msg =
|
||||||
GetUsageInfoResponse(g_license_server, g_client_auth, usage_info[i]);
|
GetUsageInfoResponse(g_license_server, g_client_auth, usage_info[i]);
|
||||||
EXPECT_EQ(NO_ERROR, decryptor_.ReleaseUsageInfo(release_msg));
|
EXPECT_EQ(NO_ERROR, decryptor_.ReleaseUsageInfo(release_msg,
|
||||||
|
kDefaultCdmIdentifier));
|
||||||
}
|
}
|
||||||
status = decryptor_.GetUsageInfo("", &usage_info);
|
status = decryptor_.GetUsageInfo("", kDefaultCdmIdentifier, &usage_info);
|
||||||
switch (status) {
|
switch (status) {
|
||||||
case KEY_MESSAGE:
|
case KEY_MESSAGE:
|
||||||
EXPECT_FALSE(usage_info.empty());
|
EXPECT_FALSE(usage_info.empty());
|
||||||
|
|||||||
@@ -2540,7 +2540,8 @@ TEST_P(WvCdmUsageTest, WithClientId) {
|
|||||||
uint32_t num_usage_info = 0;
|
uint32_t num_usage_info = 0;
|
||||||
CdmUsageInfo usage_info;
|
CdmUsageInfo usage_info;
|
||||||
CdmUsageInfoReleaseMessage release_msg;
|
CdmUsageInfoReleaseMessage release_msg;
|
||||||
CdmResponseType status = decryptor_.GetUsageInfo(app_id, &usage_info);
|
CdmResponseType status = decryptor_.GetUsageInfo(
|
||||||
|
app_id, kDefaultCdmIdentifier, &usage_info);
|
||||||
EXPECT_EQ(usage_info.empty() ? NO_ERROR : KEY_MESSAGE, status);
|
EXPECT_EQ(usage_info.empty() ? NO_ERROR : KEY_MESSAGE, status);
|
||||||
|
|
||||||
// Validate signed renewal request
|
// Validate signed renewal request
|
||||||
@@ -2571,7 +2572,8 @@ TEST_P(WvCdmUsageTest, WithClientId) {
|
|||||||
|
|
||||||
release_msg =
|
release_msg =
|
||||||
GetUsageInfoResponse(g_license_server, g_client_auth, usage_info[0]);
|
GetUsageInfoResponse(g_license_server, g_client_auth, usage_info[0]);
|
||||||
EXPECT_EQ(NO_ERROR, decryptor_.ReleaseUsageInfo(release_msg));
|
EXPECT_EQ(NO_ERROR, decryptor_.ReleaseUsageInfo(release_msg,
|
||||||
|
kDefaultCdmIdentifier));
|
||||||
}
|
}
|
||||||
|
|
||||||
INSTANTIATE_TEST_CASE_P(
|
INSTANTIATE_TEST_CASE_P(
|
||||||
@@ -2622,20 +2624,23 @@ TEST_F(WvCdmRequestLicenseTest, UsageInfoRetryTest) {
|
|||||||
uint32_t num_usage_info = 0;
|
uint32_t num_usage_info = 0;
|
||||||
CdmUsageInfo usage_info;
|
CdmUsageInfo usage_info;
|
||||||
CdmUsageInfoReleaseMessage release_msg;
|
CdmUsageInfoReleaseMessage release_msg;
|
||||||
CdmResponseType status = decryptor_.GetUsageInfo(app_id, &usage_info);
|
CdmResponseType status = decryptor_.GetUsageInfo(
|
||||||
|
app_id, kDefaultCdmIdentifier, &usage_info);
|
||||||
EXPECT_EQ(usage_info.empty() ? NO_ERROR : KEY_MESSAGE, status);
|
EXPECT_EQ(usage_info.empty() ? NO_ERROR : KEY_MESSAGE, status);
|
||||||
|
|
||||||
// Discard and retry to verify usage reports can be generated multiple times
|
// Discard and retry to verify usage reports can be generated multiple times
|
||||||
// before release.
|
// before release.
|
||||||
status = decryptor_.GetUsageInfo(app_id, &usage_info);
|
status = decryptor_.GetUsageInfo(app_id, kDefaultCdmIdentifier, &usage_info);
|
||||||
EXPECT_EQ(usage_info.empty() ? NO_ERROR : KEY_MESSAGE, status);
|
EXPECT_EQ(usage_info.empty() ? NO_ERROR : KEY_MESSAGE, status);
|
||||||
while (usage_info.size() > 0) {
|
while (usage_info.size() > 0) {
|
||||||
for (size_t i = 0; i < usage_info.size(); ++i) {
|
for (size_t i = 0; i < usage_info.size(); ++i) {
|
||||||
release_msg =
|
release_msg =
|
||||||
GetUsageInfoResponse(g_license_server, g_client_auth, usage_info[i]);
|
GetUsageInfoResponse(g_license_server, g_client_auth, usage_info[i]);
|
||||||
EXPECT_EQ(NO_ERROR, decryptor_.ReleaseUsageInfo(release_msg));
|
EXPECT_EQ(NO_ERROR, decryptor_.ReleaseUsageInfo(release_msg,
|
||||||
|
kDefaultCdmIdentifier));
|
||||||
}
|
}
|
||||||
status = decryptor_.GetUsageInfo(app_id, &usage_info);
|
status = decryptor_.GetUsageInfo(
|
||||||
|
app_id, kDefaultCdmIdentifier, &usage_info);
|
||||||
switch (status) {
|
switch (status) {
|
||||||
case KEY_MESSAGE:
|
case KEY_MESSAGE:
|
||||||
EXPECT_FALSE(usage_info.empty());
|
EXPECT_FALSE(usage_info.empty());
|
||||||
@@ -2718,15 +2723,19 @@ TEST_P(WvCdmUsageInfoTest, UsageInfo) {
|
|||||||
CdmUsageInfo usage_info;
|
CdmUsageInfo usage_info;
|
||||||
CdmUsageInfoReleaseMessage release_msg;
|
CdmUsageInfoReleaseMessage release_msg;
|
||||||
CdmResponseType status =
|
CdmResponseType status =
|
||||||
decryptor_.GetUsageInfo(usage_info_data->app_id, &usage_info);
|
decryptor_.GetUsageInfo(usage_info_data->app_id, kDefaultCdmIdentifier,
|
||||||
|
&usage_info);
|
||||||
EXPECT_EQ(usage_info.empty() ? NO_ERROR : KEY_MESSAGE, status);
|
EXPECT_EQ(usage_info.empty() ? NO_ERROR : KEY_MESSAGE, status);
|
||||||
while (usage_info.size() > 0) {
|
while (usage_info.size() > 0) {
|
||||||
for (size_t i = 0; i < usage_info.size(); ++i) {
|
for (size_t i = 0; i < usage_info.size(); ++i) {
|
||||||
release_msg =
|
release_msg =
|
||||||
GetUsageInfoResponse(g_license_server, g_client_auth, usage_info[i]);
|
GetUsageInfoResponse(g_license_server, g_client_auth, usage_info[i]);
|
||||||
EXPECT_EQ(NO_ERROR, decryptor_.ReleaseUsageInfo(release_msg));
|
EXPECT_EQ(
|
||||||
|
NO_ERROR,
|
||||||
|
decryptor_.ReleaseUsageInfo(release_msg, kDefaultCdmIdentifier));
|
||||||
}
|
}
|
||||||
status = decryptor_.GetUsageInfo(usage_info_data->app_id, &usage_info);
|
status = decryptor_.GetUsageInfo(usage_info_data->app_id,
|
||||||
|
kDefaultCdmIdentifier, &usage_info);
|
||||||
EXPECT_EQ(usage_info.empty() ? NO_ERROR : KEY_MESSAGE, status);
|
EXPECT_EQ(usage_info.empty() ? NO_ERROR : KEY_MESSAGE, status);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -2795,25 +2804,46 @@ TEST_F(WvCdmRequestLicenseTest, UsageReleaseAllTest) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
CdmUsageInfo usage_info;
|
CdmUsageInfo usage_info;
|
||||||
EXPECT_EQ(KEY_MESSAGE, decryptor_.GetUsageInfo(app_id_empty, &usage_info));
|
EXPECT_EQ(
|
||||||
|
KEY_MESSAGE,
|
||||||
|
decryptor_.GetUsageInfo(app_id_empty, kDefaultCdmIdentifier,
|
||||||
|
&usage_info));
|
||||||
EXPECT_TRUE(usage_info.size() > 0);
|
EXPECT_TRUE(usage_info.size() > 0);
|
||||||
EXPECT_EQ(KEY_MESSAGE,
|
EXPECT_EQ(
|
||||||
decryptor_.GetUsageInfo(app_id_not_empty, &usage_info));
|
KEY_MESSAGE,
|
||||||
|
decryptor_.GetUsageInfo(app_id_not_empty, kDefaultCdmIdentifier,
|
||||||
|
&usage_info));
|
||||||
EXPECT_TRUE(usage_info.size() > 0);
|
EXPECT_TRUE(usage_info.size() > 0);
|
||||||
|
|
||||||
|
|
||||||
EXPECT_EQ(NO_ERROR, decryptor_.ReleaseAllUsageInfo(app_id_not_empty));
|
EXPECT_EQ(
|
||||||
|
NO_ERROR,
|
||||||
|
decryptor_.ReleaseAllUsageInfo(app_id_not_empty, kDefaultCdmIdentifier));
|
||||||
|
|
||||||
EXPECT_EQ(NO_ERROR, decryptor_.GetUsageInfo(app_id_not_empty, &usage_info));
|
EXPECT_EQ(
|
||||||
|
NO_ERROR,
|
||||||
|
decryptor_.GetUsageInfo(app_id_not_empty, kDefaultCdmIdentifier,
|
||||||
|
&usage_info));
|
||||||
EXPECT_TRUE(usage_info.empty());
|
EXPECT_TRUE(usage_info.empty());
|
||||||
EXPECT_EQ(KEY_MESSAGE, decryptor_.GetUsageInfo(app_id_empty, &usage_info));
|
EXPECT_EQ(
|
||||||
|
KEY_MESSAGE,
|
||||||
|
decryptor_.GetUsageInfo(app_id_empty, kDefaultCdmIdentifier,
|
||||||
|
&usage_info));
|
||||||
EXPECT_TRUE(usage_info.size() > 0);
|
EXPECT_TRUE(usage_info.size() > 0);
|
||||||
|
|
||||||
EXPECT_EQ(NO_ERROR, decryptor_.ReleaseAllUsageInfo(app_id_empty));
|
EXPECT_EQ(
|
||||||
|
NO_ERROR,
|
||||||
|
decryptor_.ReleaseAllUsageInfo(app_id_empty, kDefaultCdmIdentifier));
|
||||||
|
|
||||||
EXPECT_EQ(NO_ERROR, decryptor_.GetUsageInfo(app_id_not_empty, &usage_info));
|
EXPECT_EQ(
|
||||||
|
NO_ERROR,
|
||||||
|
decryptor_.GetUsageInfo(app_id_not_empty, kDefaultCdmIdentifier,
|
||||||
|
&usage_info));
|
||||||
EXPECT_TRUE(usage_info.empty());
|
EXPECT_TRUE(usage_info.empty());
|
||||||
EXPECT_EQ(NO_ERROR, decryptor_.GetUsageInfo(app_id_empty, &usage_info));
|
EXPECT_EQ(
|
||||||
|
NO_ERROR,
|
||||||
|
decryptor_.GetUsageInfo(app_id_empty, kDefaultCdmIdentifier,
|
||||||
|
&usage_info));
|
||||||
EXPECT_TRUE(usage_info.empty());
|
EXPECT_TRUE(usage_info.empty());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -424,7 +424,7 @@ status_t WVDrmPlugin::getSecureStop(const Vector<uint8_t>& ssid,
|
|||||||
CdmUsageInfo cdmUsageInfo;
|
CdmUsageInfo cdmUsageInfo;
|
||||||
CdmSecureStopId cdmSsid(ssid.begin(), ssid.end());
|
CdmSecureStopId cdmSsid(ssid.begin(), ssid.end());
|
||||||
CdmResponseType res = mCDM->GetUsageInfo(
|
CdmResponseType res = mCDM->GetUsageInfo(
|
||||||
mPropertySet.app_id(), cdmSsid, &cdmUsageInfo);
|
mPropertySet.app_id(), cdmSsid, mCdmIdentifier, &cdmUsageInfo);
|
||||||
if (isCdmResponseTypeSuccess(res)) {
|
if (isCdmResponseTypeSuccess(res)) {
|
||||||
secureStop.clear();
|
secureStop.clear();
|
||||||
for (CdmUsageInfo::const_iterator iter = cdmUsageInfo.begin();
|
for (CdmUsageInfo::const_iterator iter = cdmUsageInfo.begin();
|
||||||
@@ -442,7 +442,7 @@ status_t WVDrmPlugin::getSecureStop(const Vector<uint8_t>& ssid,
|
|||||||
status_t WVDrmPlugin::getSecureStops(List<Vector<uint8_t> >& secureStops) {
|
status_t WVDrmPlugin::getSecureStops(List<Vector<uint8_t> >& secureStops) {
|
||||||
CdmUsageInfo cdmUsageInfo;
|
CdmUsageInfo cdmUsageInfo;
|
||||||
CdmResponseType res =
|
CdmResponseType res =
|
||||||
mCDM->GetUsageInfo(mPropertySet.app_id(), &cdmUsageInfo);
|
mCDM->GetUsageInfo(mPropertySet.app_id(), mCdmIdentifier, &cdmUsageInfo);
|
||||||
if (isCdmResponseTypeSuccess(res)) {
|
if (isCdmResponseTypeSuccess(res)) {
|
||||||
secureStops.clear();
|
secureStops.clear();
|
||||||
for (CdmUsageInfo::const_iterator iter = cdmUsageInfo.begin();
|
for (CdmUsageInfo::const_iterator iter = cdmUsageInfo.begin();
|
||||||
@@ -457,7 +457,8 @@ status_t WVDrmPlugin::getSecureStops(List<Vector<uint8_t> >& secureStops) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
status_t WVDrmPlugin::releaseAllSecureStops() {
|
status_t WVDrmPlugin::releaseAllSecureStops() {
|
||||||
CdmResponseType res = mCDM->ReleaseAllUsageInfo(mPropertySet.app_id());
|
CdmResponseType res = mCDM->ReleaseAllUsageInfo(mPropertySet.app_id(),
|
||||||
|
mCdmIdentifier);
|
||||||
return mapCdmResponseType(res);
|
return mapCdmResponseType(res);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -466,7 +467,7 @@ status_t WVDrmPlugin::releaseSecureStops(const Vector<uint8_t>& ssRelease) {
|
|||||||
return android::BAD_VALUE;
|
return android::BAD_VALUE;
|
||||||
}
|
}
|
||||||
CdmUsageInfoReleaseMessage cdmMessage(ssRelease.begin(), ssRelease.end());
|
CdmUsageInfoReleaseMessage cdmMessage(ssRelease.begin(), ssRelease.end());
|
||||||
CdmResponseType res = mCDM->ReleaseUsageInfo(cdmMessage);
|
CdmResponseType res = mCDM->ReleaseUsageInfo(cdmMessage, mCdmIdentifier);
|
||||||
return mapCdmResponseType(res);
|
return mapCdmResponseType(res);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -533,12 +533,20 @@ Return<void> WVDrmPlugin::getSecureStop(
|
|||||||
return Void();
|
return Void();
|
||||||
}
|
}
|
||||||
const std::vector<uint8_t> id = toVector(secureStopId);
|
const std::vector<uint8_t> id = toVector(secureStopId);
|
||||||
|
SecureStop secureStop;
|
||||||
|
|
||||||
|
CdmIdentifier identifier;
|
||||||
|
status_t status = mCdmIdentifierBuilder.getCdmIdentifier(&identifier);
|
||||||
|
if (status != android::OK) {
|
||||||
|
_hidl_cb(toStatus(status), secureStop);
|
||||||
|
return Void();
|
||||||
|
}
|
||||||
|
|
||||||
CdmUsageInfo cdmUsageInfo;
|
CdmUsageInfo cdmUsageInfo;
|
||||||
CdmSecureStopId cdmSsId(id.begin(), id.end());
|
CdmSecureStopId cdmSsId(id.begin(), id.end());
|
||||||
CdmResponseType res = mCDM->GetUsageInfo(
|
CdmResponseType res = mCDM->GetUsageInfo(
|
||||||
mPropertySet.app_id(), cdmSsId, &cdmUsageInfo);
|
mPropertySet.app_id(), cdmSsId, identifier, &cdmUsageInfo);
|
||||||
|
|
||||||
SecureStop secureStop;
|
|
||||||
if (isCdmResponseTypeSuccess(res)) {
|
if (isCdmResponseTypeSuccess(res)) {
|
||||||
std::vector<uint8_t> cdmStopVec;
|
std::vector<uint8_t> cdmStopVec;
|
||||||
for (CdmUsageInfo::const_iterator iter = cdmUsageInfo.begin();
|
for (CdmUsageInfo::const_iterator iter = cdmUsageInfo.begin();
|
||||||
@@ -557,10 +565,18 @@ Return<void> WVDrmPlugin::getSecureStop(
|
|||||||
Return<void> WVDrmPlugin::getSecureStops(getSecureStops_cb _hidl_cb) {
|
Return<void> WVDrmPlugin::getSecureStops(getSecureStops_cb _hidl_cb) {
|
||||||
|
|
||||||
std::list<std::vector<uint8_t> > secureStops;
|
std::list<std::vector<uint8_t> > secureStops;
|
||||||
|
std::vector<SecureStop> secureStopsVec;
|
||||||
|
|
||||||
|
CdmIdentifier identifier;
|
||||||
|
status_t status = mCdmIdentifierBuilder.getCdmIdentifier(&identifier);
|
||||||
|
if (status != android::OK) {
|
||||||
|
_hidl_cb(toStatus(status), toHidlVec(secureStopsVec));
|
||||||
|
return Void();
|
||||||
|
}
|
||||||
|
|
||||||
CdmUsageInfo cdmUsageInfo;
|
CdmUsageInfo cdmUsageInfo;
|
||||||
CdmResponseType res =
|
CdmResponseType res =
|
||||||
mCDM->GetUsageInfo(mPropertySet.app_id(), &cdmUsageInfo);
|
mCDM->GetUsageInfo(mPropertySet.app_id(), identifier, &cdmUsageInfo);
|
||||||
|
|
||||||
if (isCdmResponseTypeSuccess(res)) {
|
if (isCdmResponseTypeSuccess(res)) {
|
||||||
secureStops.clear();
|
secureStops.clear();
|
||||||
@@ -572,7 +588,6 @@ Return<void> WVDrmPlugin::getSecureStops(getSecureStops_cb _hidl_cb) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
std::vector<SecureStop> secureStopsVec;
|
|
||||||
std::list<std::vector<uint8_t> >::iterator iter = secureStops.begin();
|
std::list<std::vector<uint8_t> >::iterator iter = secureStops.begin();
|
||||||
while (iter != secureStops.end()) {
|
while (iter != secureStops.end()) {
|
||||||
SecureStop secureStop;
|
SecureStop secureStop;
|
||||||
@@ -586,7 +601,14 @@ Return<void> WVDrmPlugin::getSecureStops(getSecureStops_cb _hidl_cb) {
|
|||||||
|
|
||||||
Return<Status> WVDrmPlugin::releaseAllSecureStops() {
|
Return<Status> WVDrmPlugin::releaseAllSecureStops() {
|
||||||
|
|
||||||
CdmResponseType res = mCDM->ReleaseAllUsageInfo(mPropertySet.app_id());
|
CdmIdentifier identifier;
|
||||||
|
status_t status = mCdmIdentifierBuilder.getCdmIdentifier(&identifier);
|
||||||
|
if (status != android::OK) {
|
||||||
|
return toStatus(status);
|
||||||
|
}
|
||||||
|
|
||||||
|
CdmResponseType res = mCDM->ReleaseAllUsageInfo(mPropertySet.app_id(),
|
||||||
|
identifier);
|
||||||
return toStatus(mapCdmResponseType(res));
|
return toStatus(mapCdmResponseType(res));
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -596,9 +618,16 @@ Return<Status> WVDrmPlugin::releaseSecureStop(
|
|||||||
if (!secureStopId.size()) {
|
if (!secureStopId.size()) {
|
||||||
return Status::BAD_VALUE;
|
return Status::BAD_VALUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
CdmIdentifier identifier;
|
||||||
|
status_t status = mCdmIdentifierBuilder.getCdmIdentifier(&identifier);
|
||||||
|
if (status != android::OK) {
|
||||||
|
return toStatus(status);
|
||||||
|
}
|
||||||
|
|
||||||
const std::vector<uint8_t> ssRelease = toVector(secureStopId);
|
const std::vector<uint8_t> ssRelease = toVector(secureStopId);
|
||||||
CdmUsageInfoReleaseMessage cdmMessage(ssRelease.begin(), ssRelease.end());
|
CdmUsageInfoReleaseMessage cdmMessage(ssRelease.begin(), ssRelease.end());
|
||||||
CdmResponseType res = mCDM->ReleaseUsageInfo(cdmMessage);
|
CdmResponseType res = mCDM->ReleaseUsageInfo(cdmMessage, identifier);
|
||||||
return toStatus(mapCdmResponseType(res));
|
return toStatus(mapCdmResponseType(res));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -164,17 +164,20 @@ class MockCDM : public WvContentDecryptionModule {
|
|||||||
MOCK_METHOD2(Unprovision, CdmResponseType(CdmSecurityLevel,
|
MOCK_METHOD2(Unprovision, CdmResponseType(CdmSecurityLevel,
|
||||||
const CdmIdentifier&));
|
const CdmIdentifier&));
|
||||||
|
|
||||||
MOCK_METHOD2(GetUsageInfo, CdmResponseType(const std::string&,
|
|
||||||
CdmUsageInfo*));
|
|
||||||
|
|
||||||
MOCK_METHOD3(GetUsageInfo, CdmResponseType(const std::string&,
|
MOCK_METHOD3(GetUsageInfo, CdmResponseType(const std::string&,
|
||||||
const CdmSecureStopId&,
|
const CdmIdentifier&,
|
||||||
CdmUsageInfo*));
|
CdmUsageInfo*));
|
||||||
|
|
||||||
MOCK_METHOD1(ReleaseAllUsageInfo, CdmResponseType(const std::string&));
|
MOCK_METHOD4(GetUsageInfo, CdmResponseType(const std::string&,
|
||||||
|
const CdmSecureStopId&,
|
||||||
|
const CdmIdentifier&,
|
||||||
|
CdmUsageInfo*));
|
||||||
|
|
||||||
MOCK_METHOD1(ReleaseUsageInfo,
|
MOCK_METHOD2(ReleaseAllUsageInfo, CdmResponseType(const std::string&,
|
||||||
CdmResponseType(const CdmUsageInfoReleaseMessage&));
|
const CdmIdentifier&));
|
||||||
|
|
||||||
|
MOCK_METHOD2(ReleaseUsageInfo,
|
||||||
|
CdmResponseType(const CdmUsageInfoReleaseMessage&, const CdmIdentifier&));
|
||||||
|
|
||||||
MOCK_METHOD1(IsValidServiceCertificate, bool(const std::string&));
|
MOCK_METHOD1(IsValidServiceCertificate, bool(const std::string&));
|
||||||
};
|
};
|
||||||
@@ -946,8 +949,8 @@ TEST_F(WVDrmPluginTest, GetsSecureStops) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const char* app_id = "my_app_id";
|
const char* app_id = "my_app_id";
|
||||||
EXPECT_CALL(*cdm, GetUsageInfo(StrEq(app_id), _))
|
EXPECT_CALL(*cdm, GetUsageInfo(StrEq(app_id), _, _))
|
||||||
.WillOnce(DoAll(SetArgPointee<1>(cdmStops),
|
.WillOnce(DoAll(SetArgPointee<2>(cdmStops),
|
||||||
testing::Return(wvcdm::NO_ERROR)));
|
testing::Return(wvcdm::NO_ERROR)));
|
||||||
|
|
||||||
std::list<std::vector<uint8_t> > stops;
|
std::list<std::vector<uint8_t> > stops;
|
||||||
@@ -987,7 +990,7 @@ TEST_F(WVDrmPluginTest, ReleasesAllSecureStops) {
|
|||||||
StrictMock<MockCrypto> crypto;
|
StrictMock<MockCrypto> crypto;
|
||||||
std::string appPackageName;
|
std::string appPackageName;
|
||||||
|
|
||||||
EXPECT_CALL(*cdm, ReleaseAllUsageInfo(StrEq("")))
|
EXPECT_CALL(*cdm, ReleaseAllUsageInfo(StrEq(""), _))
|
||||||
.Times(1);
|
.Times(1);
|
||||||
|
|
||||||
WVDrmPlugin plugin(cdm.get(), appPackageName, &crypto, false);
|
WVDrmPlugin plugin(cdm.get(), appPackageName, &crypto, false);
|
||||||
@@ -1015,7 +1018,8 @@ TEST_F(WVDrmPluginTest, ReleasesSecureStop) {
|
|||||||
message.assign(messageRaw, messageRaw + kMessageSize);
|
message.assign(messageRaw, messageRaw + kMessageSize);
|
||||||
|
|
||||||
EXPECT_CALL(*cdm, ReleaseUsageInfo(ElementsAreArray(messageRaw,
|
EXPECT_CALL(*cdm, ReleaseUsageInfo(ElementsAreArray(messageRaw,
|
||||||
kMessageSize)))
|
kMessageSize),
|
||||||
|
_))
|
||||||
.Times(1);
|
.Times(1);
|
||||||
|
|
||||||
WVDrmPlugin plugin(cdm.get(), appPackageName, &crypto, false);
|
WVDrmPlugin plugin(cdm.get(), appPackageName, &crypto, false);
|
||||||
|
|||||||
@@ -82,17 +82,20 @@ class MockCDM : public WvContentDecryptionModule {
|
|||||||
MOCK_METHOD2(Unprovision, CdmResponseType(CdmSecurityLevel,
|
MOCK_METHOD2(Unprovision, CdmResponseType(CdmSecurityLevel,
|
||||||
const CdmIdentifier&));
|
const CdmIdentifier&));
|
||||||
|
|
||||||
MOCK_METHOD2(GetUsageInfo, CdmResponseType(const std::string&,
|
|
||||||
CdmUsageInfo*));
|
|
||||||
|
|
||||||
MOCK_METHOD3(GetUsageInfo, CdmResponseType(const std::string&,
|
MOCK_METHOD3(GetUsageInfo, CdmResponseType(const std::string&,
|
||||||
const CdmSecureStopId&,
|
const CdmIdentifier&,
|
||||||
CdmUsageInfo*));
|
CdmUsageInfo*));
|
||||||
|
|
||||||
MOCK_METHOD1(ReleaseAllUsageInfo, CdmResponseType(const std::string&));
|
MOCK_METHOD4(GetUsageInfo, CdmResponseType(const std::string&,
|
||||||
|
const CdmSecureStopId&,
|
||||||
|
const CdmIdentifier&,
|
||||||
|
CdmUsageInfo*));
|
||||||
|
|
||||||
MOCK_METHOD1(ReleaseUsageInfo,
|
MOCK_METHOD2(ReleaseAllUsageInfo, CdmResponseType(const std::string&,
|
||||||
CdmResponseType(const CdmUsageInfoReleaseMessage&));
|
const CdmIdentifier&));
|
||||||
|
|
||||||
|
MOCK_METHOD2(ReleaseUsageInfo,
|
||||||
|
CdmResponseType(const CdmUsageInfoReleaseMessage&, const CdmIdentifier&));
|
||||||
|
|
||||||
MOCK_METHOD1(IsValidServiceCertificate, bool(const std::string&));
|
MOCK_METHOD1(IsValidServiceCertificate, bool(const std::string&));
|
||||||
};
|
};
|
||||||
@@ -755,8 +758,8 @@ TEST_F(WVDrmPluginTest, GetsSecureStops) {
|
|||||||
cdmStops.push_back(string(stopsRaw[i], stopsRaw[i] + kStopSize));
|
cdmStops.push_back(string(stopsRaw[i], stopsRaw[i] + kStopSize));
|
||||||
}
|
}
|
||||||
|
|
||||||
EXPECT_CALL(*cdm, GetUsageInfo(StrEq(app_id), _))
|
EXPECT_CALL(*cdm, GetUsageInfo(StrEq(app_id), _, _))
|
||||||
.WillOnce(DoAll(SetArgPointee<1>(cdmStops),
|
.WillOnce(DoAll(SetArgPointee<2>(cdmStops),
|
||||||
Return(wvcdm::NO_ERROR)));
|
Return(wvcdm::NO_ERROR)));
|
||||||
|
|
||||||
List<Vector<uint8_t> > stops;
|
List<Vector<uint8_t> > stops;
|
||||||
@@ -786,7 +789,7 @@ TEST_F(WVDrmPluginTest, ReleasesAllSecureStops) {
|
|||||||
status_t res = plugin.setPropertyString(String8("appId"), String8(""));
|
status_t res = plugin.setPropertyString(String8("appId"), String8(""));
|
||||||
ASSERT_EQ(OK, res);
|
ASSERT_EQ(OK, res);
|
||||||
|
|
||||||
EXPECT_CALL(*cdm, ReleaseAllUsageInfo(StrEq("")))
|
EXPECT_CALL(*cdm, ReleaseAllUsageInfo(StrEq(""), _))
|
||||||
.Times(1);
|
.Times(1);
|
||||||
|
|
||||||
res = plugin.releaseAllSecureStops();
|
res = plugin.releaseAllSecureStops();
|
||||||
@@ -808,7 +811,8 @@ TEST_F(WVDrmPluginTest, ReleasesSecureStops) {
|
|||||||
message.appendArray(messageRaw, kMessageSize);
|
message.appendArray(messageRaw, kMessageSize);
|
||||||
|
|
||||||
EXPECT_CALL(*cdm, ReleaseUsageInfo(ElementsAreArray(messageRaw,
|
EXPECT_CALL(*cdm, ReleaseUsageInfo(ElementsAreArray(messageRaw,
|
||||||
kMessageSize)))
|
kMessageSize),
|
||||||
|
_))
|
||||||
.Times(1);
|
.Times(1);
|
||||||
|
|
||||||
status_t res = plugin.releaseSecureStops(message);
|
status_t res = plugin.releaseSecureStops(message);
|
||||||
|
|||||||
Reference in New Issue
Block a user