Bug 1454202: Part 4b - Remove interstitial callback argument from getInstall* APIs. r?aswan draft
authorKris Maglione <maglione.k@gmail.com>
Sun, 15 Apr 2018 14:20:52 -0700
changeset 782447 b88ea5a05b7e40523b8f257ab149ae6184cb2f19
parent 782446 56fe71ba7939aac6b24e38bd63d94bd1f9ff57fe
child 782448 49677d3f7422c9f2b88fdff736c83e33badb651d
push id106537
push usermaglione.k@gmail.com
push dateMon, 16 Apr 2018 03:19:09 +0000
reviewersaswan
bugs1454202
milestone61.0a1
Bug 1454202: Part 4b - Remove interstitial callback argument from getInstall* APIs. r?aswan MozReview-Commit-ID: ATKWozPZF4d
toolkit/mozapps/extensions/AddonManager.jsm
toolkit/mozapps/extensions/test/xpcshell/test_syncGUID.js
--- a/toolkit/mozapps/extensions/AddonManager.jsm
+++ b/toolkit/mozapps/extensions/AddonManager.jsm
@@ -168,58 +168,16 @@ function safeCall(aCallback, ...aArgs) {
   try {
     aCallback.apply(null, aArgs);
   } catch (e) {
     logger.warn("Exception calling callback", e);
   }
 }
 
 /**
- * Creates a function that will call the passed callback catching and logging
- * any exceptions.
- *
- * @param  aCallback
- *         The callback method to call
- */
-function makeSafe(aCallback) {
-  return function(...aArgs) {
-    safeCall(aCallback, ...aArgs);
-  };
-}
-
-/**
- * Given a promise and an optional callback, either:
- *
- * 1) Returns the promise, if no callback was provided, or,
- * 2) Calls the callback with the promise resolution value, and reports
- *    any errors.
- *
- * @param {Promise} promise
- *        The promise to return, or report to the callback function.
- * @param {function | null} callback
- *        The optional callback function to call with the promise
- *        resolution.
- * @returns {Promise?}
- */
-function promiseOrCallback(promise, callback) {
-  if (!callback)
-    return promise;
-
-  if (typeof callback !== "function")
-    throw Components.Exception("Callback must be a function",
-                               Cr.NS_ERROR_INVALID_ARG);
-
-  promise.then(makeSafe(callback)).catch(error => {
-    logger.error(error);
-  });
-
-  return undefined;
-}
-
-/**
  * Report an exception thrown by a provider API method.
  */
 function reportProviderError(aProvider, aMethod, aError) {
   let method = `provider ${providerName(aProvider)}.${aMethod}`;
   AddonManagerPrivate.recordException("AMI", method, aError);
   logger.error("Exception calling " + method, aError);
 }
 
@@ -3368,29 +3326,24 @@ var AddonManager = {
   stateToString(state) {
     return this._stateToString.get(state);
   },
 
   errorToString(err) {
     return err ? this._errorToString.get(err) : null;
   },
 
-  getInstallForURL(aUrl, aCallback, aMimetype,
-                                                 aHash, aName, aIcons,
-                                                 aVersion, aBrowser) {
-    return promiseOrCallback(
-      AddonManagerInternal.getInstallForURL(aUrl, aMimetype, aHash,
-                                            aName, aIcons, aVersion, aBrowser),
-      aCallback);
+  getInstallForURL(aUrl, aMimetype, aHash, aName, aIcons,
+                   aVersion, aBrowser) {
+    return AddonManagerInternal.getInstallForURL(aUrl, aMimetype, aHash,
+                                                 aName, aIcons, aVersion, aBrowser);
   },
 
-  getInstallForFile(aFile, aCallback, aMimetype) {
-    return promiseOrCallback(
-      AddonManagerInternal.getInstallForFile(aFile, aMimetype),
-      aCallback);
+  getInstallForFile(aFile, aMimetype) {
+      return AddonManagerInternal.getInstallForFile(aFile, aMimetype);
   },
 
   /**
    * Gets an array of add-on IDs that changed during the most recent startup.
    *
    * @param  aType
    *         The type of startup change to get
    * @return An array of add-on IDs
--- a/toolkit/mozapps/extensions/test/xpcshell/test_syncGUID.js
+++ b/toolkit/mozapps/extensions/test/xpcshell/test_syncGUID.js
@@ -90,17 +90,17 @@ add_test(async function test_getter_and_
 
 add_test(async function test_fetch_by_guid_unknown_guid() {
   let addon = await XPIProvider.getAddonBySyncGUID("XXXX");
   Assert.equal(null, addon);
   run_next_test();
 });
 
 // Ensure setting an extension to an existing syncGUID results in error.
-add_test(function test_error_on_duplicate_syncguid_insert() {
+add_test(async function test_error_on_duplicate_syncguid_insert() {
   const installNames = ["test_install1", "test_install2_1"];
   const installIDs = ["addon1@tests.mozilla.org", "addon2@tests.mozilla.org"];
 
   let installCount = 0;
 
   let listener = {
     onInstallEnded: function onInstallEnded() {
       installCount++;
@@ -125,20 +125,20 @@ add_test(function test_error_on_duplicat
           run_next_test();
         }
        });
       }
     }
   };
 
   AddonManager.addInstallListener(listener);
-  let getInstallCB = function(install) { install.install(); };
 
   for (let xpi of XPIS) {
-    AddonManager.getInstallForFile(xpi, getInstallCB);
+    let install = await AddonManager.getInstallForFile(xpi);
+    install.install();
   }
 });
 
 add_test(async function test_fetch_by_guid_known_guid() {
   let addon = await AddonManager.getAddonByID(addonId);
   Assert.notEqual(null, addon);
   Assert.notEqual(null, addon.syncGUID);