michael@0: /* Any copyright is dedicated to the Public Domain. michael@0: * http://creativecommons.org/publicdomain/zero/1.0/ michael@0: */ michael@0: michael@0: const KEY_PROFILEDIR = "ProfD"; michael@0: const KEY_APPDIR = "XCurProcD"; michael@0: const FILE_BLOCKLIST = "blocklist.xml"; michael@0: michael@0: const PREF_BLOCKLIST_ENABLED = "extensions.blocklist.enabled"; michael@0: michael@0: const OLD = do_get_file("data/test_overrideblocklist/old.xml"); michael@0: const NEW = do_get_file("data/test_overrideblocklist/new.xml"); michael@0: const ANCIENT = do_get_file("data/test_overrideblocklist/ancient.xml"); michael@0: const OLD_TSTAMP = 1296046918000; michael@0: const NEW_TSTAMP = 1396046918000; michael@0: michael@0: const gAppDir = FileUtils.getFile(KEY_APPDIR, []); michael@0: michael@0: let oldAddon = { michael@0: id: "old@tests.mozilla.org", michael@0: version: 1 michael@0: } michael@0: let newAddon = { michael@0: id: "new@tests.mozilla.org", michael@0: version: 1 michael@0: } michael@0: let ancientAddon = { michael@0: id: "ancient@tests.mozilla.org", michael@0: version: 1 michael@0: } michael@0: let invalidAddon = { michael@0: id: "invalid@tests.mozilla.org", michael@0: version: 1 michael@0: } michael@0: michael@0: function incrementAppVersion() { michael@0: gAppInfo.version = "" + (parseInt(gAppInfo.version) + 1); michael@0: } michael@0: michael@0: function clearBlocklists() { michael@0: let blocklist = FileUtils.getFile(KEY_APPDIR, [FILE_BLOCKLIST]); michael@0: if (blocklist.exists()) michael@0: blocklist.remove(true); michael@0: michael@0: blocklist = FileUtils.getFile(KEY_PROFILEDIR, [FILE_BLOCKLIST]); michael@0: if (blocklist.exists()) michael@0: blocklist.remove(true); michael@0: } michael@0: michael@0: function reloadBlocklist() { michael@0: Services.prefs.setBoolPref(PREF_BLOCKLIST_ENABLED, false); michael@0: Services.prefs.setBoolPref(PREF_BLOCKLIST_ENABLED, true); michael@0: } michael@0: michael@0: function copyToApp(file) { michael@0: file.clone().copyTo(gAppDir, FILE_BLOCKLIST); michael@0: } michael@0: michael@0: function copyToProfile(file, tstamp) { michael@0: file = file.clone(); michael@0: file.copyTo(gProfD, FILE_BLOCKLIST); michael@0: file = gProfD.clone(); michael@0: file.append(FILE_BLOCKLIST); michael@0: file.lastModifiedTime = tstamp; michael@0: } michael@0: michael@0: function run_test() { michael@0: createAppInfo("xpcshell@tests.mozilla.org", "XPCShell", "1", "1"); michael@0: michael@0: let appBlocklist = FileUtils.getFile(KEY_APPDIR, [FILE_BLOCKLIST]); michael@0: if (appBlocklist.exists()) { michael@0: try { michael@0: appBlocklist.moveTo(gAppDir, "blocklist.old"); michael@0: } michael@0: catch (e) { michael@0: todo(false, "Aborting test due to unmovable blocklist file: " + e); michael@0: return; michael@0: } michael@0: do_register_cleanup(function() { michael@0: clearBlocklists(); michael@0: appBlocklist.moveTo(gAppDir, FILE_BLOCKLIST); michael@0: }); michael@0: } michael@0: michael@0: run_next_test(); michael@0: } michael@0: michael@0: // On first run whataver is in the app dir should get copied to the profile michael@0: add_test(function test_copy() { michael@0: clearBlocklists(); michael@0: copyToApp(OLD); michael@0: michael@0: incrementAppVersion(); michael@0: startupManager(); michael@0: michael@0: reloadBlocklist(); michael@0: let blocklist = AM_Cc["@mozilla.org/extensions/blocklist;1"]. michael@0: getService(AM_Ci.nsIBlocklistService); michael@0: do_check_false(blocklist.isAddonBlocklisted(invalidAddon)); michael@0: do_check_false(blocklist.isAddonBlocklisted(ancientAddon)); michael@0: do_check_true(blocklist.isAddonBlocklisted(oldAddon)); michael@0: do_check_false(blocklist.isAddonBlocklisted(newAddon)); michael@0: michael@0: shutdownManager(); michael@0: michael@0: run_next_test(); michael@0: }); michael@0: michael@0: // An ancient blocklist should be ignored michael@0: add_test(function test_ancient() { michael@0: clearBlocklists(); michael@0: copyToApp(ANCIENT); michael@0: copyToProfile(OLD, OLD_TSTAMP); michael@0: michael@0: incrementAppVersion(); michael@0: startupManager(); michael@0: michael@0: reloadBlocklist(); michael@0: let blocklist = AM_Cc["@mozilla.org/extensions/blocklist;1"]. michael@0: getService(AM_Ci.nsIBlocklistService); michael@0: do_check_false(blocklist.isAddonBlocklisted(invalidAddon)); michael@0: do_check_false(blocklist.isAddonBlocklisted(ancientAddon)); michael@0: do_check_true(blocklist.isAddonBlocklisted(oldAddon)); michael@0: do_check_false(blocklist.isAddonBlocklisted(newAddon)); michael@0: michael@0: shutdownManager(); michael@0: michael@0: run_next_test(); michael@0: }); michael@0: michael@0: // A new blocklist should override an old blocklist michael@0: add_test(function test_override() { michael@0: clearBlocklists(); michael@0: copyToApp(NEW); michael@0: copyToProfile(OLD, OLD_TSTAMP); michael@0: michael@0: incrementAppVersion(); michael@0: startupManager(); michael@0: michael@0: reloadBlocklist(); michael@0: let blocklist = AM_Cc["@mozilla.org/extensions/blocklist;1"]. michael@0: getService(AM_Ci.nsIBlocklistService); michael@0: do_check_false(blocklist.isAddonBlocklisted(invalidAddon)); michael@0: do_check_false(blocklist.isAddonBlocklisted(ancientAddon)); michael@0: do_check_false(blocklist.isAddonBlocklisted(oldAddon)); michael@0: do_check_true(blocklist.isAddonBlocklisted(newAddon)); michael@0: michael@0: shutdownManager(); michael@0: michael@0: run_next_test(); michael@0: }); michael@0: michael@0: // An old blocklist shouldn't override a new blocklist michael@0: add_test(function test_retain() { michael@0: clearBlocklists(); michael@0: copyToApp(OLD); michael@0: copyToProfile(NEW, NEW_TSTAMP); michael@0: michael@0: incrementAppVersion(); michael@0: startupManager(); michael@0: michael@0: reloadBlocklist(); michael@0: let blocklist = AM_Cc["@mozilla.org/extensions/blocklist;1"]. michael@0: getService(AM_Ci.nsIBlocklistService); michael@0: do_check_false(blocklist.isAddonBlocklisted(invalidAddon)); michael@0: do_check_false(blocklist.isAddonBlocklisted(ancientAddon)); michael@0: do_check_false(blocklist.isAddonBlocklisted(oldAddon)); michael@0: do_check_true(blocklist.isAddonBlocklisted(newAddon)); michael@0: michael@0: shutdownManager(); michael@0: michael@0: run_next_test(); michael@0: }); michael@0: michael@0: // A missing blocklist in the profile should still load an app-shipped blocklist michael@0: add_test(function test_missing() { michael@0: clearBlocklists(); michael@0: copyToApp(OLD); michael@0: copyToProfile(NEW, NEW_TSTAMP); michael@0: michael@0: incrementAppVersion(); michael@0: startupManager(); michael@0: shutdownManager(); michael@0: michael@0: let blocklist = FileUtils.getFile(KEY_PROFILEDIR, [FILE_BLOCKLIST]); michael@0: blocklist.remove(true); michael@0: startupManager(false); michael@0: michael@0: reloadBlocklist(); michael@0: let blocklist = AM_Cc["@mozilla.org/extensions/blocklist;1"]. michael@0: getService(AM_Ci.nsIBlocklistService); michael@0: do_check_false(blocklist.isAddonBlocklisted(invalidAddon)); michael@0: do_check_false(blocklist.isAddonBlocklisted(ancientAddon)); michael@0: do_check_true(blocklist.isAddonBlocklisted(oldAddon)); michael@0: do_check_false(blocklist.isAddonBlocklisted(newAddon)); michael@0: michael@0: shutdownManager(); michael@0: michael@0: run_next_test(); michael@0: });