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;
   }