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