Pass CdmIdentifier to UsageInfo Methods

am: 43b8522b70

Change-Id: Ida417b7043115f54c9b8daaa75d417dea39aafe6
This commit is contained in:
John W. Bruce
2017-06-19 23:32:23 +00:00
committed by android-build-merger
8 changed files with 144 additions and 65 deletions

View File

@@ -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

View File

@@ -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(

View File

@@ -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());

View File

@@ -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());
} }

View File

@@ -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);
} }

View File

@@ -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));
} }

View File

@@ -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);

View File

@@ -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);