diff --git a/toolkit/mozapps/extensions/XPIProvider.jsm b/toolkit/mozapps/extensions/XPIProvider.jsm
index 8808a161ffe..dcad30c2295 100644
--- a/toolkit/mozapps/extensions/XPIProvider.jsm
+++ b/toolkit/mozapps/extensions/XPIProvider.jsm
@@ -1781,20 +1781,11 @@ var XPIProvider = {
* @param aUpdateCompatibility
* true to update add-ons appDisabled property when the application
* version has changed
- * @param aMigrateData
- * an object generated from a previous version of the database
- * holding information about what add-ons were previously userDisabled
- * and updated compatibility information if present
- * @param aActiveBundles
- * When performing recovery after startup this will be an array of
- * persistent descriptors of add-ons that are known to be active,
- * otherwise it will be null
* @return true if a change requiring a restart was detected
*/
processFileChanges: function XPI_processFileChanges(aState, aManifests,
aUpdateCompatibility,
- aMigrateData,
- aActiveBundles) {
+ aMigrateData) {
let visibleAddons = {};
/**
@@ -2041,11 +2032,8 @@ var XPIProvider = {
function addMetadata(aInstallLocation, aId, aAddonState, aMigrateData) {
LOG("New add-on " + aId + " installed in " + aInstallLocation.name);
- let newAddon = null;
- // Check the updated manifests lists for the install location, If there
- // is no manifest for the add-on ID then newAddon will be undefined
- if (aInstallLocation.name in aManifests)
- newAddon = aManifests[aInstallLocation.name][aId];
+ // Check the updated manifests lists for a manifest for this add-on
+ let newAddon = aManifests[aInstallLocation.name][aId];
try {
// Otherwise load the manifest from the add-on
@@ -2096,24 +2084,6 @@ var XPIProvider = {
}
}
- // If we have a list of what add-ons should be marked as active then use it
- if (aActiveBundles) {
- // For themes we know which is active by the current skin setting
- if (newAddon.type == "theme")
- newAddon.active = newAddon.internalName == XPIProvider.currentSkin;
- else
- newAddon.active = aActiveBundles.indexOf(aAddonState.descriptor) != -1;
-
- // If the add-on isn't active and it isn't appDisabled then it is
- // probably userDisabled
- if (!newAddon.active && newAddon.visible && !newAddon.appDisabled)
- newAddon.userDisabled = true;
- }
- else {
- newAddon.active = (newAddon.visible && !newAddon.userDisabled &&
- !newAddon.appDisabled)
- }
-
try {
// Update the database.
XPIDatabase.addAddonMetadata(newAddon, aAddonState.descriptor);
@@ -2305,54 +2275,57 @@ var XPIProvider = {
if (aAppChanged !== false)
this.importPermissions();
- // If the application version has changed then the database information
- // needs to be updated
- let updateDatabase = aAppChanged;
-
- // First install any new add-ons into the locations, if there are any
- // changes then we must update the database with the information in the
- // install locations
+ // First install any new add-ons into the locations, we'll detect these when
+ // we read the install state
let manifests = {};
- updateDatabase = this.processPendingFileChanges(manifests) | updateDatabase;
+ let changed = this.processPendingFileChanges(manifests);
- // This will be true if the previous session made changes that affect the
- // active state of add-ons but didn't commit them properly (normally due
- // to the application crashing)
- let hasPendingChanges = Prefs.getBoolPref(PREF_PENDING_OPERATIONS);
+ // We have to hold the DB scheme in prefs so we don't need to load the
+ // database to see if we need to migrate data
+ let schema = Prefs.getIntPref(PREF_DB_SCHEMA, 0);
- // If the schema appears to have changed then we should update the database
- updateDatabase |= DB_SCHEMA != Prefs.getIntPref(PREF_DB_SCHEMA, 0);
-
- // Load the list of bootstrapped add-ons first so processFileChanges can
- // modify it
- this.bootstrappedAddons = JSON.parse(Prefs.getCharPref(PREF_BOOTSTRAP_ADDONS,
- "{}"));
-
- let state = this.getInstallLocationStates();
+ let migrateData = null;
+ let cache = null;
+ if (schema != DB_SCHEMA) {
+ // The schema has changed so migrate data from the old schema
+ migrateData = XPIDatabase.migrateData(schema);
+ }
// If the database exists then the previous file cache can be trusted
- // otherwise the database needs to be recreated
- let dbFile = FileUtils.getFile(KEY_PROFILEDIR, [FILE_DATABASE], true);
- updateDatabase |= !dbFile.exists();
- if (!updateDatabase) {
- // If the state has changed then we must update the database
- let cache = Prefs.getCharPref(PREF_INSTALL_CACHE, null);
- updateDatabase |= cache != JSON.stringify(state);
+ // otherwise create an empty database
+ let db = FileUtils.getFile(KEY_PROFILEDIR, [FILE_DATABASE], true);
+ if (db.exists()) {
+ cache = Prefs.getCharPref(PREF_INSTALL_CACHE, null);
+ }
+ else {
+ try {
+ LOG("Database is missing, recreating");
+ XPIDatabase.openConnection();
+ XPIDatabase.createSchema();
+ }
+ catch (e) {
+ try {
+ db.remove(true);
+ }
+ catch (e) {
+ }
+ return;
+ }
}
// Catch any errors during the main startup and rollback the database changes
XPIDatabase.beginTransaction();
try {
- let extensionListChanged = false;
- // If the database needs to be updated then open it and then update it
- // from the filesystem
- if (updateDatabase || hasPendingChanges) {
- let migrateData = XPIDatabase.openConnection(false);
-
+ // Load the list of bootstrapped add-ons first so processFileChanges can
+ // modify it
+ this.bootstrappedAddons = JSON.parse(Prefs.getCharPref(PREF_BOOTSTRAP_ADDONS,
+ "{}"));
+ let state = this.getInstallLocationStates();
+ if (aAppChanged || changed || cache == null ||
+ cache != JSON.stringify(state)) {
try {
- extensionListChanged = this.processFileChanges(state, manifests,
- aAppChanged,
- migrateData, null);
+ changed = this.processFileChanges(state, manifests, aAppChanged,
+ migrateData);
}
catch (e) {
ERROR("Error processing file changes: " + e);
@@ -2369,7 +2342,7 @@ var XPIProvider = {
// If the application crashed before completing any pending operations then
// we should perform them now.
- if (extensionListChanged || hasPendingChanges) {
+ if (changed || Prefs.getBoolPref(PREF_PENDING_OPERATIONS)) {
LOG("Updating database with changes to installed add-ons");
XPIDatabase.updateActiveAddons();
XPIDatabase.commitTransaction();
@@ -3445,303 +3418,152 @@ var XPIDatabase = {
this.transactionCount--;
},
- /**
- * Attempts to open the database file. If it fails it will try to delete the
- * existing file and create an empty database. If that fails then it will
- * open an in-memory database that can be used during this session.
- *
- * @param aDBFile
- * The nsIFile to open
- * @return the mozIStorageConnection for the database
- */
- openDatabaseFile: function XPIDB_openDatabaseFile(aDBFile) {
- LOG("Opening database");
- let connection = null;
-
- // Attempt to open the database
- try {
- connection = Services.storage.openUnsharedDatabase(aDBFile);
- }
- catch (e) {
- ERROR("Failed to open database (1st attempt): " + e);
- try {
- aDBFile.remove(true);
- }
- catch (e) {
- ERROR("Failed to remove database that could not be opened: " + e);
- }
- try {
- connection = Services.storage.openUnsharedDatabase(aDBFile);
- }
- catch (e) {
- ERROR("Failed to open database (2nd attempt): " + e);
-
- // If we have got here there seems to be no way to open the real
- // database, instead open a temporary memory database so things will
- // work for this session
- return Services.storage.openSpecialDatabase("memory");
- }
- }
-
- connection.executeSimpleSQL("PRAGMA synchronous = FULL");
- connection.executeSimpleSQL("PRAGMA locking_mode = EXCLUSIVE");
-
- return connection;
- },
-
/**
* Opens a new connection to the database file.
*
- * @param aRebuildOnError
- * A boolean indicating whether add-on information should be loaded
- * from the install locations if the database needs to be rebuilt.
- * @return the migration data from the database if it was an old schema or
- * null otherwise.
+ * @return the mozIStorageConnection for the database
*/
- openConnection: function XPIDB_openConnection(aRebuildOnError) {
+ openConnection: function XPIDB_openConnection() {
this.initialized = true;
let dbfile = FileUtils.getFile(KEY_PROFILEDIR, [FILE_DATABASE], true);
delete this.connection;
-
- this.connection = this.openDatabaseFile(dbfile);
-
- let migrateData = null;
- // If the database was corrupt or missing then the new blank database will
- // have a schema version of 0.
- let schemaVersion = this.connection.schemaVersion;
- if (schemaVersion != DB_SCHEMA) {
- // A non-zero schema version means that a schema has been successfully
- // created in the database in the past so we might be able to get useful
- // information from it
- if (schemaVersion != 0) {
- LOG("Migrating data from schema " + schemaVersion);
- migrateData = this.getMigrateDataFromDatabase();
-
- // Delete the existing database
- this.connection.close();
- try {
- if (dbfile.exists())
- dbfile.remove(true);
-
- // Reopen an empty database
- this.connection = this.openDatabaseFile(dbfile);
- }
- catch (e) {
- ERROR("Failed to remove old database: " + e);
- // If the file couldn't be deleted then fall back to an in-memory
- // database
- this.connection = Services.storage.openSpecialDatabase("memory");
- }
- }
- else if (Prefs.getIntPref(PREF_DB_SCHEMA, 0) == 0) {
- // Only migrate data from the RDF if we haven't done it before
- LOG("Migrating data from extensions.rdf");
- migrateData = this.getMigrateDataFromRDF();
- }
-
- // At this point the database should be completely empty
- this.createSchema();
-
- if (aRebuildOnError) {
- let activeBundles = this.getActiveBundles();
- WARN("Rebuilding add-ons database from installed extensions.");
- this.beginTransaction();
- try {
- let state = XPIProvider.getInstallLocationStates();
- XPIProvider.processFileChanges(state, {}, false, migrateData, activeBundles)
- // Make sure to update the active add-ons and add-ons list on shutdown
- Services.prefs.setBoolPref(PREF_PENDING_OPERATIONS, true);
- this.commitTransaction();
- }
- catch (e) {
- ERROR("Error processing file changes: " + e);
- dump(e.stack);
- this.rollbackTransaction();
- }
- }
- }
-
- // If the database connection has a file open then it has the right schema
- // by now so make sure the preferences reflect that. If not then there is
- // an in-memory database open which means a problem opening and deleting the
- // real database, clear the schema preference to force trying to load the
- // database on the next startup
- if (this.connection.databaseFile) {
- Services.prefs.setIntPref(PREF_DB_SCHEMA, DB_SCHEMA);
- }
- else {
- try {
- Services.prefs.clearUserPref(PREF_DB_SCHEMA);
- }
- catch (e) {
- // The preference may not be defined
- }
- }
- Services.prefs.savePrefFile(null);
+ this.connection = Services.storage.openUnsharedDatabase(dbfile);
+ this.connection.executeSimpleSQL("PRAGMA synchronous = FULL");
+ this.connection.executeSimpleSQL("PRAGMA locking_mode = EXCLUSIVE");
// Begin any pending transactions
for (let i = 0; i < this.transactionCount; i++)
this.connection.executeSimpleSQL("SAVEPOINT 'default'");
- return migrateData;
+ return this.connection;
},
/**
* A lazy getter for the database connection.
*/
get connection() {
- this.openConnection(true);
- return this.connection;
+ return this.openConnection();
},
/**
- * Gets the list of file descriptors of active extension directories or XPI
- * files from the add-ons list. This must be loaded from disk since the
- * directory service gives no easy way to get both directly. This list doesn't
- * include themes as preferences already say which theme is currently active
- *
- * @return an array of persisitent descriptors for the directories
- */
- getActiveBundles: function XPIDB_getActiveBundles() {
- let bundles = [];
-
- let addonsList = FileUtils.getFile(KEY_PROFILEDIR, [FILE_XPI_ADDONS_LIST],
- true);
-
- let iniFactory = Cc["@mozilla.org/xpcom/ini-parser-factory;1"].
- getService(Ci.nsIINIParserFactory);
- let parser = iniFactory.createINIParser(addonsList);
-
- let keys = parser.getKeys("ExtensionDirs");
-
- while (keys.hasMore())
- bundles.push(parser.getString("ExtensionDirs", keys.getNext()));
-
- // Also include the list of active bootstrapped extensions
- for (let id in XPIProvider.bootstrappedAddons)
- bundles.push(XPIProvider.bootstrappedAddons[id].descriptor);
-
- return bundles;
- },
-
- /**
- * Retrieves migration data from the old extensions.rdf database.
+ * Migrates data from a previous database schema.
*
+ * @param oldSchema
+ * The previous schema
* @return an object holding information about what add-ons were previously
- * userDisabled and any updated compatibility information
+ * userDisabled
*/
- getMigrateDataFromRDF: function XPIDB_getMigrateDataFromRDF(aDbWasMissing) {
+ migrateData: function XPIDB_migrateData(aOldSchema) {
+ LOG("Migrating data from schema " + aOldSchema);
let migrateData = {};
- // Migrate data from extensions.rdf
- let rdffile = FileUtils.getFile(KEY_PROFILEDIR, [FILE_OLD_DATABASE], true);
- if (rdffile.exists()) {
- let ds = gRDF.GetDataSourceBlocking(Services.io.newFileURI(rdffile).spec);
- let root = Cc["@mozilla.org/rdf/container;1"].
- createInstance(Ci.nsIRDFContainer);
- root.Init(ds, gRDF.GetResource(RDFURI_ITEM_ROOT));
- let elements = root.GetElements();
- while (elements.hasMoreElements()) {
- let source = elements.getNext().QueryInterface(Ci.nsIRDFResource);
+ if (aOldSchema == 0) {
+ // Migrate data from extensions.rdf
+ let rdffile = FileUtils.getFile(KEY_PROFILEDIR, [FILE_OLD_DATABASE], true);
+ if (rdffile.exists()) {
+ let ds = gRDF.GetDataSourceBlocking(Services.io.newFileURI(rdffile).spec);
+ let root = Cc["@mozilla.org/rdf/container;1"].
+ createInstance(Ci.nsIRDFContainer);
+ root.Init(ds, gRDF.GetResource(RDFURI_ITEM_ROOT));
+ let elements = root.GetElements();
+ while (elements.hasMoreElements()) {
+ let source = elements.getNext().QueryInterface(Ci.nsIRDFResource);
- let location = getRDFProperty(ds, source, "installLocation");
- if (location) {
- if (!(location in migrateData))
- migrateData[location] = {};
- let id = source.ValueUTF8.substring(PREFIX_ITEM_URI.length);
- migrateData[location][id] = {
- version: getRDFProperty(ds, source, "version"),
- userDisabled: false,
+ let location = getRDFProperty(ds, source, "installLocation");
+ if (location) {
+ if (!(location in migrateData))
+ migrateData[location] = {};
+ let id = source.ValueUTF8.substring(PREFIX_ITEM_URI.length);
+ migrateData[location][id] = {
+ version: getRDFProperty(ds, source, "version"),
+ userDisabled: false,
+ targetApplications: []
+ }
+
+ let disabled = getRDFProperty(ds, source, "userDisabled");
+ if (disabled == "true" || disabled == "needs-disable")
+ migrateData[location][id].userDisabled = true;
+
+ let targetApps = ds.GetTargets(source, EM_R("targetApplication"),
+ true);
+ while (targetApps.hasMoreElements()) {
+ let targetApp = targetApps.getNext()
+ .QueryInterface(Ci.nsIRDFResource);
+ let appInfo = {
+ id: getRDFProperty(ds, targetApp, "id")
+ };
+
+ let minVersion = getRDFProperty(ds, targetApp, "updatedMinVersion");
+ if (minVersion) {
+ appInfo.minVersion = minVersion;
+ appInfo.maxVersion = getRDFProperty(ds, targetApp, "updatedMaxVersion");
+ }
+ else {
+ appInfo.minVersion = getRDFProperty(ds, targetApp, "minVersion");
+ appInfo.maxVersion = getRDFProperty(ds, targetApp, "maxVersion");
+ }
+ migrateData[location][id].targetApplications.push(appInfo);
+ }
+ }
+ }
+ }
+ }
+ else {
+ // Attempt to migrate data from a different (even future!) version of the
+ // database
+ try {
+ var stmt = this.connection.createStatement("SELECT internal_id, id, " +
+ "location, userDisabled, " +
+ "installDate, version " +
+ "FROM addon");
+ for (let row in resultRows(stmt)) {
+ if (!(row.location in migrateData))
+ migrateData[row.location] = {};
+ migrateData[row.location][row.id] = {
+ internal_id: row.internal_id,
+ version: row.version,
+ installDate: row.installDate,
+ userDisabled: row.userDisabled == 1,
targetApplications: []
- }
+ };
+ }
- let disabled = getRDFProperty(ds, source, "userDisabled");
- if (disabled == "true" || disabled == "needs-disable")
- migrateData[location][id].userDisabled = true;
+ var taStmt = this.connection.createStatement("SELECT id, minVersion, " +
+ "maxVersion FROM " +
+ "targetApplication WHERE " +
+ "addon_internal_id=:internal_id");
- let targetApps = ds.GetTargets(source, EM_R("targetApplication"),
- true);
- while (targetApps.hasMoreElements()) {
- let targetApp = targetApps.getNext()
- .QueryInterface(Ci.nsIRDFResource);
- let appInfo = {
- id: getRDFProperty(ds, targetApp, "id")
- };
-
- let minVersion = getRDFProperty(ds, targetApp, "updatedMinVersion");
- if (minVersion) {
- appInfo.minVersion = minVersion;
- appInfo.maxVersion = getRDFProperty(ds, targetApp, "updatedMaxVersion");
+ for (let location in migrateData) {
+ for (let id in migrateData[location]) {
+ taStmt.params.internal_id = migrateData[location][id].internal_id;
+ delete migrateData[location][id].internal_id;
+ for (let row in resultRows(taStmt)) {
+ migrateData[location][id].targetApplications.push({
+ id: row.id,
+ minVersion: row.minVersion,
+ maxVersion: row.maxVersion
+ });
}
- else {
- appInfo.minVersion = getRDFProperty(ds, targetApp, "minVersion");
- appInfo.maxVersion = getRDFProperty(ds, targetApp, "maxVersion");
- }
- migrateData[location][id].targetApplications.push(appInfo);
}
}
}
- }
-
- return migrateData;
- },
-
- /**
- * Retrieves migration data from a database that has an older or newer schema.
- *
- * @return an object holding information about what add-ons were previously
- * userDisabled and any updated compatibility information
- */
- getMigrateDataFromDatabase: function XPIDB_getMigrateDataFromDatabase() {
- let migrateData = {};
-
- // Attempt to migrate data from a different (even future!) version of the
- // database
- try {
- var stmt = this.connection.createStatement("SELECT internal_id, id, " +
- "location, userDisabled, " +
- "installDate, version " +
- "FROM addon");
- for (let row in resultRows(stmt)) {
- if (!(row.location in migrateData))
- migrateData[row.location] = {};
- migrateData[row.location][row.id] = {
- internal_id: row.internal_id,
- version: row.version,
- installDate: row.installDate,
- userDisabled: row.userDisabled == 1,
- targetApplications: []
- };
+ catch (e) {
+ // An error here means the schema is too different to read
+ ERROR("Error migrating data: " + e);
}
-
- var taStmt = this.connection.createStatement("SELECT id, minVersion, " +
- "maxVersion FROM " +
- "targetApplication WHERE " +
- "addon_internal_id=:internal_id");
-
- for (let location in migrateData) {
- for (let id in migrateData[location]) {
- taStmt.params.internal_id = migrateData[location][id].internal_id;
- delete migrateData[location][id].internal_id;
- for (let row in resultRows(taStmt)) {
- migrateData[location][id].targetApplications.push({
- id: row.id,
- minVersion: row.minVersion,
- maxVersion: row.maxVersion
- });
- }
- }
+ finally {
+ if (taStmt)
+ taStmt.finalize();
+ if (stmt)
+ stmt.finalize();
}
+ this.connection.close();
+ this.initialized = false;
}
- catch (e) {
- // An error here means the schema is too different to read
- ERROR("Error migrating data: " + e);
- }
- finally {
- if (taStmt)
- taStmt.finalize();
- if (stmt)
- stmt.finalize();
- }
+
+ // Delete any existing database file
+ let dbfile = FileUtils.getFile(KEY_PROFILEDIR, [FILE_DATABASE], true);
+ if (dbfile.exists())
+ dbfile.remove(true);
return migrateData;
},
@@ -3769,8 +3591,7 @@ var XPIDatabase = {
// Re-create the connection smart getter to allow the database to be
// re-loaded during testing.
this.__defineGetter__("connection", function() {
- this.openConnection(true);
- return this.connection;
+ return this.openConnection();
});
connection.asyncClose(aCallback);
@@ -3866,6 +3687,7 @@ var XPIDatabase = {
"DELETE FROM locale_strings WHERE locale_id=old.id; " +
"END");
this.connection.schemaVersion = DB_SCHEMA;
+ Services.prefs.setIntPref(PREF_DB_SCHEMA, DB_SCHEMA);
this.commitTransaction();
}
catch (e) {
@@ -4407,6 +4229,9 @@ var XPIDatabase = {
return row;
}
+ aAddon.active = (aAddon.visible && !aAddon.userDisabled &&
+ !aAddon.appDisabled);
+
if (aAddon.visible) {
let stmt = this.getStatement("clearVisibleAddons");
stmt.params.id = aAddon.id;
@@ -4484,8 +4309,6 @@ var XPIDatabase = {
this.removeAddonMetadata(aOldAddon);
aNewAddon.installDate = aOldAddon.installDate;
aNewAddon.applyBackgroundUpdates = aOldAddon.applyBackgroundUpdates;
- aNewAddon.active = (aNewAddon.visible && !aNewAddon.userDisabled &&
- !aNewAddon.appDisabled)
this.addAddonMetadata(aNewAddon, aDescriptor);
this.commitTransaction();
}
@@ -5587,8 +5410,6 @@ AddonInstall.prototype = {
}
else {
this.addon.installDate = this.addon.updateDate;
- this.addon.active = (this.addon.visible && !this.addon.userDisabled &&
- !this.addon.appDisabled)
XPIDatabase.addAddonMetadata(this.addon, file.persistentDescriptor);
}
diff --git a/toolkit/mozapps/extensions/test/xpcshell/data/test_corrupt.rdf b/toolkit/mozapps/extensions/test/xpcshell/data/test_corrupt.rdf
deleted file mode 100644
index f3341bdcfb6..00000000000
--- a/toolkit/mozapps/extensions/test/xpcshell/data/test_corrupt.rdf
+++ /dev/null
@@ -1,44 +0,0 @@
-
-
-
-
-
-
-
-
-
- 1.0
-
-
- xpcshell@tests.mozilla.org
- 1
- 2
-
-
-
-
-
-
-
-
-
-
-
-
-
- 1.0
-
-
- xpcshell@tests.mozilla.org
- 1
- 2
-
-
-
-
-
-
-
-
-
diff --git a/toolkit/mozapps/extensions/test/xpcshell/head_addons.js b/toolkit/mozapps/extensions/test/xpcshell/head_addons.js
index 1f97b3bad90..0b5fff90f23 100644
--- a/toolkit/mozapps/extensions/test/xpcshell/head_addons.js
+++ b/toolkit/mozapps/extensions/test/xpcshell/head_addons.js
@@ -446,7 +446,7 @@ function createInstallRDF(aData) {
["id", "version", "type", "internalName", "updateURL", "updateKey",
"optionsURL", "aboutURL", "iconURL", "icon64URL",
- "skinnable", "bootstrap"].forEach(function(aProp) {
+ "skinnable"].forEach(function(aProp) {
if (aProp in aData)
rdf += "" + escapeXML(aData[aProp]) + "\n";
});
diff --git a/toolkit/mozapps/extensions/test/xpcshell/test_badschema.js b/toolkit/mozapps/extensions/test/xpcshell/test_badschema.js
deleted file mode 100644
index a037b6a1902..00000000000
--- a/toolkit/mozapps/extensions/test/xpcshell/test_badschema.js
+++ /dev/null
@@ -1,396 +0,0 @@
-/* Any copyright is dedicated to the Public Domain.
- * http://creativecommons.org/publicdomain/zero/1.0/
- */
-
-// Checks that we rebuild something sensible from a database with a bad schema
-
-
-do_load_httpd_js();
-var testserver;
-
-// The test extension uses an insecure update url.
-Services.prefs.setBoolPref("extensions.checkUpdateSecurity", false);
-
-// Will be enabled
-var addon1 = {
- id: "addon1@tests.mozilla.org",
- version: "1.0",
- name: "Test 1",
- targetApplications: [{
- id: "xpcshell@tests.mozilla.org",
- minVersion: "2",
- maxVersion: "2"
- }]
-};
-
-// Will be disabled
-var addon2 = {
- id: "addon2@tests.mozilla.org",
- version: "1.0",
- name: "Test 2",
- targetApplications: [{
- id: "xpcshell@tests.mozilla.org",
- minVersion: "2",
- maxVersion: "2"
- }]
-};
-
-// Will get a compatibility update and be enabled
-var addon3 = {
- id: "addon3@tests.mozilla.org",
- version: "1.0",
- name: "Test 3",
- updateURL: "http://localhost:4444/data/test_corrupt.rdf",
- targetApplications: [{
- id: "xpcshell@tests.mozilla.org",
- minVersion: "1",
- maxVersion: "1"
- }]
-};
-
-// Will get a compatibility update and be disabled
-var addon4 = {
- id: "addon4@tests.mozilla.org",
- version: "1.0",
- name: "Test 4",
- updateURL: "http://localhost:4444/data/test_corrupt.rdf",
- targetApplications: [{
- id: "xpcshell@tests.mozilla.org",
- minVersion: "1",
- maxVersion: "1"
- }]
-};
-
-// Stays incompatible
-var addon5 = {
- id: "addon5@tests.mozilla.org",
- version: "1.0",
- name: "Test 5",
- targetApplications: [{
- id: "xpcshell@tests.mozilla.org",
- minVersion: "1",
- maxVersion: "1"
- }]
-};
-
-// Enabled bootstrapped
-var addon6 = {
- id: "addon6@tests.mozilla.org",
- version: "1.0",
- name: "Test 6",
- bootstrap: "true",
- targetApplications: [{
- id: "xpcshell@tests.mozilla.org",
- minVersion: "2",
- maxVersion: "2"
- }]
-};
-
-// Disabled bootstrapped
-var addon7 = {
- id: "addon7@tests.mozilla.org",
- version: "1.0",
- name: "Test 7",
- bootstrap: "true",
- targetApplications: [{
- id: "xpcshell@tests.mozilla.org",
- minVersion: "2",
- maxVersion: "2"
- }]
-};
-
-// The default theme
-var theme1 = {
- id: "theme1@tests.mozilla.org",
- version: "1.0",
- name: "Theme 1",
- internalName: "classic/1.0",
- targetApplications: [{
- id: "xpcshell@tests.mozilla.org",
- minVersion: "2",
- maxVersion: "2"
- }]
-};
-
-// The selected theme
-var theme2 = {
- id: "theme2@tests.mozilla.org",
- version: "1.0",
- name: "Theme 2",
- internalName: "test/1.0",
- targetApplications: [{
- id: "xpcshell@tests.mozilla.org",
- minVersion: "2",
- maxVersion: "2"
- }]
-};
-
-const profileDir = gProfD.clone();
-profileDir.append("extensions");
-
-function run_test() {
- do_test_pending();
- createAppInfo("xpcshell@tests.mozilla.org", "XPCShell", "2", "2");
-
- writeInstallRDFForExtension(addon1, profileDir);
- writeInstallRDFForExtension(addon2, profileDir);
- writeInstallRDFForExtension(addon3, profileDir);
- writeInstallRDFForExtension(addon4, profileDir);
- writeInstallRDFForExtension(addon5, profileDir);
- writeInstallRDFForExtension(addon6, profileDir);
- writeInstallRDFForExtension(addon7, profileDir);
- writeInstallRDFForExtension(theme1, profileDir);
- writeInstallRDFForExtension(theme2, profileDir);
-
- // Create and configure the HTTP server.
- testserver = new nsHttpServer();
- testserver.registerDirectory("/addons/", do_get_file("addons"));
- testserver.registerDirectory("/data/", do_get_file("data"));
- testserver.start(4444);
-
- // Startup the profile and setup the initial state
- startupManager();
-
- AddonManager.getAddonsByIDs(["addon2@tests.mozilla.org",
- "addon3@tests.mozilla.org",
- "addon4@tests.mozilla.org",
- "addon7@tests.mozilla.org",
- "theme2@tests.mozilla.org"], function([a2, a3, a4,
- a7, t2]) {
- // Set up the initial state
- a2.userDisabled = true;
- a4.userDisabled = true;
- a7.userDisabled = true;
- t2.userDisabled = false;
- a3.findUpdates({
- onUpdateFinished: function() {
- a4.findUpdates({
- onUpdateFinished: function() {
- restartManager();
-
- run_test_1();
- }
- }, AddonManager.UPDATE_WHEN_PERIODIC_UPDATE);
- }
- }, AddonManager.UPDATE_WHEN_PERIODIC_UPDATE);
- });
-}
-
-function end_test() {
- testserver.stop(do_test_finished);
-}
-
-function run_test_1() {
- AddonManager.getAddonsByIDs(["addon1@tests.mozilla.org",
- "addon2@tests.mozilla.org",
- "addon3@tests.mozilla.org",
- "addon4@tests.mozilla.org",
- "addon5@tests.mozilla.org",
- "addon6@tests.mozilla.org",
- "addon7@tests.mozilla.org",
- "theme1@tests.mozilla.org",
- "theme2@tests.mozilla.org"], function([a1, a2, a3,
- a4, a5, a6,
- a7, t1, t2]) {
- do_check_neq(a1, null);
- do_check_true(a1.isActive);
- do_check_false(a1.userDisabled);
- do_check_false(a1.appDisabled);
- do_check_eq(a1.pendingOperations, AddonManager.PENDING_NONE);
-
- do_check_neq(a2, null);
- do_check_false(a2.isActive);
- do_check_true(a2.userDisabled);
- do_check_false(a2.appDisabled);
- do_check_eq(a2.pendingOperations, AddonManager.PENDING_NONE);
-
- do_check_neq(a3, null);
- do_check_true(a3.isActive);
- do_check_false(a3.userDisabled);
- do_check_false(a3.appDisabled);
- do_check_eq(a3.pendingOperations, AddonManager.PENDING_NONE);
-
- do_check_neq(a4, null);
- do_check_false(a4.isActive);
- do_check_true(a4.userDisabled);
- do_check_false(a4.appDisabled);
- do_check_eq(a4.pendingOperations, AddonManager.PENDING_NONE);
-
- do_check_neq(a5, null);
- do_check_false(a5.isActive);
- do_check_false(a5.userDisabled);
- do_check_true(a5.appDisabled);
- do_check_eq(a5.pendingOperations, AddonManager.PENDING_NONE);
-
- do_check_neq(a6, null);
- do_check_true(a6.isActive);
- do_check_false(a6.userDisabled);
- do_check_false(a6.appDisabled);
- do_check_eq(a6.pendingOperations, AddonManager.PENDING_NONE);
-
- do_check_neq(a7, null);
- do_check_false(a7.isActive);
- do_check_true(a7.userDisabled);
- do_check_false(a7.appDisabled);
- do_check_eq(a7.pendingOperations, AddonManager.PENDING_NONE);
-
- do_check_neq(t1, null);
- do_check_false(t1.isActive);
- do_check_true(t1.userDisabled);
- do_check_false(t1.appDisabled);
- do_check_eq(t1.pendingOperations, AddonManager.PENDING_NONE);
-
- do_check_neq(t2, null);
- do_check_true(t2.isActive);
- do_check_false(t2.userDisabled);
- do_check_false(t2.appDisabled);
- do_check_eq(t2.pendingOperations, AddonManager.PENDING_NONE);
-
- // After restarting the database won't be open and so can be replaced with
- // a bad file
- restartManager();
- var dbfile = gProfD.clone();
- dbfile.append("extensions.sqlite");
- var db = Services.storage.openDatabase(dbfile);
- db.schemaVersion = 100;
- db.close();
-
- // Accessing the add-ons should open and recover the database. Since
- // migration occurs everything should be recovered correctly
- AddonManager.getAddonsByIDs(["addon1@tests.mozilla.org",
- "addon2@tests.mozilla.org",
- "addon3@tests.mozilla.org",
- "addon4@tests.mozilla.org",
- "addon5@tests.mozilla.org",
- "addon6@tests.mozilla.org",
- "addon7@tests.mozilla.org",
- "theme1@tests.mozilla.org",
- "theme2@tests.mozilla.org"], function([a1, a2, a3,
- a4, a5, a6,
- a7, t1, t2]) {
- do_check_neq(a1, null);
- do_check_true(a1.isActive);
- do_check_false(a1.userDisabled);
- do_check_false(a1.appDisabled);
- do_check_eq(a1.pendingOperations, AddonManager.PENDING_NONE);
-
- do_check_neq(a2, null);
- do_check_false(a2.isActive);
- do_check_true(a2.userDisabled);
- do_check_false(a2.appDisabled);
- do_check_eq(a2.pendingOperations, AddonManager.PENDING_NONE);
-
- do_check_neq(a3, null);
- do_check_true(a3.isActive);
- do_check_false(a3.userDisabled);
- do_check_false(a3.appDisabled);
- do_check_eq(a3.pendingOperations, AddonManager.PENDING_NONE);
-
- do_check_neq(a4, null);
- do_check_false(a4.isActive);
- do_check_true(a4.userDisabled);
- do_check_false(a4.appDisabled);
- do_check_eq(a4.pendingOperations, AddonManager.PENDING_NONE);
-
- do_check_neq(a5, null);
- do_check_false(a5.isActive);
- do_check_false(a5.userDisabled);
- do_check_true(a5.appDisabled);
- do_check_eq(a5.pendingOperations, AddonManager.PENDING_NONE);
-
- do_check_neq(a6, null);
- do_check_true(a6.isActive);
- do_check_false(a6.userDisabled);
- do_check_false(a6.appDisabled);
- do_check_eq(a6.pendingOperations, AddonManager.PENDING_NONE);
-
- do_check_neq(a7, null);
- do_check_false(a7.isActive);
- do_check_true(a7.userDisabled);
- do_check_false(a7.appDisabled);
- do_check_eq(a7.pendingOperations, AddonManager.PENDING_NONE);
-
- do_check_neq(t1, null);
- do_check_false(t1.isActive);
- do_check_true(t1.userDisabled);
- do_check_false(t1.appDisabled);
- do_check_eq(t1.pendingOperations, AddonManager.PENDING_NONE);
-
- do_check_neq(t2, null);
- do_check_true(t2.isActive);
- do_check_false(t2.userDisabled);
- do_check_false(t2.appDisabled);
- do_check_eq(t2.pendingOperations, AddonManager.PENDING_NONE);
-
- restartManager();
-
- AddonManager.getAddonsByIDs(["addon1@tests.mozilla.org",
- "addon2@tests.mozilla.org",
- "addon3@tests.mozilla.org",
- "addon4@tests.mozilla.org",
- "addon5@tests.mozilla.org",
- "addon6@tests.mozilla.org",
- "addon7@tests.mozilla.org",
- "theme1@tests.mozilla.org",
- "theme2@tests.mozilla.org"], function([a1, a2, a3,
- a4, a5, a6,
- a7, t1, t2]) {
- do_check_neq(a1, null);
- do_check_true(a1.isActive);
- do_check_false(a1.userDisabled);
- do_check_false(a1.appDisabled);
- do_check_eq(a1.pendingOperations, AddonManager.PENDING_NONE);
-
- do_check_neq(a2, null);
- do_check_false(a2.isActive);
- do_check_true(a2.userDisabled);
- do_check_false(a2.appDisabled);
- do_check_eq(a2.pendingOperations, AddonManager.PENDING_NONE);
-
- do_check_neq(a3, null);
- do_check_true(a3.isActive);
- do_check_false(a3.userDisabled);
- do_check_false(a3.appDisabled);
- do_check_eq(a3.pendingOperations, AddonManager.PENDING_NONE);
-
- do_check_neq(a4, null);
- do_check_false(a4.isActive);
- do_check_true(a4.userDisabled);
- do_check_false(a4.appDisabled);
- do_check_eq(a4.pendingOperations, AddonManager.PENDING_NONE);
-
- do_check_neq(a5, null);
- do_check_false(a5.isActive);
- do_check_false(a5.userDisabled);
- do_check_true(a5.appDisabled);
- do_check_eq(a5.pendingOperations, AddonManager.PENDING_NONE);
-
- do_check_neq(a6, null);
- do_check_true(a6.isActive);
- do_check_false(a6.userDisabled);
- do_check_false(a6.appDisabled);
- do_check_eq(a6.pendingOperations, AddonManager.PENDING_NONE);
-
- do_check_neq(a7, null);
- do_check_false(a7.isActive);
- do_check_true(a7.userDisabled);
- do_check_false(a7.appDisabled);
- do_check_eq(a7.pendingOperations, AddonManager.PENDING_NONE);
-
- do_check_neq(t1, null);
- do_check_false(t1.isActive);
- do_check_true(t1.userDisabled);
- do_check_false(t1.appDisabled);
- do_check_eq(t1.pendingOperations, AddonManager.PENDING_NONE);
-
- do_check_neq(t2, null);
- do_check_true(t2.isActive);
- do_check_false(t2.userDisabled);
- do_check_false(t2.appDisabled);
- do_check_eq(t2.pendingOperations, AddonManager.PENDING_NONE);
-
- end_test();
- });
- });
- });
-}
diff --git a/toolkit/mozapps/extensions/test/xpcshell/test_corrupt.js b/toolkit/mozapps/extensions/test/xpcshell/test_corrupt.js
deleted file mode 100644
index 7ea3a604960..00000000000
--- a/toolkit/mozapps/extensions/test/xpcshell/test_corrupt.js
+++ /dev/null
@@ -1,400 +0,0 @@
-/* Any copyright is dedicated to the Public Domain.
- * http://creativecommons.org/publicdomain/zero/1.0/
- */
-
-// Checks that we rebuild something sensible from a corrupt database
-
-
-do_load_httpd_js();
-var testserver;
-
-// The test extension uses an insecure update url.
-Services.prefs.setBoolPref("extensions.checkUpdateSecurity", false);
-
-// Will be enabled
-var addon1 = {
- id: "addon1@tests.mozilla.org",
- version: "1.0",
- name: "Test 1",
- targetApplications: [{
- id: "xpcshell@tests.mozilla.org",
- minVersion: "2",
- maxVersion: "2"
- }]
-};
-
-// Will be disabled
-var addon2 = {
- id: "addon2@tests.mozilla.org",
- version: "1.0",
- name: "Test 2",
- targetApplications: [{
- id: "xpcshell@tests.mozilla.org",
- minVersion: "2",
- maxVersion: "2"
- }]
-};
-
-// Will get a compatibility update and be enabled
-var addon3 = {
- id: "addon3@tests.mozilla.org",
- version: "1.0",
- name: "Test 3",
- updateURL: "http://localhost:4444/data/test_corrupt.rdf",
- targetApplications: [{
- id: "xpcshell@tests.mozilla.org",
- minVersion: "1",
- maxVersion: "1"
- }]
-};
-
-// Will get a compatibility update and be disabled
-var addon4 = {
- id: "addon4@tests.mozilla.org",
- version: "1.0",
- name: "Test 4",
- updateURL: "http://localhost:4444/data/test_corrupt.rdf",
- targetApplications: [{
- id: "xpcshell@tests.mozilla.org",
- minVersion: "1",
- maxVersion: "1"
- }]
-};
-
-// Stays incompatible
-var addon5 = {
- id: "addon5@tests.mozilla.org",
- version: "1.0",
- name: "Test 5",
- targetApplications: [{
- id: "xpcshell@tests.mozilla.org",
- minVersion: "1",
- maxVersion: "1"
- }]
-};
-
-// Enabled bootstrapped
-var addon6 = {
- id: "addon6@tests.mozilla.org",
- version: "1.0",
- name: "Test 6",
- bootstrap: "true",
- targetApplications: [{
- id: "xpcshell@tests.mozilla.org",
- minVersion: "2",
- maxVersion: "2"
- }]
-};
-
-// Disabled bootstrapped
-var addon7 = {
- id: "addon7@tests.mozilla.org",
- version: "1.0",
- name: "Test 7",
- bootstrap: "true",
- targetApplications: [{
- id: "xpcshell@tests.mozilla.org",
- minVersion: "2",
- maxVersion: "2"
- }]
-};
-
-// The default theme
-var theme1 = {
- id: "theme1@tests.mozilla.org",
- version: "1.0",
- name: "Theme 1",
- internalName: "classic/1.0",
- targetApplications: [{
- id: "xpcshell@tests.mozilla.org",
- minVersion: "2",
- maxVersion: "2"
- }]
-};
-
-// The selected theme
-var theme2 = {
- id: "theme2@tests.mozilla.org",
- version: "1.0",
- name: "Theme 2",
- internalName: "test/1.0",
- targetApplications: [{
- id: "xpcshell@tests.mozilla.org",
- minVersion: "2",
- maxVersion: "2"
- }]
-};
-
-const profileDir = gProfD.clone();
-profileDir.append("extensions");
-
-function run_test() {
- do_test_pending();
- createAppInfo("xpcshell@tests.mozilla.org", "XPCShell", "2", "2");
-
- writeInstallRDFForExtension(addon1, profileDir);
- writeInstallRDFForExtension(addon2, profileDir);
- writeInstallRDFForExtension(addon3, profileDir);
- writeInstallRDFForExtension(addon4, profileDir);
- writeInstallRDFForExtension(addon5, profileDir);
- writeInstallRDFForExtension(addon6, profileDir);
- writeInstallRDFForExtension(addon7, profileDir);
- writeInstallRDFForExtension(theme1, profileDir);
- writeInstallRDFForExtension(theme2, profileDir);
-
- // Create and configure the HTTP server.
- testserver = new nsHttpServer();
- testserver.registerDirectory("/addons/", do_get_file("addons"));
- testserver.registerDirectory("/data/", do_get_file("data"));
- testserver.start(4444);
-
- // Startup the profile and setup the initial state
- startupManager();
-
- AddonManager.getAddonsByIDs(["addon2@tests.mozilla.org",
- "addon3@tests.mozilla.org",
- "addon4@tests.mozilla.org",
- "addon7@tests.mozilla.org",
- "theme2@tests.mozilla.org"], function([a2, a3, a4,
- a7, t2]) {
- // Set up the initial state
- a2.userDisabled = true;
- a4.userDisabled = true;
- a7.userDisabled = true;
- t2.userDisabled = false;
- a3.findUpdates({
- onUpdateFinished: function() {
- a4.findUpdates({
- onUpdateFinished: function() {
- restartManager();
-
- run_test_1();
- }
- }, AddonManager.UPDATE_WHEN_PERIODIC_UPDATE);
- }
- }, AddonManager.UPDATE_WHEN_PERIODIC_UPDATE);
- });
-}
-
-function end_test() {
- testserver.stop(do_test_finished);
-}
-
-function run_test_1() {
- AddonManager.getAddonsByIDs(["addon1@tests.mozilla.org",
- "addon2@tests.mozilla.org",
- "addon3@tests.mozilla.org",
- "addon4@tests.mozilla.org",
- "addon5@tests.mozilla.org",
- "addon6@tests.mozilla.org",
- "addon7@tests.mozilla.org",
- "theme1@tests.mozilla.org",
- "theme2@tests.mozilla.org"], function([a1, a2, a3,
- a4, a5, a6,
- a7, t1, t2]) {
- do_check_neq(a1, null);
- do_check_true(a1.isActive);
- do_check_false(a1.userDisabled);
- do_check_false(a1.appDisabled);
- do_check_eq(a1.pendingOperations, AddonManager.PENDING_NONE);
-
- do_check_neq(a2, null);
- do_check_false(a2.isActive);
- do_check_true(a2.userDisabled);
- do_check_false(a2.appDisabled);
- do_check_eq(a2.pendingOperations, AddonManager.PENDING_NONE);
-
- do_check_neq(a3, null);
- do_check_true(a3.isActive);
- do_check_false(a3.userDisabled);
- do_check_false(a3.appDisabled);
- do_check_eq(a3.pendingOperations, AddonManager.PENDING_NONE);
-
- do_check_neq(a4, null);
- do_check_false(a4.isActive);
- do_check_true(a4.userDisabled);
- do_check_false(a4.appDisabled);
- do_check_eq(a4.pendingOperations, AddonManager.PENDING_NONE);
-
- do_check_neq(a5, null);
- do_check_false(a5.isActive);
- do_check_false(a5.userDisabled);
- do_check_true(a5.appDisabled);
- do_check_eq(a5.pendingOperations, AddonManager.PENDING_NONE);
-
- do_check_neq(a6, null);
- do_check_true(a6.isActive);
- do_check_false(a6.userDisabled);
- do_check_false(a6.appDisabled);
- do_check_eq(a6.pendingOperations, AddonManager.PENDING_NONE);
-
- do_check_neq(a7, null);
- do_check_false(a7.isActive);
- do_check_true(a7.userDisabled);
- do_check_false(a7.appDisabled);
- do_check_eq(a7.pendingOperations, AddonManager.PENDING_NONE);
-
- do_check_neq(t1, null);
- do_check_false(t1.isActive);
- do_check_true(t1.userDisabled);
- do_check_false(t1.appDisabled);
- do_check_eq(t1.pendingOperations, AddonManager.PENDING_NONE);
-
- do_check_neq(t2, null);
- do_check_true(t2.isActive);
- do_check_false(t2.userDisabled);
- do_check_false(t2.appDisabled);
- do_check_eq(t2.pendingOperations, AddonManager.PENDING_NONE);
-
- // After restarting the database won't be open and so can be replaced with
- // a bad file
- restartManager();
- var dbfile = gProfD.clone();
- dbfile.append("extensions.sqlite");
- dbfile.remove(true);
- dbfile.create(AM_Ci.nsIFile.DIRECTORY_TYPE, 0755);
-
- // Accessing the add-ons should open and recover the database
- AddonManager.getAddonsByIDs(["addon1@tests.mozilla.org",
- "addon2@tests.mozilla.org",
- "addon3@tests.mozilla.org",
- "addon4@tests.mozilla.org",
- "addon5@tests.mozilla.org",
- "theme1@tests.mozilla.org",
- "theme2@tests.mozilla.org"], function([a1, a2, a3,
- a4, a5, t1,
- t2]) {
- // Should be correctly recovered
- do_check_neq(a1, null);
- do_check_true(a1.isActive);
- do_check_false(a1.userDisabled);
- do_check_false(a1.appDisabled);
- do_check_eq(a1.pendingOperations, AddonManager.PENDING_NONE);
-
- // Should be correctly recovered
- do_check_neq(a2, null);
- do_check_false(a2.isActive);
- do_check_true(a2.userDisabled);
- do_check_false(a2.appDisabled);
- do_check_eq(a2.pendingOperations, AddonManager.PENDING_NONE);
-
- // The compatibility update won't be recovered but it should still be
- // active for this session
- do_check_neq(a3, null);
- do_check_true(a3.isActive);
- do_check_false(a3.userDisabled);
- do_check_true(a3.appDisabled);
- do_check_eq(a3.pendingOperations, AddonManager.PENDING_DISABLE);
-
- // The compatibility update won't be recovered and it will not have been
- // able to tell that it was previously userDisabled
- do_check_neq(a4, null);
- do_check_false(a4.isActive);
- do_check_false(a4.userDisabled);
- do_check_true(a4.appDisabled);
- do_check_eq(a4.pendingOperations, AddonManager.PENDING_NONE);
-
- do_check_neq(a5, null);
- do_check_false(a5.isActive);
- do_check_false(a5.userDisabled);
- do_check_true(a5.appDisabled);
- do_check_eq(a5.pendingOperations, AddonManager.PENDING_NONE);
-
- do_check_neq(a6, null);
- do_check_true(a6.isActive);
- do_check_false(a6.userDisabled);
- do_check_false(a6.appDisabled);
- do_check_eq(a6.pendingOperations, AddonManager.PENDING_NONE);
-
- do_check_neq(a7, null);
- do_check_false(a7.isActive);
- do_check_true(a7.userDisabled);
- do_check_false(a7.appDisabled);
- do_check_eq(a7.pendingOperations, AddonManager.PENDING_NONE);
-
- // Should be correctly recovered
- do_check_neq(t1, null);
- do_check_false(t1.isActive);
- do_check_true(t1.userDisabled);
- do_check_false(t1.appDisabled);
- do_check_eq(t1.pendingOperations, AddonManager.PENDING_NONE);
-
- // Should be correctly recovered
- do_check_neq(t2, null);
- do_check_true(t2.isActive);
- do_check_false(t2.userDisabled);
- do_check_false(t2.appDisabled);
- do_check_eq(t2.pendingOperations, AddonManager.PENDING_NONE);
-
- restartManager();
-
- AddonManager.getAddonsByIDs(["addon1@tests.mozilla.org",
- "addon2@tests.mozilla.org",
- "addon3@tests.mozilla.org",
- "addon4@tests.mozilla.org",
- "addon5@tests.mozilla.org",
- "addon6@tests.mozilla.org",
- "addon7@tests.mozilla.org",
- "theme1@tests.mozilla.org",
- "theme2@tests.mozilla.org"], function([a1, a2, a3,
- a4, a5, a6,
- a7, t1, t2]) {
- do_check_neq(a1, null);
- do_check_true(a1.isActive);
- do_check_false(a1.userDisabled);
- do_check_false(a1.appDisabled);
- do_check_eq(a1.pendingOperations, AddonManager.PENDING_NONE);
-
- do_check_neq(a2, null);
- do_check_false(a2.isActive);
- do_check_true(a2.userDisabled);
- do_check_false(a2.appDisabled);
- do_check_eq(a2.pendingOperations, AddonManager.PENDING_NONE);
-
- do_check_neq(a3, null);
- do_check_false(a3.isActive);
- do_check_false(a3.userDisabled);
- do_check_true(a3.appDisabled);
- do_check_eq(a3.pendingOperations, AddonManager.PENDING_NONE);
-
- do_check_neq(a4, null);
- do_check_false(a4.isActive);
- do_check_false(a4.userDisabled);
- do_check_true(a4.appDisabled);
- do_check_eq(a4.pendingOperations, AddonManager.PENDING_NONE);
-
- do_check_neq(a5, null);
- do_check_false(a5.isActive);
- do_check_false(a5.userDisabled);
- do_check_true(a5.appDisabled);
- do_check_eq(a5.pendingOperations, AddonManager.PENDING_NONE);
-
- do_check_neq(a6, null);
- do_check_true(a6.isActive);
- do_check_false(a6.userDisabled);
- do_check_false(a6.appDisabled);
- do_check_eq(a6.pendingOperations, AddonManager.PENDING_NONE);
-
- do_check_neq(a7, null);
- do_check_false(a7.isActive);
- do_check_true(a7.userDisabled);
- do_check_false(a7.appDisabled);
- do_check_eq(a7.pendingOperations, AddonManager.PENDING_NONE);
-
- do_check_neq(t1, null);
- do_check_false(t1.isActive);
- do_check_true(t1.userDisabled);
- do_check_false(t1.appDisabled);
- do_check_eq(t1.pendingOperations, AddonManager.PENDING_NONE);
-
- do_check_neq(t2, null);
- do_check_true(t2.isActive);
- do_check_false(t2.userDisabled);
- do_check_false(t2.appDisabled);
- do_check_eq(t2.pendingOperations, AddonManager.PENDING_NONE);
-
- end_test();
- });
- });
- });
-}
diff --git a/toolkit/mozapps/extensions/test/xpcshell/test_locked.js b/toolkit/mozapps/extensions/test/xpcshell/test_locked.js
deleted file mode 100644
index e6061f41ed2..00000000000
--- a/toolkit/mozapps/extensions/test/xpcshell/test_locked.js
+++ /dev/null
@@ -1,406 +0,0 @@
-/* Any copyright is dedicated to the Public Domain.
- * http://creativecommons.org/publicdomain/zero/1.0/
- */
-
-// Checks that we rebuild something sensible from a corrupt database
-
-
-do_load_httpd_js();
-var testserver;
-
-// The test extension uses an insecure update url.
-Services.prefs.setBoolPref("extensions.checkUpdateSecurity", false);
-
-// Will be enabled
-var addon1 = {
- id: "addon1@tests.mozilla.org",
- version: "1.0",
- name: "Test 1",
- targetApplications: [{
- id: "xpcshell@tests.mozilla.org",
- minVersion: "2",
- maxVersion: "2"
- }]
-};
-
-// Will be disabled
-var addon2 = {
- id: "addon2@tests.mozilla.org",
- version: "1.0",
- name: "Test 2",
- targetApplications: [{
- id: "xpcshell@tests.mozilla.org",
- minVersion: "2",
- maxVersion: "2"
- }]
-};
-
-// Will get a compatibility update and be enabled
-var addon3 = {
- id: "addon3@tests.mozilla.org",
- version: "1.0",
- name: "Test 3",
- updateURL: "http://localhost:4444/data/test_corrupt.rdf",
- targetApplications: [{
- id: "xpcshell@tests.mozilla.org",
- minVersion: "1",
- maxVersion: "1"
- }]
-};
-
-// Will get a compatibility update and be disabled
-var addon4 = {
- id: "addon4@tests.mozilla.org",
- version: "1.0",
- name: "Test 4",
- updateURL: "http://localhost:4444/data/test_corrupt.rdf",
- targetApplications: [{
- id: "xpcshell@tests.mozilla.org",
- minVersion: "1",
- maxVersion: "1"
- }]
-};
-
-// Stays incompatible
-var addon5 = {
- id: "addon5@tests.mozilla.org",
- version: "1.0",
- name: "Test 5",
- targetApplications: [{
- id: "xpcshell@tests.mozilla.org",
- minVersion: "1",
- maxVersion: "1"
- }]
-};
-
-// Enabled bootstrapped
-var addon6 = {
- id: "addon6@tests.mozilla.org",
- version: "1.0",
- name: "Test 6",
- bootstrap: "true",
- targetApplications: [{
- id: "xpcshell@tests.mozilla.org",
- minVersion: "2",
- maxVersion: "2"
- }]
-};
-
-// Disabled bootstrapped
-var addon7 = {
- id: "addon7@tests.mozilla.org",
- version: "1.0",
- name: "Test 7",
- bootstrap: "true",
- targetApplications: [{
- id: "xpcshell@tests.mozilla.org",
- minVersion: "2",
- maxVersion: "2"
- }]
-};
-
-// The default theme
-var theme1 = {
- id: "theme1@tests.mozilla.org",
- version: "1.0",
- name: "Theme 1",
- internalName: "classic/1.0",
- targetApplications: [{
- id: "xpcshell@tests.mozilla.org",
- minVersion: "2",
- maxVersion: "2"
- }]
-};
-
-// The selected theme
-var theme2 = {
- id: "theme2@tests.mozilla.org",
- version: "1.0",
- name: "Theme 2",
- internalName: "test/1.0",
- targetApplications: [{
- id: "xpcshell@tests.mozilla.org",
- minVersion: "2",
- maxVersion: "2"
- }]
-};
-
-const profileDir = gProfD.clone();
-profileDir.append("extensions");
-
-function run_test() {
- do_test_pending();
- createAppInfo("xpcshell@tests.mozilla.org", "XPCShell", "2", "2");
-
- writeInstallRDFForExtension(addon1, profileDir);
- writeInstallRDFForExtension(addon2, profileDir);
- writeInstallRDFForExtension(addon3, profileDir);
- writeInstallRDFForExtension(addon4, profileDir);
- writeInstallRDFForExtension(addon5, profileDir);
- writeInstallRDFForExtension(addon6, profileDir);
- writeInstallRDFForExtension(addon7, profileDir);
- writeInstallRDFForExtension(theme1, profileDir);
- writeInstallRDFForExtension(theme2, profileDir);
-
- // Create and configure the HTTP server.
- testserver = new nsHttpServer();
- testserver.registerDirectory("/addons/", do_get_file("addons"));
- testserver.registerDirectory("/data/", do_get_file("data"));
- testserver.start(4444);
-
- // Startup the profile and setup the initial state
- startupManager();
-
- AddonManager.getAddonsByIDs(["addon2@tests.mozilla.org",
- "addon3@tests.mozilla.org",
- "addon4@tests.mozilla.org",
- "addon7@tests.mozilla.org",
- "theme2@tests.mozilla.org"], function([a2, a3, a4,
- a7, t2]) {
- // Set up the initial state
- a2.userDisabled = true;
- a4.userDisabled = true;
- a7.userDisabled = true;
- t2.userDisabled = false;
- a3.findUpdates({
- onUpdateFinished: function() {
- a4.findUpdates({
- onUpdateFinished: function() {
- restartManager();
-
- run_test_1();
- }
- }, AddonManager.UPDATE_WHEN_PERIODIC_UPDATE);
- }
- }, AddonManager.UPDATE_WHEN_PERIODIC_UPDATE);
- });
-}
-
-function end_test() {
- testserver.stop(do_test_finished);
-}
-
-function run_test_1() {
- AddonManager.getAddonsByIDs(["addon1@tests.mozilla.org",
- "addon2@tests.mozilla.org",
- "addon3@tests.mozilla.org",
- "addon4@tests.mozilla.org",
- "addon5@tests.mozilla.org",
- "addon6@tests.mozilla.org",
- "addon7@tests.mozilla.org",
- "theme1@tests.mozilla.org",
- "theme2@tests.mozilla.org"], function([a1, a2, a3,
- a4, a5, a6,
- a7, t1, t2]) {
- do_check_neq(a1, null);
- do_check_true(a1.isActive);
- do_check_false(a1.userDisabled);
- do_check_false(a1.appDisabled);
- do_check_eq(a1.pendingOperations, AddonManager.PENDING_NONE);
-
- do_check_neq(a2, null);
- do_check_false(a2.isActive);
- do_check_true(a2.userDisabled);
- do_check_false(a2.appDisabled);
- do_check_eq(a2.pendingOperations, AddonManager.PENDING_NONE);
-
- do_check_neq(a3, null);
- do_check_true(a3.isActive);
- do_check_false(a3.userDisabled);
- do_check_false(a3.appDisabled);
- do_check_eq(a3.pendingOperations, AddonManager.PENDING_NONE);
-
- do_check_neq(a4, null);
- do_check_false(a4.isActive);
- do_check_true(a4.userDisabled);
- do_check_false(a4.appDisabled);
- do_check_eq(a4.pendingOperations, AddonManager.PENDING_NONE);
-
- do_check_neq(a5, null);
- do_check_false(a5.isActive);
- do_check_false(a5.userDisabled);
- do_check_true(a5.appDisabled);
- do_check_eq(a5.pendingOperations, AddonManager.PENDING_NONE);
-
- do_check_neq(a6, null);
- do_check_true(a6.isActive);
- do_check_false(a6.userDisabled);
- do_check_false(a6.appDisabled);
- do_check_eq(a6.pendingOperations, AddonManager.PENDING_NONE);
-
- do_check_neq(a7, null);
- do_check_false(a7.isActive);
- do_check_true(a7.userDisabled);
- do_check_false(a7.appDisabled);
- do_check_eq(a7.pendingOperations, AddonManager.PENDING_NONE);
-
- do_check_neq(t1, null);
- do_check_false(t1.isActive);
- do_check_true(t1.userDisabled);
- do_check_false(t1.appDisabled);
- do_check_eq(t1.pendingOperations, AddonManager.PENDING_NONE);
-
- do_check_neq(t2, null);
- do_check_true(t2.isActive);
- do_check_false(t2.userDisabled);
- do_check_false(t2.appDisabled);
- do_check_eq(t2.pendingOperations, AddonManager.PENDING_NONE);
-
- // After restarting the database won't be open and so can be replaced with
- // a bad file
- restartManager();
- var dbfile = gProfD.clone();
- dbfile.append("extensions.sqlite");
- // Mark the file unreadable
- dbfile.permissions = 0000;
-
- // Accessing the add-ons should open and recover the database
- AddonManager.getAddonsByIDs(["addon1@tests.mozilla.org",
- "addon2@tests.mozilla.org",
- "addon3@tests.mozilla.org",
- "addon4@tests.mozilla.org",
- "addon5@tests.mozilla.org",
- "addon6@tests.mozilla.org",
- "addon7@tests.mozilla.org",
- "theme1@tests.mozilla.org",
- "theme2@tests.mozilla.org"], function([a1, a2, a3,
- a4, a5, a6,
- a7, t1, t2]) {
- // Should be correctly recovered
- do_check_neq(a1, null);
- do_check_true(a1.isActive);
- do_check_false(a1.userDisabled);
- do_check_false(a1.appDisabled);
- do_check_eq(a1.pendingOperations, AddonManager.PENDING_NONE);
-
- // Should be correctly recovered
- do_check_neq(a2, null);
- do_check_false(a2.isActive);
- do_check_true(a2.userDisabled);
- do_check_false(a2.appDisabled);
- do_check_eq(a2.pendingOperations, AddonManager.PENDING_NONE);
-
- // The compatibility update won't be recovered but it should still be
- // active for this session
- do_check_neq(a3, null);
- do_check_true(a3.isActive);
- do_check_false(a3.userDisabled);
- do_check_true(a3.appDisabled);
- do_check_eq(a3.pendingOperations, AddonManager.PENDING_DISABLE);
-
- // The compatibility update won't be recovered and it will not have been
- // able to tell that it was previously userDisabled
- do_check_neq(a4, null);
- do_check_false(a4.isActive);
- do_check_false(a4.userDisabled);
- do_check_true(a4.appDisabled);
- do_check_eq(a4.pendingOperations, AddonManager.PENDING_NONE);
-
- do_check_neq(a5, null);
- do_check_false(a5.isActive);
- do_check_false(a5.userDisabled);
- do_check_true(a5.appDisabled);
- do_check_eq(a5.pendingOperations, AddonManager.PENDING_NONE);
-
- do_check_neq(a6, null);
- do_check_true(a6.isActive);
- do_check_false(a6.userDisabled);
- do_check_false(a6.appDisabled);
- do_check_eq(a6.pendingOperations, AddonManager.PENDING_NONE);
-
- do_check_neq(a7, null);
- do_check_false(a7.isActive);
- do_check_true(a7.userDisabled);
- do_check_false(a7.appDisabled);
- do_check_eq(a7.pendingOperations, AddonManager.PENDING_NONE);
-
- // Should be correctly recovered
- do_check_neq(t1, null);
- do_check_false(t1.isActive);
- do_check_true(t1.userDisabled);
- do_check_false(t1.appDisabled);
- do_check_eq(t1.pendingOperations, AddonManager.PENDING_NONE);
-
- // Should be correctly recovered
- do_check_neq(t2, null);
- do_check_true(t2.isActive);
- do_check_false(t2.userDisabled);
- do_check_false(t2.appDisabled);
- do_check_eq(t2.pendingOperations, AddonManager.PENDING_NONE);
-
- // Restarting will actually apply changes to extensions.ini which will
- // then be put into the in-memory database when we next fail to load the
- // real thing
- restartManager();
-
- AddonManager.getAddonsByIDs(["addon1@tests.mozilla.org",
- "addon2@tests.mozilla.org",
- "addon3@tests.mozilla.org",
- "addon4@tests.mozilla.org",
- "addon5@tests.mozilla.org",
- "addon6@tests.mozilla.org",
- "addon7@tests.mozilla.org",
- "theme1@tests.mozilla.org",
- "theme2@tests.mozilla.org"], function([a1, a2, a3,
- a4, a5, a6,
- a7, t1, t2]) {
- do_check_neq(a1, null);
- do_check_true(a1.isActive);
- do_check_false(a1.userDisabled);
- do_check_false(a1.appDisabled);
- do_check_eq(a1.pendingOperations, AddonManager.PENDING_NONE);
-
- do_check_neq(a2, null);
- do_check_false(a2.isActive);
- do_check_true(a2.userDisabled);
- do_check_false(a2.appDisabled);
- do_check_eq(a2.pendingOperations, AddonManager.PENDING_NONE);
-
- do_check_neq(a3, null);
- do_check_false(a3.isActive);
- do_check_false(a3.userDisabled);
- do_check_true(a3.appDisabled);
- do_check_eq(a3.pendingOperations, AddonManager.PENDING_NONE);
-
- do_check_neq(a4, null);
- do_check_false(a4.isActive);
- do_check_false(a4.userDisabled);
- do_check_true(a4.appDisabled);
- do_check_eq(a4.pendingOperations, AddonManager.PENDING_NONE);
-
- do_check_neq(a5, null);
- do_check_false(a5.isActive);
- do_check_false(a5.userDisabled);
- do_check_true(a5.appDisabled);
- do_check_eq(a5.pendingOperations, AddonManager.PENDING_NONE);
-
- do_check_neq(a6, null);
- do_check_true(a6.isActive);
- do_check_false(a6.userDisabled);
- do_check_false(a6.appDisabled);
- do_check_eq(a6.pendingOperations, AddonManager.PENDING_NONE);
-
- do_check_neq(a7, null);
- do_check_false(a7.isActive);
- do_check_true(a7.userDisabled);
- do_check_false(a7.appDisabled);
- do_check_eq(a7.pendingOperations, AddonManager.PENDING_NONE);
-
- do_check_neq(t1, null);
- do_check_false(t1.isActive);
- do_check_true(t1.userDisabled);
- do_check_false(t1.appDisabled);
- do_check_eq(t1.pendingOperations, AddonManager.PENDING_NONE);
-
- do_check_neq(t2, null);
- do_check_true(t2.isActive);
- do_check_false(t2.userDisabled);
- do_check_false(t2.appDisabled);
- do_check_eq(t2.pendingOperations, AddonManager.PENDING_NONE);
-
- dbfile.permissions = 0644;
- end_test();
- });
- });
- });
-}
diff --git a/toolkit/mozapps/extensions/test/xpcshell/test_migrate2.js b/toolkit/mozapps/extensions/test/xpcshell/test_migrate2.js
index 65c6fc66212..0b739169806 100644
--- a/toolkit/mozapps/extensions/test/xpcshell/test_migrate2.js
+++ b/toolkit/mozapps/extensions/test/xpcshell/test_migrate2.js
@@ -134,9 +134,8 @@ function run_test() {
stmt.execute();
stmt.finalize();
- db.schemaVersion = 100;
- Services.prefs.setIntPref("extensions.databaseSchema", 100);
db.close();
+ Services.prefs.setIntPref("extensions.databaseSchema", 100);
startupManager();
AddonManager.getAddonsByIDs(["addon1@tests.mozilla.org",