diff -r 000000000000 -r 6474c204b198 toolkit/mozapps/extensions/test/xpcshell/test_no_addons.js --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/toolkit/mozapps/extensions/test/xpcshell/test_no_addons.js Wed Dec 31 06:09:35 2014 +0100 @@ -0,0 +1,98 @@ +/* Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/publicdomain/zero/1.0/ + */ + +// Test startup and restart when no add-ons are installed +// bug 944006 + +Components.utils.import("resource://gre/modules/Promise.jsm"); + +// Load XPI Provider to get schema version ID +let XPIScope = Components.utils.import("resource://gre/modules/addons/XPIProvider.jsm"); +const DB_SCHEMA = XPIScope.DB_SCHEMA; + +createAppInfo("xpcshell@tests.mozilla.org", "XPCShell", "1", "1.9.2"); + +function run_test() { + // Kick off the task-based tests... + run_next_test(); +} + +// Test for a preference to either exist with a specified value, or not exist at all +function checkPending() { + try { + do_check_false(Services.prefs.getBoolPref("extensions.pendingOperations")); + } + catch (e) { + // OK + } +} + +function checkString(aPref, aValue) { + try { + do_check_eq(Services.prefs.getCharPref(aPref), aValue) + } + catch (e) { + //OK + } +} + +// Make sure all our extension state is empty/nonexistent +function check_empty_state() { + do_check_false(gExtensionsJSON.exists()); + do_check_false(gExtensionsINI.exists()); + + do_check_eq(Services.prefs.getIntPref("extensions.databaseSchema"), DB_SCHEMA); + + checkString("extensions.bootstrappedAddons", "{}"); + checkString("extensions.installCache", "[]"); + checkPending(); +} + +// After first run with no add-ons, we expect: +// no extensions.json is created +// no extensions.ini +// database schema version preference is set +// bootstrap add-ons preference is not found +// add-on directory state preference is an empty array +// no pending operations +add_task(function first_run() { + startupManager(); + check_empty_state(); + yield true; +}); + +// Now do something that causes a DB load, and re-check +function trigger_db_load() { + let addonDefer = Promise.defer(); + AddonManager.getAddonsByTypes(['extension'], addonDefer.resolve); + let addonList = yield addonDefer.promise; + + do_check_eq(addonList.length, 0); + check_empty_state(); + + yield true; +}; +add_task(trigger_db_load); + +// Now restart the manager and check again +add_task(function restart_and_recheck() { + restartManager(); + check_empty_state(); + yield true; +}); + +// and reload the DB again +add_task(trigger_db_load); + +// When we start up with no DB and an old database schema, we should update the +// schema number but not create a database +add_task(function upgrade_schema_version() { + shutdownManager(); + Services.prefs.setIntPref("extensions.databaseSchema", 1); + + startupManager(); + do_check_eq(Services.prefs.getIntPref("extensions.databaseSchema"), DB_SCHEMA); + check_empty_state(); +}); +