Bug 1306492 - release staging directory when add-on install is postponed r?kmag
MozReview-Commit-ID: 3mMFS2l8bKq
--- a/toolkit/mozapps/extensions/internal/XPIProvider.jsm
+++ b/toolkit/mozapps/extensions/internal/XPIProvider.jsm
@@ -6268,16 +6268,17 @@ AddonInstall.prototype = {
switch (this.state) {
case AddonManager.STATE_INSTALLED:
// this addon has already been installed, nothing to do
logger.warn(`${this.addon.id} tried to resume postponed upgrade, but it's already installed`);
break;
case AddonManager.STATE_POSTPONED:
logger.info(`${this.addon.id} has resumed a previously postponed upgrade`);
this.state = AddonManager.STATE_DOWNLOADED;
+ this.installLocation.releaseStagingDir();
this.install();
break;
default:
logger.warn(`${this.addon.id} cannot resume postponed upgrade from state (${this.state})`);
break;
}
},
});
--- a/toolkit/mozapps/extensions/test/xpcshell/test_delay_update_webextension.js
+++ b/toolkit/mozapps/extensions/test/xpcshell/test_delay_update_webextension.js
@@ -7,16 +7,18 @@
// The test extension uses an insecure update url.
Services.prefs.setBoolPref(PREF_EM_CHECK_UPDATE_SECURITY, false);
/*globals browser*/
const profileDir = gProfD.clone();
profileDir.append("extensions");
const tempdir = gTmpD.clone();
+const stageDir = profileDir.clone();
+stageDir.append("staged");
const IGNORE_ID = "test_delay_update_ignore_webext@tests.mozilla.org";
const COMPLETE_ID = "test_delay_update_complete_webext@tests.mozilla.org";
const DEFER_ID = "test_delay_update_defer_webext@tests.mozilla.org";
const NOUPDATE_ID = "test_no_update_webext@tests.mozilla.org";
// Create and configure the HTTP server.
let testserver = createHttpServer();
@@ -172,16 +174,20 @@ add_task(function* delay_updates_complet
do_check_neq(addon_allowed, null);
do_check_eq(addon_allowed.version, "2.0");
do_check_eq(addon_allowed.name, "Delay Upgrade");
do_check_true(addon_allowed.isCompatible);
do_check_false(addon_allowed.appDisabled);
do_check_true(addon_allowed.isActive);
do_check_eq(addon_allowed.type, "extension");
+ if (stageDir.exists()) {
+ do_throw("Staging directory should not exist for formerly-postponed extension");
+ }
+
yield extension.markUnloaded();
yield addon_allowed.uninstall();
yield promiseShutdownManager();
});
// add-on registers upgrade listener, initially defers update then allows upgrade
add_task(function* delay_updates_defer() {
startupManager();