Bug 1291387 - Handle errors when using EventDispatcher.sendRequestForResult in GeckoView JS modules r=jchen
MozReview-Commit-ID: EOLO59ZbTOR
--- a/mobile/android/modules/geckoview/GeckoViewNavigation.jsm
+++ b/mobile/android/modules/geckoview/GeckoViewNavigation.jsm
@@ -87,16 +87,19 @@ class GeckoViewNavigation extends GeckoV
flags: aFlags
};
debug("dispatch " + JSON.stringify(message));
let handled = undefined;
this.eventDispatcher.sendRequestForResult(message).then(response => {
handled = response;
+ }, () => {
+ // There was an error or listener was not registered in GeckoSession, treat as unhandled.
+ handled = false;
});
Services.tm.spinEventLoopUntil(() => handled !== undefined);
return handled;
}
waitAndSetOpener(sessionId, opener) {
if (!sessionId) {
@@ -133,16 +136,18 @@ class GeckoViewNavigation extends GeckoV
uri: aUri ? aUri.displaySpec : ""
};
let browser = undefined;
this.eventDispatcher.sendRequestForResult(message).then(sessionId => {
return this.waitAndSetOpener(sessionId, aOpener);
}).then(window => {
browser = (window && window.browser);
+ }, () => {
+ browser = null;
});
// Wait indefinitely for app to respond with a browser or null
Services.tm.spinEventLoopUntil(() => browser !== undefined);
return browser;
}
// nsILoadURIDelegate.