Bug 1291387 - Reply with an error in GeckoSessionHandler when no listener registered r=jchen draft
authorJames Willcox <snorp@snorp.net>
Tue, 20 Feb 2018 10:12:42 -0600
changeset 757618 f6eb6f03952fac7ab67d6562ff6f0fac30548737
parent 757617 78ffad781013b86caa153e0c8715f4cec4c2329f
child 757619 afac35463d52566a3e18d8ec27f283ee1e03cb6d
push id99801
push userbmo:snorp@snorp.net
push dateTue, 20 Feb 2018 22:23:15 +0000
reviewersjchen
bugs1291387
milestone60.0a1
Bug 1291387 - Reply with an error in GeckoSessionHandler when no listener registered r=jchen This eliminates a race where the JS side thinks it has a listener, and expects a reply, but will never get one because it was unregistered while the message was in-flight. GeckoSessionHandler dispatches on the Android UI thread, which is where listeners are set/unset, so we do not need any synchronization. MozReview-Commit-ID: 5W3hsQ1cmb7
mobile/android/geckoview/src/main/java/org/mozilla/gecko/GeckoSessionHandler.java
--- a/mobile/android/geckoview/src/main/java/org/mozilla/gecko/GeckoSessionHandler.java
+++ b/mobile/android/geckoview/src/main/java/org/mozilla/gecko/GeckoSessionHandler.java
@@ -79,16 +79,18 @@ import android.util.Log;
     public void handleMessage(final String event, final GeckoBundle message,
                               final EventCallback callback) {
         if (DEBUG) {
             Log.d(LOGTAG, mModuleName + " handleMessage: event = " + event);
         }
 
         if (mListener != null) {
             handleMessage(mListener, event, message, callback);
+        } else {
+            callback.sendError("No listener registered");
         }
     }
 
     protected abstract void handleMessage(final Listener listener,
                                           final String event,
                                           final GeckoBundle message,
                                           final EventCallback callback);
 }