am 3099da61: Merge "Support Device Unprovisioning" into lmp-dev
* commit '3099da6170222d2c9e03d8b735b570872bdc5ae5': Support Device Unprovisioning
This commit is contained in:
@@ -81,6 +81,8 @@ class WVDrmPlugin : public android::DrmPlugin,
|
|||||||
Vector<uint8_t>& certificate,
|
Vector<uint8_t>& certificate,
|
||||||
Vector<uint8_t>& wrapped_key);
|
Vector<uint8_t>& wrapped_key);
|
||||||
|
|
||||||
|
virtual status_t unprovisionDevice();
|
||||||
|
|
||||||
virtual status_t getSecureStops(List<Vector<uint8_t> >& secureStops);
|
virtual status_t getSecureStops(List<Vector<uint8_t> >& secureStops);
|
||||||
|
|
||||||
virtual status_t releaseSecureStops(const Vector<uint8_t>& ssRelease);
|
virtual status_t releaseSecureStops(const Vector<uint8_t>& ssRelease);
|
||||||
|
|||||||
@@ -375,6 +375,19 @@ status_t WVDrmPlugin::provideProvisionResponse(
|
|||||||
return mapCdmResponseType(res);
|
return mapCdmResponseType(res);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
status_t WVDrmPlugin::unprovisionDevice() {
|
||||||
|
CdmResponseType res1 = mCDM->Unprovision(kSecurityLevelL1);
|
||||||
|
CdmResponseType res3 = mCDM->Unprovision(kSecurityLevelL3);
|
||||||
|
if (!isCdmResponseTypeSuccess(res1))
|
||||||
|
{
|
||||||
|
return mapCdmResponseType(res1);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return mapCdmResponseType(res3);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
status_t WVDrmPlugin::getSecureStops(List<Vector<uint8_t> >& secureStops) {
|
status_t WVDrmPlugin::getSecureStops(List<Vector<uint8_t> >& secureStops) {
|
||||||
CdmUsageInfo cdmUsageInfo;
|
CdmUsageInfo cdmUsageInfo;
|
||||||
CdmResponseType res = mCDM->GetUsageInfo(&cdmUsageInfo);
|
CdmResponseType res = mCDM->GetUsageInfo(&cdmUsageInfo);
|
||||||
|
|||||||
@@ -66,6 +66,8 @@ class MockCDM : public WvContentDecryptionModule {
|
|||||||
|
|
||||||
MOCK_METHOD1(GetUsageInfo, CdmResponseType(CdmUsageInfo*));
|
MOCK_METHOD1(GetUsageInfo, CdmResponseType(CdmUsageInfo*));
|
||||||
|
|
||||||
|
MOCK_METHOD1(Unprovision, CdmResponseType(CdmSecurityLevel));
|
||||||
|
|
||||||
MOCK_METHOD1(ReleaseUsageInfo,
|
MOCK_METHOD1(ReleaseUsageInfo,
|
||||||
CdmResponseType(const CdmUsageInfoReleaseMessage&));
|
CdmResponseType(const CdmUsageInfoReleaseMessage&));
|
||||||
|
|
||||||
@@ -554,6 +556,44 @@ TEST_F(WVDrmPluginTest, HandlesProvisioningResponses) {
|
|||||||
ASSERT_EQ(OK, res);
|
ASSERT_EQ(OK, res);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TEST_F(WVDrmPluginTest, UnprovisionsDevice) {
|
||||||
|
StrictMock<MockCDM> cdm;
|
||||||
|
StrictMock<MockCrypto> crypto;
|
||||||
|
WVDrmPlugin plugin(&cdm, &crypto);
|
||||||
|
|
||||||
|
EXPECT_CALL(cdm, Unprovision(kSecurityLevelL1))
|
||||||
|
.Times(1);
|
||||||
|
EXPECT_CALL(cdm, Unprovision(kSecurityLevelL3))
|
||||||
|
.Times(1);
|
||||||
|
|
||||||
|
status_t res = plugin.unprovisionDevice();
|
||||||
|
ASSERT_EQ(OK, res);
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST_F(WVDrmPluginTest, MuxesUnprovisioningErrors) {
|
||||||
|
StrictMock<MockCDM> cdm;
|
||||||
|
StrictMock<MockCrypto> crypto;
|
||||||
|
WVDrmPlugin plugin(&cdm, &crypto);
|
||||||
|
|
||||||
|
// Tests that both Unprovisions are called even if one fails. Also tests that
|
||||||
|
// no matter which fails, the function always propagates the error.
|
||||||
|
EXPECT_CALL(cdm, Unprovision(kSecurityLevelL1))
|
||||||
|
.WillOnce(Return(wvcdm::UNKNOWN_ERROR))
|
||||||
|
.WillOnce(Return(wvcdm::NO_ERROR))
|
||||||
|
.WillOnce(Return(wvcdm::UNKNOWN_ERROR));
|
||||||
|
EXPECT_CALL(cdm, Unprovision(kSecurityLevelL3))
|
||||||
|
.WillOnce(Return(wvcdm::NO_ERROR))
|
||||||
|
.WillOnce(Return(wvcdm::UNKNOWN_ERROR))
|
||||||
|
.WillOnce(Return(wvcdm::UNKNOWN_ERROR));
|
||||||
|
|
||||||
|
status_t res = plugin.unprovisionDevice();
|
||||||
|
ASSERT_NE(OK, res);
|
||||||
|
res = plugin.unprovisionDevice();
|
||||||
|
ASSERT_NE(OK, res);
|
||||||
|
res = plugin.unprovisionDevice();
|
||||||
|
ASSERT_NE(OK, res);
|
||||||
|
}
|
||||||
|
|
||||||
TEST_F(WVDrmPluginTest, GetsSecureStops) {
|
TEST_F(WVDrmPluginTest, GetsSecureStops) {
|
||||||
StrictMock<MockCDM> cdm;
|
StrictMock<MockCDM> cdm;
|
||||||
StrictMock<MockCrypto> crypto;
|
StrictMock<MockCrypto> crypto;
|
||||||
|
|||||||
Reference in New Issue
Block a user