diff --git a/web/firefoxcom.js b/web/firefoxcom.js index 6ab1f70cc..afca70122 100644 --- a/web/firefoxcom.js +++ b/web/firefoxcom.js @@ -29,8 +29,8 @@ class FirefoxCom { /** * Creates an event that the extension is listening for and will * synchronously respond to. - * NOTE: It is recommended to use request() instead since one day we may not - * be able to synchronously reply. + * NOTE: It is recommended to use requestAsync() instead since one day we may + * not be able to synchronously reply. * @param {string} action - The action to trigger. * @param {Object|string} [data] - The data to send. * @returns {*} The response. @@ -52,6 +52,19 @@ class FirefoxCom { return response; } + /** + * Creates an event that the extension is listening for and will + * asynchronously respond to. + * @param {string} action - The action to trigger. + * @param {Object|string} [data] - The data to send. + * @returns {Promise} A promise that is resolved with the response data. + */ + static requestAsync(action, data) { + return new Promise(resolve => { + this.request(action, data, resolve); + }); + } + /** * Creates an event that the extension is listening for and will, optionally, * asynchronously respond to. @@ -97,58 +110,42 @@ class DownloadManager { const blobUrl = URL.createObjectURL( new Blob([data], { type: contentType }) ); - const onResponse = err => { - URL.revokeObjectURL(blobUrl); - }; - FirefoxCom.request( - "download", - { - blobUrl, - originalUrl: blobUrl, - filename, - isAttachment: true, - }, - onResponse - ); + FirefoxCom.requestAsync("download", { + blobUrl, + originalUrl: blobUrl, + filename, + isAttachment: true, + }).then(error => { + URL.revokeObjectURL(blobUrl); + }); } download(blob, url, filename, sourceEventType = "download") { const blobUrl = URL.createObjectURL(blob); - const onResponse = err => { - if (err && this.onerror) { - this.onerror(err); + + FirefoxCom.requestAsync("download", { + blobUrl, + originalUrl: url, + filename, + sourceEventType, + }).then(error => { + if (error && this.onerror) { + this.onerror(error); } URL.revokeObjectURL(blobUrl); - }; - - FirefoxCom.request( - "download", - { - blobUrl, - originalUrl: url, - filename, - sourceEventType, - }, - onResponse - ); + }); } } class FirefoxPreferences extends BasePreferences { async _writeToStorage(prefObj) { - return new Promise(function (resolve) { - FirefoxCom.request("setPreferences", prefObj, resolve); - }); + return FirefoxCom.requestAsync("setPreferences", prefObj); } async _readFromStorage(prefObj) { - return new Promise(function (resolve) { - FirefoxCom.request("getPreferences", prefObj, function (prefStr) { - const readPrefs = JSON.parse(prefStr); - resolve(readPrefs); - }); - }); + const prefStr = await FirefoxCom.requestAsync("getPreferences", prefObj); + return JSON.parse(prefStr); } } @@ -254,13 +251,10 @@ class FirefoxComDataRangeTransport extends PDFDataRangeTransport { class FirefoxScripting { static async createSandbox(data) { - return new Promise(resolve => { - FirefoxCom.request("createSandbox", data, resolve); - }).then(success => { - if (!success) { - throw new Error("Cannot create sandbox."); - } - }); + const success = await FirefoxCom.requestAsync("createSandbox", data); + if (!success) { + throw new Error("Cannot create sandbox."); + } } static async dispatchEventInSandbox(event) { @@ -343,9 +337,7 @@ class FirefoxExternalServices extends DefaultExternalServices { } static async fallback(data) { - return new Promise(resolve => { - FirefoxCom.request("fallback", data, resolve); - }); + return FirefoxCom.requestAsync("fallback", data); } static reportTelemetry(data) {