1414 * limitations under the License.
1515 */
1616
17+ #include < assert.h>
1718#include < jni.h>
1819
1920#include " app/src/assert.h"
@@ -86,7 +87,8 @@ METHOD_LOOKUP_DEFINITION(signinmethodquery,
8687
8788// clang-format off
8889#define JNI_LISTENER_CALLBACK_METHODS (X ) \
89- X (Constructor, " <init>" , " (J)V" )
90+ X (Constructor, " <init>" , " (J)V" ), \
91+ X (Disconnect, " disconnect" , " ()V" )
9092// clang-format on
9193METHOD_LOOKUP_DECLARATION (jnilistener, JNI_LISTENER_CALLBACK_METHODS)
9294METHOD_LOOKUP_DEFINITION (
@@ -95,7 +97,8 @@ METHOD_LOOKUP_DEFINITION(
9597
9698// clang-format off
9799#define JNI_ID_TOKEN_LISTENER_CALLBACK_METHODS (X ) \
98- X (Constructor, " <init>" , " (J)V" )
100+ X (Constructor, " <init>" , " (J)V" ), \
101+ X (Disconnect, " disconnect" , " ()V" )
99102// clang-format on
100103METHOD_LOOKUP_DECLARATION (jni_id_token_listener,
101104 JNI_ID_TOKEN_LISTENER_CALLBACK_METHODS)
@@ -217,6 +220,7 @@ void* CreatePlatformAuth(App* app, void* app_impl) {
217220 // Create the FirebaseAuth class in Java.
218221 jobject j_auth_impl = env->CallStaticObjectMethod (
219222 auth::GetClass (), auth::GetMethodId (auth::kGetInstance ), j_app);
223+ assert (env->ExceptionCheck () == false );
220224
221225 // Ensure the reference hangs around.
222226 void * auth_impl = nullptr ;
@@ -237,6 +241,7 @@ void Auth::InitPlatformAuth(AuthData* auth_data) {
237241 env->CallVoidMethod (AuthImpl (auth_data),
238242 auth::GetMethodId (auth::kAddAuthStateListener ),
239243 j_listener);
244+ assert (env->ExceptionCheck () == false );
240245 // Convert listener from local to global ref, so it stays around.
241246 SetImplFromLocalRef (env, j_listener, &auth_data->listener_impl );
242247
@@ -250,6 +255,7 @@ void Auth::InitPlatformAuth(AuthData* auth_data) {
250255 env->CallVoidMethod (AuthImpl (auth_data),
251256 auth::GetMethodId (auth::kAddIdTokenListener ),
252257 j_id_token_listener);
258+ assert (env->ExceptionCheck () == false );
253259 // Convert listener from local to global ref, so it stays around.
254260 SetImplFromLocalRef (env, j_id_token_listener,
255261 &auth_data->id_token_listener_impl );
@@ -266,12 +272,21 @@ void Auth::DestroyPlatformAuth(AuthData* auth_data) {
266272
267273 // Unregister the JniAuthStateListener and IdTokenListener from the
268274 // FirebaseAuth class.
275+ env->CallVoidMethod (static_cast <jobject>(auth_data->listener_impl ),
276+ jnilistener::GetMethodId (jnilistener::kDisconnect ));
277+ assert (env->ExceptionCheck () == false );
269278 env->CallVoidMethod (AuthImpl (auth_data),
270279 auth::GetMethodId (auth::kRemoveAuthStateListener ),
271280 static_cast <jobject>(auth_data->listener_impl ));
281+ assert (env->ExceptionCheck () == false );
282+ env->CallVoidMethod (static_cast <jobject>(auth_data->id_token_listener_impl ),
283+ jni_id_token_listener::GetMethodId (
284+ jni_id_token_listener::kDisconnect ));
285+ assert (env->ExceptionCheck () == false );
272286 env->CallVoidMethod (AuthImpl (auth_data),
273287 auth::GetMethodId (auth::kRemoveIdTokenListener ),
274288 static_cast <jobject>(auth_data->id_token_listener_impl ));
289+ assert (env->ExceptionCheck () == false );
275290
276291 // Deleting our global references should trigger the FirebaseAuth class and
277292 // FirebaseUser Java objects to be deleted.
@@ -327,12 +342,14 @@ static void ReadProviderResult(
327342 if (list != nullptr ) {
328343 const int num_providers =
329344 env->CallIntMethod (list, util::list::GetMethodId (util::list::kSize ));
345+ assert (env->ExceptionCheck () == false );
330346 data->providers .resize (num_providers);
331347
332348 for (int i = 0 ; i < num_providers; ++i) {
333349 // provider local reference is released in JniStringToString().
334350 jstring provider = static_cast <jstring>(env->CallObjectMethod (
335351 list, util::list::GetMethodId (util::list::kGet ), i));
352+ assert (env->ExceptionCheck () == false );
336353 data->providers [i] = JniStringToString (env, provider);
337354 }
338355 env->DeleteLocalRef (list);
0 commit comments