From 4d1d84e8a05a35673d76db0eb4f7954015a24d18 Mon Sep 17 00:00:00 2001 From: Edwin Wong Date: Wed, 4 Jan 2017 09:37:49 -0800 Subject: [PATCH] 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 --- media/java/android/media/MediaDrm.java | 6 ++++-- media/jni/android_media_MediaDrm.cpp | 23 ++++++++++++++++------- media/jni/android_media_MediaDrm.h | 4 ++-- 3 files changed, 22 insertions(+), 11 deletions(-) diff --git a/media/java/android/media/MediaDrm.java b/media/java/android/media/MediaDrm.java index 2650ee0ee3b3f..2723826cc92e6 100644 --- a/media/java/android/media/MediaDrm.java +++ b/media/java/android/media/MediaDrm.java @@ -28,6 +28,7 @@ import android.annotation.NonNull; 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 @@ public final class MediaDrm { * It's easier to create it here than in C++. */ native_setup(new WeakReference(this), - getByteArrayFromUUID(uuid)); + getByteArrayFromUUID(uuid), ActivityThread.currentOpPackageName()); } /** @@ -1307,7 +1308,8 @@ public final class MediaDrm { 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 7a98c954747f1..ea35f78a3a7a3 100644 --- a/media/jni/android_media_MediaDrm.cpp +++ b/media/jni/android_media_MediaDrm.cpp @@ -335,9 +335,10 @@ static sp GetDrm(JNIEnv *env, jobject thiz) { } 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 @@ sp JDrm::MakeDrm() { } // static -sp JDrm::MakeDrm(const uint8_t uuid[16]) { +sp JDrm::MakeDrm(const uint8_t uuid[16], const String8 &appPackageName) { sp 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_init(JNIEnv *env) { 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 @@ static void android_media_MediaDrm_native_setup( return; } - sp 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 drm = new JDrm(env, thiz, uuid.array(), packageName); status_t err = drm->initCheck(); @@ -1439,7 +1448,7 @@ static const JNINativeMethod gMethods[] = { { "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 b7b8e5dd6b6cb..b9356f30bae8c 100644 --- a/media/jni/android_media_MediaDrm.h +++ b/media/jni/android_media_MediaDrm.h @@ -39,7 +39,7 @@ public: 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 getDrm() { return mDrm; } @@ -61,7 +61,7 @@ private: Mutex mLock; static sp MakeDrm(); - static sp MakeDrm(const uint8_t uuid[16]); + static sp MakeDrm(const uint8_t uuid[16], const String8 &appPackageName); DISALLOW_EVIL_CONSTRUCTORS(JDrm); };