Merge "MediaDrm: throw exceptions with extra info" am: c0d6224bd2

Original change: https://android-review.googlesource.com/c/platform/frameworks/base/+/2359443

Change-Id: I23e3ba1a9370519381b050e3525cb38e008cbd8c
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
Robert Shih
2022-12-18 16:47:51 +00:00
committed by Automerger Merge Worker

View File

@@ -244,6 +244,20 @@ jobject hidlLogMessagesToJavaList(JNIEnv *env, const Vector<drm::V1_4::LogMessag
} }
return arrayList; return arrayList;
} }
int drmThrowException(JNIEnv* env, const char *className, const DrmStatus &err, const char *msg) {
using namespace android::jnihelp;
jstring _detailMessage = CreateExceptionMsg(env, msg);
int _status = ThrowException(env, className, "(Ljava/lang/String;III)V",
_detailMessage,
err.getCdmErr(),
err.getOemErr(),
err.getContext());
if (_detailMessage != NULL) {
env->DeleteLocalRef(_detailMessage);
}
return _status;
}
} // namespace anonymous } // namespace anonymous
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
@@ -393,8 +407,8 @@ static void throwStateException(JNIEnv *env, const char *msg, const DrmStatus &e
jint jerr = MediaErrorToJavaError(err); jint jerr = MediaErrorToJavaError(err);
jobject exception = env->NewObject(gFields.stateException.classId, jobject exception = env->NewObject(gFields.stateException.classId,
gFields.stateException.init, static_cast<int>(jerr), gFields.stateException.init, env->NewStringUTF(msg), static_cast<int>(jerr),
env->NewStringUTF(msg)); err.getCdmErr(), err.getOemErr(), err.getContext());
env->Throw(static_cast<jthrowable>(exception)); env->Throw(static_cast<jthrowable>(exception));
} }
@@ -411,10 +425,13 @@ static void throwSessionException(JNIEnv *env, const char *msg, const DrmStatus
} }
jobject exception = env->NewObject(gFields.sessionException.classId, jobject exception = env->NewObject(gFields.sessionException.classId,
gFields.sessionException.init, static_cast<int>(err), gFields.sessionException.init,
env->NewStringUTF(msg)); env->NewStringUTF(msg),
jErrorCode,
err.getCdmErr(),
err.getOemErr(),
err.getContext());
env->SetIntField(exception, gFields.sessionException.errorCode, jErrorCode);
env->Throw(static_cast<jthrowable>(exception)); env->Throw(static_cast<jthrowable>(exception));
} }
@@ -437,13 +454,13 @@ static bool throwExceptionAsNecessary(
jniThrowException(env, "java/lang/UnsupportedOperationException", msg); jniThrowException(env, "java/lang/UnsupportedOperationException", msg);
return true; return true;
} else if (err == ERROR_DRM_NOT_PROVISIONED) { } else if (err == ERROR_DRM_NOT_PROVISIONED) {
jniThrowException(env, "android/media/NotProvisionedException", msg); drmThrowException(env, "android/media/NotProvisionedException", err, msg);
return true; return true;
} else if (err == ERROR_DRM_RESOURCE_BUSY) { } else if (err == ERROR_DRM_RESOURCE_BUSY) {
jniThrowException(env, "android/media/ResourceBusyException", msg); drmThrowException(env, "android/media/ResourceBusyException", err, msg);
return true; return true;
} else if (err == ERROR_DRM_DEVICE_REVOKED) { } else if (err == ERROR_DRM_DEVICE_REVOKED) {
jniThrowException(env, "android/media/DeniedByServerException", msg); drmThrowException(env, "android/media/DeniedByServerException", err, msg);
return true; return true;
} else if (err == DEAD_OBJECT) { } else if (err == DEAD_OBJECT) {
jniThrowException(env, "android/media/MediaDrmResetException", msg); jniThrowException(env, "android/media/MediaDrmResetException", msg);
@@ -915,11 +932,11 @@ static void android_media_MediaDrm_native_init(JNIEnv *env) {
gFields.arraylistClassId = static_cast<jclass>(env->NewGlobalRef(clazz)); gFields.arraylistClassId = static_cast<jclass>(env->NewGlobalRef(clazz));
FIND_CLASS(clazz, "android/media/MediaDrm$MediaDrmStateException"); FIND_CLASS(clazz, "android/media/MediaDrm$MediaDrmStateException");
GET_METHOD_ID(gFields.stateException.init, clazz, "<init>", "(ILjava/lang/String;)V"); GET_METHOD_ID(gFields.stateException.init, clazz, "<init>", "(Ljava/lang/String;IIII)V");
gFields.stateException.classId = static_cast<jclass>(env->NewGlobalRef(clazz)); gFields.stateException.classId = static_cast<jclass>(env->NewGlobalRef(clazz));
FIND_CLASS(clazz, "android/media/MediaDrm$SessionException"); FIND_CLASS(clazz, "android/media/MediaDrm$SessionException");
GET_METHOD_ID(gFields.sessionException.init, clazz, "<init>", "(ILjava/lang/String;)V"); GET_METHOD_ID(gFields.sessionException.init, clazz, "<init>", "(Ljava/lang/String;IIII)V");
gFields.sessionException.classId = static_cast<jclass>(env->NewGlobalRef(clazz)); gFields.sessionException.classId = static_cast<jclass>(env->NewGlobalRef(clazz));
GET_FIELD_ID(gFields.sessionException.errorCode, clazz, "mErrorCode", "I"); GET_FIELD_ID(gFields.sessionException.errorCode, clazz, "mErrorCode", "I");