summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJeff Tinker <jtinker@google.com>2014-04-30 10:19:03 -0700
committerJeff Tinker <jtinker@google.com>2014-08-01 17:16:16 +0000
commit68b15554f6dca3b056eac517fe5fa2fd4ee80a33 (patch)
treed6842666f3d062427b56f27c0b9e6e09976389a5
parentfdefe34f40ea6c8964677eaa9107958b0bdf76d0 (diff)
downloadframeworks_av-68b15554f6dca3b056eac517fe5fa2fd4ee80a33.zip
frameworks_av-68b15554f6dca3b056eac517fe5fa2fd4ee80a33.tar.gz
frameworks_av-68b15554f6dca3b056eac517fe5fa2fd4ee80a33.tar.bz2
Allow device to be unprovisioned
bug: 12247651 Change-Id: I564ac8de3da2430342a028f4058e2c5ac2d85d5e
-rw-r--r--drm/mediadrm/plugins/clearkey/DrmPlugin.h4
-rw-r--r--include/media/IDrm.h2
-rw-r--r--media/libmedia/IDrm.cpp20
-rw-r--r--media/libmediaplayerservice/Drm.cpp17
-rw-r--r--media/libmediaplayerservice/Drm.h2
5 files changed, 44 insertions, 1 deletions
diff --git a/drm/mediadrm/plugins/clearkey/DrmPlugin.h b/drm/mediadrm/plugins/clearkey/DrmPlugin.h
index bfbc6bf..27df9cd 100644
--- a/drm/mediadrm/plugins/clearkey/DrmPlugin.h
+++ b/drm/mediadrm/plugins/clearkey/DrmPlugin.h
@@ -104,6 +104,10 @@ public:
return android::ERROR_DRM_CANNOT_HANDLE;
}
+ virtual status_t unprovisionDevice() {
+ return android::ERROR_DRM_CANNOT_HANDLE;
+ }
+
virtual status_t getSecureStops(List<Vector<uint8_t> >& secureStops) {
UNUSED(secureStops);
return android::ERROR_DRM_CANNOT_HANDLE;
diff --git a/include/media/IDrm.h b/include/media/IDrm.h
index 32ae28e..68de87a 100644
--- a/include/media/IDrm.h
+++ b/include/media/IDrm.h
@@ -70,6 +70,8 @@ struct IDrm : public IInterface {
Vector<uint8_t> &certificate,
Vector<uint8_t> &wrappedKey) = 0;
+ virtual status_t unprovisionDevice() = 0;
+
virtual status_t getSecureStops(List<Vector<uint8_t> > &secureStops) = 0;
virtual status_t releaseSecureStops(Vector<uint8_t> const &ssRelease) = 0;
diff --git a/media/libmedia/IDrm.cpp b/media/libmedia/IDrm.cpp
index f1a6a9f..1904839 100644
--- a/media/libmedia/IDrm.cpp
+++ b/media/libmedia/IDrm.cpp
@@ -53,7 +53,8 @@ enum {
SIGN,
SIGN_RSA,
VERIFY,
- SET_LISTENER
+ SET_LISTENER,
+ UNPROVISION_DEVICE
};
struct BpDrm : public BpInterface<IDrm> {
@@ -229,6 +230,15 @@ struct BpDrm : public BpInterface<IDrm> {
return reply.readInt32();
}
+ virtual status_t unprovisionDevice() {
+ Parcel data, reply;
+ data.writeInterfaceToken(IDrm::getInterfaceDescriptor());
+
+ remote()->transact(UNPROVISION_DEVICE, data, &reply);
+
+ return reply.readInt32();
+ }
+
virtual status_t getSecureStops(List<Vector<uint8_t> > &secureStops) {
Parcel data, reply;
data.writeInterfaceToken(IDrm::getInterfaceDescriptor());
@@ -619,6 +629,14 @@ status_t BnDrm::onTransact(
return OK;
}
+ case UNPROVISION_DEVICE:
+ {
+ CHECK_INTERFACE(IDrm, data, reply);
+ status_t result = unprovisionDevice();
+ reply->writeInt32(result);
+ return OK;
+ }
+
case GET_SECURE_STOPS:
{
CHECK_INTERFACE(IDrm, data, reply);
diff --git a/media/libmediaplayerservice/Drm.cpp b/media/libmediaplayerservice/Drm.cpp
index d50037f..d222316 100644
--- a/media/libmediaplayerservice/Drm.cpp
+++ b/media/libmediaplayerservice/Drm.cpp
@@ -417,6 +417,23 @@ status_t Drm::provideProvisionResponse(Vector<uint8_t> const &response,
return mPlugin->provideProvisionResponse(response, certificate, wrappedKey);
}
+status_t Drm::unprovisionDevice() {
+ Mutex::Autolock autoLock(mLock);
+
+ if (mInitCheck != OK) {
+ return mInitCheck;
+ }
+
+ if (mPlugin == NULL) {
+ return -EINVAL;
+ }
+
+ if (!checkPermission("android.permission.REMOVE_DRM_CERTIFICATES")) {
+ return -EPERM;
+ }
+
+ return mPlugin->unprovisionDevice();
+}
status_t Drm::getSecureStops(List<Vector<uint8_t> > &secureStops) {
Mutex::Autolock autoLock(mLock);
diff --git a/media/libmediaplayerservice/Drm.h b/media/libmediaplayerservice/Drm.h
index 3d4b0fc..9e23e2e 100644
--- a/media/libmediaplayerservice/Drm.h
+++ b/media/libmediaplayerservice/Drm.h
@@ -75,6 +75,8 @@ struct Drm : public BnDrm,
Vector<uint8_t> &certificate,
Vector<uint8_t> &wrappedKey);
+ virtual status_t unprovisionDevice();
+
virtual status_t getSecureStops(List<Vector<uint8_t> > &secureStops);
virtual status_t releaseSecureStops(Vector<uint8_t> const &ssRelease);