Bug 1291387 - Handle errors when using EventDispatcher.sendRequestForResult in GeckoView JS modules r=jchen draft
authorJames Willcox <snorp@snorp.net>
Tue, 20 Feb 2018 10:16:33 -0600
changeset 757619 afac35463d52566a3e18d8ec27f283ee1e03cb6d
parent 757618 f6eb6f03952fac7ab67d6562ff6f0fac30548737
child 757620 b7419df1793d3119aa631b286f4d1cb43323b004
push id99801
push userbmo:snorp@snorp.net
push dateTue, 20 Feb 2018 22:23:15 +0000
reviewersjchen
bugs1291387
milestone60.0a1
Bug 1291387 - Handle errors when using EventDispatcher.sendRequestForResult in GeckoView JS modules r=jchen MozReview-Commit-ID: EOLO59ZbTOR
mobile/android/modules/geckoview/GeckoViewNavigation.jsm
--- 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.