diff options
author | Jeff Tinker <jtinker@google.com> | 2014-08-04 20:48:20 +0000 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2014-08-01 13:51:29 +0000 |
commit | b63d63b8afa25694d1973988d7acdfebcd01a18d (patch) | |
tree | 88a37a7a3e984c9c6e63532bed01f95be7224412 | |
parent | 44622db93a24219123facbbe14259000f90de728 (diff) | |
parent | 68b15554f6dca3b056eac517fe5fa2fd4ee80a33 (diff) | |
download | frameworks_av-b63d63b8afa25694d1973988d7acdfebcd01a18d.zip frameworks_av-b63d63b8afa25694d1973988d7acdfebcd01a18d.tar.gz frameworks_av-b63d63b8afa25694d1973988d7acdfebcd01a18d.tar.bz2 |
Merge "Allow device to be unprovisioned" into lmp-dev
-rw-r--r-- | drm/mediadrm/plugins/clearkey/DrmPlugin.h | 4 | ||||
-rw-r--r-- | include/media/IDrm.h | 2 | ||||
-rw-r--r-- | media/libmedia/IDrm.cpp | 20 | ||||
-rw-r--r-- | media/libmediaplayerservice/Drm.cpp | 17 | ||||
-rw-r--r-- | media/libmediaplayerservice/Drm.h | 2 |
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); |