Bug 1454202: Part 4b - Remove interstitial callback argument from getInstall* APIs. r?aswan
MozReview-Commit-ID: ATKWozPZF4d
--- 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);