mirror of
https://github.com/mozilla/gecko-dev.git
synced 2025-11-09 12:51:09 +02:00
Bug 972852 - Handle file errors and fix log messages that were causing addon manager failures. r=Mossop
This commit is contained in:
parent
c9f07e7ea3
commit
12166812fc
2 changed files with 56 additions and 29 deletions
|
|
@ -2084,17 +2084,23 @@ var XPIProvider = {
|
|||
try {
|
||||
AddonManagerPrivate.recordTimestamp("XPI_bootstrap_addons_begin");
|
||||
for (let id in this.bootstrappedAddons) {
|
||||
let file = Cc["@mozilla.org/file/local;1"].createInstance(Ci.nsIFile);
|
||||
file.persistentDescriptor = this.bootstrappedAddons[id].descriptor;
|
||||
let reason = BOOTSTRAP_REASONS.APP_STARTUP;
|
||||
// Eventually set INSTALLED reason when a bootstrap addon
|
||||
// is dropped in profile folder and automatically installed
|
||||
if (AddonManager.getStartupChanges(AddonManager.STARTUP_CHANGE_INSTALLED)
|
||||
.indexOf(id) !== -1)
|
||||
reason = BOOTSTRAP_REASONS.ADDON_INSTALL;
|
||||
this.callBootstrapMethod(id, this.bootstrappedAddons[id].version,
|
||||
this.bootstrappedAddons[id].type, file,
|
||||
"startup", reason);
|
||||
try {
|
||||
let file = Cc["@mozilla.org/file/local;1"].createInstance(Ci.nsIFile);
|
||||
file.persistentDescriptor = this.bootstrappedAddons[id].descriptor;
|
||||
let reason = BOOTSTRAP_REASONS.APP_STARTUP;
|
||||
// Eventually set INSTALLED reason when a bootstrap addon
|
||||
// is dropped in profile folder and automatically installed
|
||||
if (AddonManager.getStartupChanges(AddonManager.STARTUP_CHANGE_INSTALLED)
|
||||
.indexOf(id) !== -1)
|
||||
reason = BOOTSTRAP_REASONS.ADDON_INSTALL;
|
||||
this.callBootstrapMethod(id, this.bootstrappedAddons[id].version,
|
||||
this.bootstrappedAddons[id].type, file,
|
||||
"startup", reason);
|
||||
}
|
||||
catch (e) {
|
||||
ERROR("Failed to load bootstrap addon " + id + " from " +
|
||||
this.bootstrappedAddons[id].descriptor, e);
|
||||
}
|
||||
}
|
||||
AddonManagerPrivate.recordTimestamp("XPI_bootstrap_addons_end");
|
||||
}
|
||||
|
|
@ -2161,8 +2167,8 @@ var XPIProvider = {
|
|||
// add-ons
|
||||
if (Prefs.getBoolPref(PREF_PENDING_OPERATIONS, false)) {
|
||||
XPIDatabase.updateActiveAddons();
|
||||
XPIDatabase.writeAddonsList();
|
||||
Services.prefs.setBoolPref(PREF_PENDING_OPERATIONS, false);
|
||||
Services.prefs.setBoolPref(PREF_PENDING_OPERATIONS,
|
||||
!XPIDatabase.writeAddonsList());
|
||||
}
|
||||
|
||||
this.installs = null;
|
||||
|
|
@ -2244,8 +2250,8 @@ var XPIProvider = {
|
|||
}
|
||||
|
||||
// Ensure any changes to the add-ons list are flushed to disk
|
||||
XPIDatabase.writeAddonsList();
|
||||
Services.prefs.setBoolPref(PREF_PENDING_OPERATIONS, false);
|
||||
Services.prefs.setBoolPref(PREF_PENDING_OPERATIONS,
|
||||
!XPIDatabase.writeAddonsList());
|
||||
},
|
||||
|
||||
/**
|
||||
|
|
@ -2420,7 +2426,7 @@ var XPIProvider = {
|
|||
targetDir.create(Ci.nsIFile.DIRECTORY_TYPE, FileUtils.PERMS_DIRECTORY);
|
||||
}
|
||||
catch (e) {
|
||||
ERROR("Failed to create staging directory for add-on " + id, e);
|
||||
ERROR("Failed to create staging directory for add-on " + addon.id, e);
|
||||
continue;
|
||||
}
|
||||
|
||||
|
|
@ -2428,7 +2434,7 @@ var XPIProvider = {
|
|||
extractFiles(stagedXPI, targetDir);
|
||||
}
|
||||
catch (e) {
|
||||
ERROR("Failed to extract staged XPI for add-on " + id + " in " +
|
||||
ERROR("Failed to extract staged XPI for add-on " + addon.id + " in " +
|
||||
aLocation.name, e);
|
||||
}
|
||||
}
|
||||
|
|
@ -2437,7 +2443,7 @@ var XPIProvider = {
|
|||
stagedXPI.moveTo(stagingDir, addon.id + ".xpi");
|
||||
}
|
||||
catch (e) {
|
||||
ERROR("Failed to move staged XPI for add-on " + id + " in " +
|
||||
ERROR("Failed to move staged XPI for add-on " + addon.id + " in " +
|
||||
aLocation.name, e);
|
||||
}
|
||||
}
|
||||
|
|
@ -2455,8 +2461,14 @@ var XPIProvider = {
|
|||
}
|
||||
}
|
||||
|
||||
if (!stagingDir || !stagingDir.exists() || !stagingDir.isDirectory())
|
||||
try {
|
||||
if (!stagingDir || !stagingDir.exists() || !stagingDir.isDirectory())
|
||||
return;
|
||||
}
|
||||
catch (e) {
|
||||
WARN("Failed to find staging directory", e);
|
||||
return;
|
||||
}
|
||||
|
||||
let seenFiles = [];
|
||||
// Use a snapshot of the directory contents to avoid possible issues with
|
||||
|
|
@ -3587,8 +3599,8 @@ var XPIProvider = {
|
|||
if (extensionListChanged || hasPendingChanges) {
|
||||
LOG("Updating database with changes to installed add-ons");
|
||||
XPIDatabase.updateActiveAddons();
|
||||
XPIDatabase.writeAddonsList();
|
||||
Services.prefs.setBoolPref(PREF_PENDING_OPERATIONS, false);
|
||||
Services.prefs.setBoolPref(PREF_PENDING_OPERATIONS,
|
||||
!XPIDatabase.writeAddonsList());
|
||||
Services.prefs.setCharPref(PREF_BOOTSTRAP_ADDONS,
|
||||
JSON.stringify(this.bootstrappedAddons));
|
||||
return true;
|
||||
|
|
|
|||
|
|
@ -1409,6 +1409,7 @@ this.XPIDatabase = {
|
|||
|
||||
/**
|
||||
* Writes out the XPI add-ons list for the platform to read.
|
||||
* @return true if the file was successfully updated, false otherwise
|
||||
*/
|
||||
writeAddonsList: function XPIDB_writeAddonsList() {
|
||||
if (!this.addonDB) {
|
||||
|
|
@ -1473,22 +1474,36 @@ this.XPIDatabase = {
|
|||
if (fullCount > 0) {
|
||||
LOG("Writing add-ons list");
|
||||
|
||||
let addonsListTmp = FileUtils.getFile(KEY_PROFILEDIR, [FILE_XPI_ADDONS_LIST + ".tmp"],
|
||||
true);
|
||||
var fos = FileUtils.openFileOutputStream(addonsListTmp);
|
||||
fos.write(text, text.length);
|
||||
fos.close();
|
||||
addonsListTmp.moveTo(addonsListTmp.parent, FILE_XPI_ADDONS_LIST);
|
||||
try {
|
||||
let addonsListTmp = FileUtils.getFile(KEY_PROFILEDIR, [FILE_XPI_ADDONS_LIST + ".tmp"],
|
||||
true);
|
||||
var fos = FileUtils.openFileOutputStream(addonsListTmp);
|
||||
fos.write(text, text.length);
|
||||
fos.close();
|
||||
addonsListTmp.moveTo(addonsListTmp.parent, FILE_XPI_ADDONS_LIST);
|
||||
|
||||
Services.prefs.setCharPref(PREF_EM_ENABLED_ADDONS, enabledAddons.join(","));
|
||||
Services.prefs.setCharPref(PREF_EM_ENABLED_ADDONS, enabledAddons.join(","));
|
||||
}
|
||||
catch (e) {
|
||||
ERROR("Failed to write add-ons list to " + addonsListTmp.parent + "/" +
|
||||
FILE_XPI_ADDONS_LIST, e);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
else {
|
||||
if (addonsList.exists()) {
|
||||
LOG("Deleting add-ons list");
|
||||
addonsList.remove(false);
|
||||
try {
|
||||
addonsList.remove(false);
|
||||
}
|
||||
catch (e) {
|
||||
ERROR("Failed to remove " + addonsList.path, e);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
Services.prefs.clearUserPref(PREF_EM_ENABLED_ADDONS);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
};
|
||||
|
|
|
|||
Loading…
Reference in a new issue