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:
John "Juce" Bruce
2014-08-04 13:07:20 -07:00
parent a29883b0a0
commit 4db7780cb5
3 changed files with 55 additions and 0 deletions

View File

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

View File

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

View File

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