Allowing a Java object field to be null in a new JNI helper method.
Java objects in the API should be allowed to be null in some cases.
Specifically, a null value for maxBitrateBps in RtpParameters.java
has a specific meaning and doesn't imply an error has occurred.
NOTRY=True
Review URL: https://codereview.webrtc.org/1853523002
Cr-Original-Commit-Position: refs/heads/master@{#12221}
Cr-Mirrored-From: https://chromium.googlesource.com/external/webrtc
Cr-Mirrored-Commit: 60631775fa067042b025b04f4307ea16dd6311b0
diff --git a/api/java/jni/jni_helpers.cc b/api/java/jni/jni_helpers.cc
index f42abc7..052dcf9 100644
--- a/api/java/jni/jni_helpers.cc
+++ b/api/java/jni/jni_helpers.cc
@@ -176,7 +176,13 @@
jobject GetObjectField(JNIEnv* jni, jobject object, jfieldID id) {
jobject o = jni->GetObjectField(object, id);
CHECK_EXCEPTION(jni) << "error during GetObjectField";
- RTC_CHECK(o) << "GetObjectField returned NULL";
+ RTC_CHECK(!IsNull(jni, o)) << "GetObjectField returned NULL";
+ return o;
+}
+
+jobject GetNullableObjectField(JNIEnv* jni, jobject object, jfieldID id) {
+ jobject o = jni->GetObjectField(object, id);
+ CHECK_EXCEPTION(jni) << "error during GetObjectField";
return o;
}
diff --git a/api/java/jni/jni_helpers.h b/api/java/jni/jni_helpers.h
index 98dcc38..2832df1 100644
--- a/api/java/jni/jni_helpers.h
+++ b/api/java/jni/jni_helpers.h
@@ -64,8 +64,11 @@
jclass GetObjectClass(JNIEnv* jni, jobject object);
+// Throws an exception if the object field is null.
jobject GetObjectField(JNIEnv* jni, jobject object, jfieldID id);
+jobject GetNullableObjectField(JNIEnv* jni, jobject object, jfieldID id);
+
jstring GetStringField(JNIEnv* jni, jobject object, jfieldID id);
jlong GetLongField(JNIEnv* jni, jobject object, jfieldID id);
diff --git a/api/java/jni/peerconnection_jni.cc b/api/java/jni/peerconnection_jni.cc
index 2baff04..a250b70 100644
--- a/api/java/jni/peerconnection_jni.cc
+++ b/api/java/jni/peerconnection_jni.cc
@@ -2044,7 +2044,8 @@
for (jobject j_encoding_parameters : Iterable(jni, j_encodings)) {
webrtc::RtpEncodingParameters encoding;
encoding.active = GetBooleanField(jni, j_encoding_parameters, active_id);
- jobject j_bitrate = GetObjectField(jni, j_encoding_parameters, bitrate_id);
+ jobject j_bitrate =
+ GetNullableObjectField(jni, j_encoding_parameters, bitrate_id);
if (!IsNull(jni, j_bitrate)) {
int bitrate_value = jni->CallIntMethod(j_bitrate, int_value_id);
CHECK_EXCEPTION(jni) << "error during CallIntMethod";
diff --git a/api/java/src/org/webrtc/RtpParameters.java b/api/java/src/org/webrtc/RtpParameters.java
index bd44899..d689517 100644
--- a/api/java/src/org/webrtc/RtpParameters.java
+++ b/api/java/src/org/webrtc/RtpParameters.java
@@ -20,6 +20,7 @@
public class RtpParameters {
public static class Encoding {
public boolean active = true;
+ // A null value means "no maximum bitrate".
public Integer maxBitrateBps;
}