Pass application packagename to drm plugin.
Get the application packagename to be used as part of a unique
identifier for drm plugin.
Test: Stream movies through Play Movies, Netflix and
Gts MediaCodecCencPlayer tests.
Verify the application's packagename is reachable in the drm plugin's
debug log.
bug: 27101531
Change-Id: I6473b58d78bc34191aca5896bb1f5fb79107ae47
diff --git a/media/java/android/media/MediaDrm.java b/media/java/android/media/MediaDrm.java
index 2650ee0..2723826 100644
--- a/media/java/android/media/MediaDrm.java
+++ b/media/java/android/media/MediaDrm.java
@@ -28,6 +28,7 @@
import android.annotation.Nullable;
import android.annotation.StringDef;
import android.annotation.SystemApi;
+import android.app.ActivityThread;
import android.os.Handler;
import android.os.Looper;
import android.os.Message;
@@ -213,7 +214,7 @@
* It's easier to create it here than in C++.
*/
native_setup(new WeakReference<MediaDrm>(this),
- getByteArrayFromUUID(uuid));
+ getByteArrayFromUUID(uuid), ActivityThread.currentOpPackageName());
}
/**
@@ -1307,7 +1308,8 @@
public native final void release();
private static native final void native_init();
- private native final void native_setup(Object mediadrm_this, byte[] uuid);
+ private native final void native_setup(Object mediadrm_this, byte[] uuid,
+ String appPackageName);
private native final void native_finalize();
diff --git a/media/jni/android_media_MediaDrm.cpp b/media/jni/android_media_MediaDrm.cpp
index 7a98c95..ea35f78 100644
--- a/media/jni/android_media_MediaDrm.cpp
+++ b/media/jni/android_media_MediaDrm.cpp
@@ -335,9 +335,10 @@
}
JDrm::JDrm(
- JNIEnv *env, jobject thiz, const uint8_t uuid[16]) {
+ JNIEnv *env, jobject thiz, const uint8_t uuid[16],
+ const String8 &appPackageName) {
mObject = env->NewWeakGlobalRef(thiz);
- mDrm = MakeDrm(uuid);
+ mDrm = MakeDrm(uuid, appPackageName);
if (mDrm != NULL) {
mDrm->setListener(this);
}
@@ -369,14 +370,14 @@
}
// static
-sp<IDrm> JDrm::MakeDrm(const uint8_t uuid[16]) {
+sp<IDrm> JDrm::MakeDrm(const uint8_t uuid[16], const String8 &appPackageName) {
sp<IDrm> drm = MakeDrm();
if (drm == NULL) {
return NULL;
}
- status_t err = drm->createPlugin(uuid);
+ status_t err = drm->createPlugin(uuid, appPackageName);
if (err != OK) {
return NULL;
@@ -683,7 +684,7 @@
static void android_media_MediaDrm_native_setup(
JNIEnv *env, jobject thiz,
- jobject weak_this, jbyteArray uuidObj) {
+ jobject weak_this, jbyteArray uuidObj, jstring jappPackageName) {
if (uuidObj == NULL) {
jniThrowException(env, "java/lang/IllegalArgumentException", "uuid is null");
@@ -698,7 +699,15 @@
return;
}
- sp<JDrm> drm = new JDrm(env, thiz, uuid.array());
+ String8 packageName;
+ if (jappPackageName == NULL) {
+ jniThrowException(env, "java/lang/IllegalArgumentException",
+ "application package name cannot be null");
+ return;
+ }
+
+ packageName = JStringToString8(env, jappPackageName);
+ sp<JDrm> drm = new JDrm(env, thiz, uuid.array(), packageName);
status_t err = drm->initCheck();
@@ -1439,7 +1448,7 @@
{ "release", "()V", (void *)android_media_MediaDrm_release },
{ "native_init", "()V", (void *)android_media_MediaDrm_native_init },
- { "native_setup", "(Ljava/lang/Object;[B)V",
+ { "native_setup", "(Ljava/lang/Object;[BLjava/lang/String;)V",
(void *)android_media_MediaDrm_native_setup },
{ "native_finalize", "()V",
diff --git a/media/jni/android_media_MediaDrm.h b/media/jni/android_media_MediaDrm.h
index b7b8e5d..b9356f3 100644
--- a/media/jni/android_media_MediaDrm.h
+++ b/media/jni/android_media_MediaDrm.h
@@ -39,7 +39,7 @@
struct JDrm : public BnDrmClient {
static bool IsCryptoSchemeSupported(const uint8_t uuid[16], const String8 &mimeType);
- JDrm(JNIEnv *env, jobject thiz, const uint8_t uuid[16]);
+ JDrm(JNIEnv *env, jobject thiz, const uint8_t uuid[16], const String8 &appPackageName);
status_t initCheck() const;
sp<IDrm> getDrm() { return mDrm; }
@@ -61,7 +61,7 @@
Mutex mLock;
static sp<IDrm> MakeDrm();
- static sp<IDrm> MakeDrm(const uint8_t uuid[16]);
+ static sp<IDrm> MakeDrm(const uint8_t uuid[16], const String8 &appPackageName);
DISALLOW_EVIL_CONSTRUCTORS(JDrm);
};