Files
UXP-Fixed/toolkit/mozapps/extensions/test/xpcshell/test_overrideblocklist.js
T
2018-02-10 04:00:58 -05:00

201 lines
5.4 KiB
JavaScript

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