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 {
|
try {
|
||||||
AddonManagerPrivate.recordTimestamp("XPI_bootstrap_addons_begin");
|
AddonManagerPrivate.recordTimestamp("XPI_bootstrap_addons_begin");
|
||||||
for (let id in this.bootstrappedAddons) {
|
for (let id in this.bootstrappedAddons) {
|
||||||
let file = Cc["@mozilla.org/file/local;1"].createInstance(Ci.nsIFile);
|
try {
|
||||||
file.persistentDescriptor = this.bootstrappedAddons[id].descriptor;
|
let file = Cc["@mozilla.org/file/local;1"].createInstance(Ci.nsIFile);
|
||||||
let reason = BOOTSTRAP_REASONS.APP_STARTUP;
|
file.persistentDescriptor = this.bootstrappedAddons[id].descriptor;
|
||||||
// Eventually set INSTALLED reason when a bootstrap addon
|
let reason = BOOTSTRAP_REASONS.APP_STARTUP;
|
||||||
// is dropped in profile folder and automatically installed
|
// Eventually set INSTALLED reason when a bootstrap addon
|
||||||
if (AddonManager.getStartupChanges(AddonManager.STARTUP_CHANGE_INSTALLED)
|
// is dropped in profile folder and automatically installed
|
||||||
.indexOf(id) !== -1)
|
if (AddonManager.getStartupChanges(AddonManager.STARTUP_CHANGE_INSTALLED)
|
||||||
reason = BOOTSTRAP_REASONS.ADDON_INSTALL;
|
.indexOf(id) !== -1)
|
||||||
this.callBootstrapMethod(id, this.bootstrappedAddons[id].version,
|
reason = BOOTSTRAP_REASONS.ADDON_INSTALL;
|
||||||
this.bootstrappedAddons[id].type, file,
|
this.callBootstrapMethod(id, this.bootstrappedAddons[id].version,
|
||||||
"startup", reason);
|
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");
|
AddonManagerPrivate.recordTimestamp("XPI_bootstrap_addons_end");
|
||||||
}
|
}
|
||||||
|
|
@ -2161,8 +2167,8 @@ var XPIProvider = {
|
||||||
// add-ons
|
// add-ons
|
||||||
if (Prefs.getBoolPref(PREF_PENDING_OPERATIONS, false)) {
|
if (Prefs.getBoolPref(PREF_PENDING_OPERATIONS, false)) {
|
||||||
XPIDatabase.updateActiveAddons();
|
XPIDatabase.updateActiveAddons();
|
||||||
XPIDatabase.writeAddonsList();
|
Services.prefs.setBoolPref(PREF_PENDING_OPERATIONS,
|
||||||
Services.prefs.setBoolPref(PREF_PENDING_OPERATIONS, false);
|
!XPIDatabase.writeAddonsList());
|
||||||
}
|
}
|
||||||
|
|
||||||
this.installs = null;
|
this.installs = null;
|
||||||
|
|
@ -2244,8 +2250,8 @@ var XPIProvider = {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Ensure any changes to the add-ons list are flushed to disk
|
// Ensure any changes to the add-ons list are flushed to disk
|
||||||
XPIDatabase.writeAddonsList();
|
Services.prefs.setBoolPref(PREF_PENDING_OPERATIONS,
|
||||||
Services.prefs.setBoolPref(PREF_PENDING_OPERATIONS, false);
|
!XPIDatabase.writeAddonsList());
|
||||||
},
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -2420,7 +2426,7 @@ var XPIProvider = {
|
||||||
targetDir.create(Ci.nsIFile.DIRECTORY_TYPE, FileUtils.PERMS_DIRECTORY);
|
targetDir.create(Ci.nsIFile.DIRECTORY_TYPE, FileUtils.PERMS_DIRECTORY);
|
||||||
}
|
}
|
||||||
catch (e) {
|
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;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -2428,7 +2434,7 @@ var XPIProvider = {
|
||||||
extractFiles(stagedXPI, targetDir);
|
extractFiles(stagedXPI, targetDir);
|
||||||
}
|
}
|
||||||
catch (e) {
|
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);
|
aLocation.name, e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -2437,7 +2443,7 @@ var XPIProvider = {
|
||||||
stagedXPI.moveTo(stagingDir, addon.id + ".xpi");
|
stagedXPI.moveTo(stagingDir, addon.id + ".xpi");
|
||||||
}
|
}
|
||||||
catch (e) {
|
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);
|
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;
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
let seenFiles = [];
|
let seenFiles = [];
|
||||||
// Use a snapshot of the directory contents to avoid possible issues with
|
// Use a snapshot of the directory contents to avoid possible issues with
|
||||||
|
|
@ -3587,8 +3599,8 @@ var XPIProvider = {
|
||||||
if (extensionListChanged || hasPendingChanges) {
|
if (extensionListChanged || hasPendingChanges) {
|
||||||
LOG("Updating database with changes to installed add-ons");
|
LOG("Updating database with changes to installed add-ons");
|
||||||
XPIDatabase.updateActiveAddons();
|
XPIDatabase.updateActiveAddons();
|
||||||
XPIDatabase.writeAddonsList();
|
Services.prefs.setBoolPref(PREF_PENDING_OPERATIONS,
|
||||||
Services.prefs.setBoolPref(PREF_PENDING_OPERATIONS, false);
|
!XPIDatabase.writeAddonsList());
|
||||||
Services.prefs.setCharPref(PREF_BOOTSTRAP_ADDONS,
|
Services.prefs.setCharPref(PREF_BOOTSTRAP_ADDONS,
|
||||||
JSON.stringify(this.bootstrappedAddons));
|
JSON.stringify(this.bootstrappedAddons));
|
||||||
return true;
|
return true;
|
||||||
|
|
|
||||||
|
|
@ -1409,6 +1409,7 @@ this.XPIDatabase = {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Writes out the XPI add-ons list for the platform to read.
|
* 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() {
|
writeAddonsList: function XPIDB_writeAddonsList() {
|
||||||
if (!this.addonDB) {
|
if (!this.addonDB) {
|
||||||
|
|
@ -1473,22 +1474,36 @@ this.XPIDatabase = {
|
||||||
if (fullCount > 0) {
|
if (fullCount > 0) {
|
||||||
LOG("Writing add-ons list");
|
LOG("Writing add-ons list");
|
||||||
|
|
||||||
let addonsListTmp = FileUtils.getFile(KEY_PROFILEDIR, [FILE_XPI_ADDONS_LIST + ".tmp"],
|
try {
|
||||||
true);
|
let addonsListTmp = FileUtils.getFile(KEY_PROFILEDIR, [FILE_XPI_ADDONS_LIST + ".tmp"],
|
||||||
var fos = FileUtils.openFileOutputStream(addonsListTmp);
|
true);
|
||||||
fos.write(text, text.length);
|
var fos = FileUtils.openFileOutputStream(addonsListTmp);
|
||||||
fos.close();
|
fos.write(text, text.length);
|
||||||
addonsListTmp.moveTo(addonsListTmp.parent, FILE_XPI_ADDONS_LIST);
|
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 {
|
else {
|
||||||
if (addonsList.exists()) {
|
if (addonsList.exists()) {
|
||||||
LOG("Deleting add-ons list");
|
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);
|
Services.prefs.clearUserPref(PREF_EM_ENABLED_ADDONS);
|
||||||
}
|
}
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue