diff --git a/src/core/addonManager.js b/src/core/addonManager.js index cfc3ca51fa..7697016fe1 100644 --- a/src/core/addonManager.js +++ b/src/core/addonManager.js @@ -130,7 +130,8 @@ export function install( installObj.addEventListener('onInstallEnded', () => resolve()); installObj.addEventListener('onInstallFailed', () => reject()); log.info('Events to handle the installation initialized.'); - installObj.install(); + // See: https://github.com/mozilla/addons-frontend/issues/8633 + installObj.install().catch(reject); }); }); } diff --git a/tests/unit/core/test_addonManager.js b/tests/unit/core/test_addonManager.js index e9b776cefb..5c1d3c5e1c 100644 --- a/tests/unit/core/test_addonManager.js +++ b/tests/unit/core/test_addonManager.js @@ -197,6 +197,25 @@ describe(__filename, () => { ); }); + it('rejects if the install returns an error', () => { + const error = new Error('oops'); + fakeInstallObj.install = sinon.spy(() => { + return Promise.reject(error); + }); + + return ( + addonManager + .install(fakeInstallUrl, fakeCallback, { + _mozAddonManager: fakeMozAddonManager, + src: 'home', + }) + // The second argument is the reject function. + .then(unexpectedSuccess, () => { + sinon.assert.calledOnce(fakeInstallObj.install); + }) + ); + }); + it('passes the installObj, the event and the id to the callback', async () => { const fakeEvent = { type: 'fakeEvent' };