From 468498380197b32061007be414cc969be273a30e Mon Sep 17 00:00:00 2001 From: Robert Shih Date: Thu, 15 Dec 2022 10:30:51 -0800 Subject: [PATCH] MediaDrm: throw exceptions with extra info Bug: 249941041 Test: MediaDrmParameterizedTests Change-Id: I48b88b6d549277e38d86124f11bc99300ff8319b --- media/jni/android_media_MediaDrm.cpp | 37 ++++++++++++++++++++-------- 1 file changed, 27 insertions(+), 10 deletions(-) diff --git a/media/jni/android_media_MediaDrm.cpp b/media/jni/android_media_MediaDrm.cpp index c9d920fe0445a..681d76ab0dfee 100644 --- a/media/jni/android_media_MediaDrm.cpp +++ b/media/jni/android_media_MediaDrm.cpp @@ -244,6 +244,20 @@ jobject hidlLogMessagesToJavaList(JNIEnv *env, const VectorDeleteLocalRef(_detailMessage); + } + return _status; +} } // namespace anonymous // ---------------------------------------------------------------------------- @@ -393,8 +407,8 @@ static void throwStateException(JNIEnv *env, const char *msg, const DrmStatus &e jint jerr = MediaErrorToJavaError(err); jobject exception = env->NewObject(gFields.stateException.classId, - gFields.stateException.init, static_cast(jerr), - env->NewStringUTF(msg)); + gFields.stateException.init, env->NewStringUTF(msg), static_cast(jerr), + err.getCdmErr(), err.getOemErr(), err.getContext()); env->Throw(static_cast(exception)); } @@ -411,10 +425,13 @@ static void throwSessionException(JNIEnv *env, const char *msg, const DrmStatus } jobject exception = env->NewObject(gFields.sessionException.classId, - gFields.sessionException.init, static_cast(err), - env->NewStringUTF(msg)); + gFields.sessionException.init, + env->NewStringUTF(msg), + jErrorCode, + err.getCdmErr(), + err.getOemErr(), + err.getContext()); - env->SetIntField(exception, gFields.sessionException.errorCode, jErrorCode); env->Throw(static_cast(exception)); } @@ -437,13 +454,13 @@ static bool throwExceptionAsNecessary( jniThrowException(env, "java/lang/UnsupportedOperationException", msg); return true; } else if (err == ERROR_DRM_NOT_PROVISIONED) { - jniThrowException(env, "android/media/NotProvisionedException", msg); + drmThrowException(env, "android/media/NotProvisionedException", err, msg); return true; } else if (err == ERROR_DRM_RESOURCE_BUSY) { - jniThrowException(env, "android/media/ResourceBusyException", msg); + drmThrowException(env, "android/media/ResourceBusyException", err, msg); return true; } else if (err == ERROR_DRM_DEVICE_REVOKED) { - jniThrowException(env, "android/media/DeniedByServerException", msg); + drmThrowException(env, "android/media/DeniedByServerException", err, msg); return true; } else if (err == DEAD_OBJECT) { jniThrowException(env, "android/media/MediaDrmResetException", msg); @@ -915,11 +932,11 @@ static void android_media_MediaDrm_native_init(JNIEnv *env) { gFields.arraylistClassId = static_cast(env->NewGlobalRef(clazz)); FIND_CLASS(clazz, "android/media/MediaDrm$MediaDrmStateException"); - GET_METHOD_ID(gFields.stateException.init, clazz, "", "(ILjava/lang/String;)V"); + GET_METHOD_ID(gFields.stateException.init, clazz, "", "(Ljava/lang/String;IIII)V"); gFields.stateException.classId = static_cast(env->NewGlobalRef(clazz)); FIND_CLASS(clazz, "android/media/MediaDrm$SessionException"); - GET_METHOD_ID(gFields.sessionException.init, clazz, "", "(ILjava/lang/String;)V"); + GET_METHOD_ID(gFields.sessionException.init, clazz, "", "(Ljava/lang/String;IIII)V"); gFields.sessionException.classId = static_cast(env->NewGlobalRef(clazz)); GET_FIELD_ID(gFields.sessionException.errorCode, clazz, "mErrorCode", "I");