Bug 697312: Don't write out extensions.ini if there are no extensions. r=Unfocused

This commit is contained in:
Dave Townsend 2011-11-08 16:03:56 -08:00
Родитель 35820dbe1e
Коммит efcf5839bb
3 изменённых файлов: 66 добавлений и 23 удалений

Просмотреть файл

@ -1759,7 +1759,7 @@ 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([]); XPIDatabase.writeAddonsList();
Services.prefs.setBoolPref(PREF_PENDING_OPERATIONS, false); Services.prefs.setBoolPref(PREF_PENDING_OPERATIONS, false);
}, },
@ -3034,8 +3034,8 @@ var XPIProvider = {
// Check that the add-ons list still exists // Check that the add-ons list still exists
let addonsList = FileUtils.getFile(KEY_PROFILEDIR, [FILE_XPI_ADDONS_LIST], let addonsList = FileUtils.getFile(KEY_PROFILEDIR, [FILE_XPI_ADDONS_LIST],
true); true);
if (!addonsList.exists()) { if (addonsList.exists() == (state.length == 0)) {
LOG("Add-ons list is missing, recreating"); LOG("Add-ons list is invalid, rebuilding");
XPIDatabase.writeAddonsList(); XPIDatabase.writeAddonsList();
} }
@ -5476,30 +5476,39 @@ var 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.
*/ */
writeAddonsList: function XPIDB_writeAddonsList() { writeAddonsList: function XPIDB_writeAddonsList() {
LOG("Writing add-ons list");
Services.appinfo.invalidateCachesOnRestart(); Services.appinfo.invalidateCachesOnRestart();
let addonsList = FileUtils.getFile(KEY_PROFILEDIR, [FILE_XPI_ADDONS_LIST], let addonsList = FileUtils.getFile(KEY_PROFILEDIR, [FILE_XPI_ADDONS_LIST],
true); true);
if (!this.connection) {
try {
addonsList.remove(false);
LOG("Deleted add-ons list");
}
catch (e) {
}
Services.prefs.clearUserPref(PREF_EM_ENABLED_ADDONS);
return;
}
let enabledAddons = []; let enabledAddons = [];
let text = "[ExtensionDirs]\r\n"; let text = "[ExtensionDirs]\r\n";
let count = 0; let count = 0;
let stmt; let fullCount = 0;
if (this.connection) { let stmt = this.getStatement("getActiveAddons");
stmt = this.getStatement("getActiveAddons");
for (let row in resultRows(stmt)) { for (let row in resultRows(stmt)) {
text += "Extension" + (count++) + "=" + row.descriptor + "\r\n"; text += "Extension" + (count++) + "=" + row.descriptor + "\r\n";
enabledAddons.push(row.id + ":" + row.version); enabledAddons.push(row.id + ":" + row.version);
} }
} fullCount += count;
// The selected skin may come from an inactive theme (the default theme // The selected skin may come from an inactive theme (the default theme
// when a lightweight theme is applied for example) // when a lightweight theme is applied for example)
text += "\r\n[ThemeDirs]\r\n"; text += "\r\n[ThemeDirs]\r\n";
if (this.connection) {
if (Prefs.getBoolPref(PREF_EM_DSS_ENABLED)) { if (Prefs.getBoolPref(PREF_EM_DSS_ENABLED)) {
stmt = this.getStatement("getThemes"); stmt = this.getStatement("getThemes");
} }
@ -5507,19 +5516,33 @@ var XPIDatabase = {
stmt = this.getStatement("getActiveTheme"); stmt = this.getStatement("getActiveTheme");
stmt.params.internalName = XPIProvider.selectedSkin; stmt.params.internalName = XPIProvider.selectedSkin;
} }
if (stmt) {
count = 0; count = 0;
for (let row in resultRows(stmt)) { for (let row in resultRows(stmt)) {
text += "Extension" + (count++) + "=" + row.descriptor + "\r\n"; text += "Extension" + (count++) + "=" + row.descriptor + "\r\n";
enabledAddons.push(row.id + ":" + row.version); enabledAddons.push(row.id + ":" + row.version);
} }
fullCount += count;
} }
if (fullCount > 0) {
LOG("Writing add-ons list");
var fos = FileUtils.openSafeFileOutputStream(addonsList); var fos = FileUtils.openSafeFileOutputStream(addonsList);
fos.write(text, text.length); fos.write(text, text.length);
FileUtils.closeSafeFileOutputStream(fos); FileUtils.closeSafeFileOutputStream(fos);
Services.prefs.setCharPref(PREF_EM_ENABLED_ADDONS, enabledAddons.join(",")); Services.prefs.setCharPref(PREF_EM_ENABLED_ADDONS, enabledAddons.join(","));
} }
else {
if (addonsList.exists()) {
LOG("Deleting add-ons list");
addonsList.remove(false);
}
Services.prefs.clearUserPref(PREF_EM_ENABLED_ADDONS);
}
}
}; };
function getHashStringForCrypto(aCrypto) { function getHashStringForCrypto(aCrypto) {

Просмотреть файл

@ -129,6 +129,9 @@ function run_test() {
file.append("extensions.sqlite"); file.append("extensions.sqlite");
do_check_false(file.exists()); do_check_false(file.exists());
file.leafName = "extensions.ini";
do_check_false(file.exists());
run_test_1(); run_test_1();
} }
@ -175,6 +178,9 @@ function check_test_1() {
file.append("extensions.sqlite"); file.append("extensions.sqlite");
do_check_true(file.exists()); do_check_true(file.exists());
file.leafName = "extensions.ini";
do_check_false(file.exists());
AddonManager.getAllInstalls(function(installs) { AddonManager.getAllInstalls(function(installs) {
// There should be no active installs now since the install completed and // There should be no active installs now since the install completed and
// doesn't require a restart. // doesn't require a restart.
@ -255,6 +261,10 @@ function run_test_3() {
do_check_eq(getShutdownReason(), ADDON_DISABLE); do_check_eq(getShutdownReason(), ADDON_DISABLE);
do_check_not_in_crash_annotation("bootstrap1@tests.mozilla.org", "1.0"); do_check_not_in_crash_annotation("bootstrap1@tests.mozilla.org", "1.0");
let file = gProfD.clone();
file.append("extensions.ini");
do_check_false(file.exists());
AddonManager.getAddonByID("bootstrap1@tests.mozilla.org", function(b1) { AddonManager.getAddonByID("bootstrap1@tests.mozilla.org", function(b1) {
do_check_neq(b1, null); do_check_neq(b1, null);
do_check_eq(b1.version, "1.0"); do_check_eq(b1.version, "1.0");

Просмотреть файл

@ -136,6 +136,9 @@ function run_test() {
file.append("extensions.sqlite"); file.append("extensions.sqlite");
do_check_false(file.exists()); do_check_false(file.exists());
file.leafName = "extensions.ini";
do_check_false(file.exists());
AddonManager.getAddonsByIDs(["addon1@tests.mozilla.org", AddonManager.getAddonsByIDs(["addon1@tests.mozilla.org",
"addon2@tests.mozilla.org", "addon2@tests.mozilla.org",
"addon3@tests.mozilla.org", "addon3@tests.mozilla.org",
@ -191,6 +194,9 @@ function run_test_1() {
file.append("extensions.sqlite"); file.append("extensions.sqlite");
do_check_true(file.exists()); do_check_true(file.exists());
file.leafName = "extensions.ini";
do_check_true(file.exists());
AddonManager.getAddonsByIDs(["addon1@tests.mozilla.org", AddonManager.getAddonsByIDs(["addon1@tests.mozilla.org",
"addon2@tests.mozilla.org", "addon2@tests.mozilla.org",
"addon3@tests.mozilla.org", "addon3@tests.mozilla.org",
@ -292,6 +298,10 @@ function run_test_2() {
check_startup_changes(AddonManager.STARTUP_CHANGE_ENABLED, []); check_startup_changes(AddonManager.STARTUP_CHANGE_ENABLED, []);
do_check_true(gCachePurged); do_check_true(gCachePurged);
var file = gProfD.clone();
file.append("extensions.ini");
do_check_true(file.exists());
AddonManager.getAddonsByIDs(["addon1@tests.mozilla.org", AddonManager.getAddonsByIDs(["addon1@tests.mozilla.org",
"addon2@tests.mozilla.org", "addon2@tests.mozilla.org",
"addon3@tests.mozilla.org", "addon3@tests.mozilla.org",