Support Device Unprovisioning
Merge of https://widevine-internal-review.googlesource.com/#/c/10845/ from the widevine cdm repo. Bug: 12247651 Change-Id: Ice6ec95865640fa2f736c7a9f09956395d648337
This commit is contained in:
@@ -81,6 +81,8 @@ class WVDrmPlugin : public android::DrmPlugin,
|
||||
Vector<uint8_t>& certificate,
|
||||
Vector<uint8_t>& wrapped_key);
|
||||
|
||||
virtual status_t unprovisionDevice();
|
||||
|
||||
virtual status_t getSecureStops(List<Vector<uint8_t> >& secureStops);
|
||||
|
||||
virtual status_t releaseSecureStops(const Vector<uint8_t>& ssRelease);
|
||||
|
||||
@@ -375,6 +375,19 @@ status_t WVDrmPlugin::provideProvisionResponse(
|
||||
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) {
|
||||
CdmUsageInfo cdmUsageInfo;
|
||||
CdmResponseType res = mCDM->GetUsageInfo(&cdmUsageInfo);
|
||||
|
||||
@@ -66,6 +66,8 @@ class MockCDM : public WvContentDecryptionModule {
|
||||
|
||||
MOCK_METHOD1(GetUsageInfo, CdmResponseType(CdmUsageInfo*));
|
||||
|
||||
MOCK_METHOD1(Unprovision, CdmResponseType(CdmSecurityLevel));
|
||||
|
||||
MOCK_METHOD1(ReleaseUsageInfo,
|
||||
CdmResponseType(const CdmUsageInfoReleaseMessage&));
|
||||
|
||||
@@ -554,6 +556,44 @@ TEST_F(WVDrmPluginTest, HandlesProvisioningResponses) {
|
||||
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) {
|
||||
StrictMock<MockCDM> cdm;
|
||||
StrictMock<MockCrypto> crypto;
|
||||
|
||||
Reference in New Issue
Block a user