toolkit/mozapps/extensions/test/xpcshell/test_overrideblocklist.js

Thu, 22 Jan 2015 13:21:57 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Thu, 22 Jan 2015 13:21:57 +0100
branch
TOR_BUG_9701
changeset 15
b8a032363ba2
permissions
-rw-r--r--

Incorporate requested changes from Mozilla in review:
https://bugzilla.mozilla.org/show_bug.cgi?id=1123480#c6

michael@0 1 /* Any copyright is dedicated to the Public Domain.
michael@0 2 * http://creativecommons.org/publicdomain/zero/1.0/
michael@0 3 */
michael@0 4
michael@0 5 const KEY_PROFILEDIR = "ProfD";
michael@0 6 const KEY_APPDIR = "XCurProcD";
michael@0 7 const FILE_BLOCKLIST = "blocklist.xml";
michael@0 8
michael@0 9 const PREF_BLOCKLIST_ENABLED = "extensions.blocklist.enabled";
michael@0 10
michael@0 11 const OLD = do_get_file("data/test_overrideblocklist/old.xml");
michael@0 12 const NEW = do_get_file("data/test_overrideblocklist/new.xml");
michael@0 13 const ANCIENT = do_get_file("data/test_overrideblocklist/ancient.xml");
michael@0 14 const OLD_TSTAMP = 1296046918000;
michael@0 15 const NEW_TSTAMP = 1396046918000;
michael@0 16
michael@0 17 const gAppDir = FileUtils.getFile(KEY_APPDIR, []);
michael@0 18
michael@0 19 let oldAddon = {
michael@0 20 id: "old@tests.mozilla.org",
michael@0 21 version: 1
michael@0 22 }
michael@0 23 let newAddon = {
michael@0 24 id: "new@tests.mozilla.org",
michael@0 25 version: 1
michael@0 26 }
michael@0 27 let ancientAddon = {
michael@0 28 id: "ancient@tests.mozilla.org",
michael@0 29 version: 1
michael@0 30 }
michael@0 31 let invalidAddon = {
michael@0 32 id: "invalid@tests.mozilla.org",
michael@0 33 version: 1
michael@0 34 }
michael@0 35
michael@0 36 function incrementAppVersion() {
michael@0 37 gAppInfo.version = "" + (parseInt(gAppInfo.version) + 1);
michael@0 38 }
michael@0 39
michael@0 40 function clearBlocklists() {
michael@0 41 let blocklist = FileUtils.getFile(KEY_APPDIR, [FILE_BLOCKLIST]);
michael@0 42 if (blocklist.exists())
michael@0 43 blocklist.remove(true);
michael@0 44
michael@0 45 blocklist = FileUtils.getFile(KEY_PROFILEDIR, [FILE_BLOCKLIST]);
michael@0 46 if (blocklist.exists())
michael@0 47 blocklist.remove(true);
michael@0 48 }
michael@0 49
michael@0 50 function reloadBlocklist() {
michael@0 51 Services.prefs.setBoolPref(PREF_BLOCKLIST_ENABLED, false);
michael@0 52 Services.prefs.setBoolPref(PREF_BLOCKLIST_ENABLED, true);
michael@0 53 }
michael@0 54
michael@0 55 function copyToApp(file) {
michael@0 56 file.clone().copyTo(gAppDir, FILE_BLOCKLIST);
michael@0 57 }
michael@0 58
michael@0 59 function copyToProfile(file, tstamp) {
michael@0 60 file = file.clone();
michael@0 61 file.copyTo(gProfD, FILE_BLOCKLIST);
michael@0 62 file = gProfD.clone();
michael@0 63 file.append(FILE_BLOCKLIST);
michael@0 64 file.lastModifiedTime = tstamp;
michael@0 65 }
michael@0 66
michael@0 67 function run_test() {
michael@0 68 createAppInfo("xpcshell@tests.mozilla.org", "XPCShell", "1", "1");
michael@0 69
michael@0 70 let appBlocklist = FileUtils.getFile(KEY_APPDIR, [FILE_BLOCKLIST]);
michael@0 71 if (appBlocklist.exists()) {
michael@0 72 try {
michael@0 73 appBlocklist.moveTo(gAppDir, "blocklist.old");
michael@0 74 }
michael@0 75 catch (e) {
michael@0 76 todo(false, "Aborting test due to unmovable blocklist file: " + e);
michael@0 77 return;
michael@0 78 }
michael@0 79 do_register_cleanup(function() {
michael@0 80 clearBlocklists();
michael@0 81 appBlocklist.moveTo(gAppDir, FILE_BLOCKLIST);
michael@0 82 });
michael@0 83 }
michael@0 84
michael@0 85 run_next_test();
michael@0 86 }
michael@0 87
michael@0 88 // On first run whataver is in the app dir should get copied to the profile
michael@0 89 add_test(function test_copy() {
michael@0 90 clearBlocklists();
michael@0 91 copyToApp(OLD);
michael@0 92
michael@0 93 incrementAppVersion();
michael@0 94 startupManager();
michael@0 95
michael@0 96 reloadBlocklist();
michael@0 97 let blocklist = AM_Cc["@mozilla.org/extensions/blocklist;1"].
michael@0 98 getService(AM_Ci.nsIBlocklistService);
michael@0 99 do_check_false(blocklist.isAddonBlocklisted(invalidAddon));
michael@0 100 do_check_false(blocklist.isAddonBlocklisted(ancientAddon));
michael@0 101 do_check_true(blocklist.isAddonBlocklisted(oldAddon));
michael@0 102 do_check_false(blocklist.isAddonBlocklisted(newAddon));
michael@0 103
michael@0 104 shutdownManager();
michael@0 105
michael@0 106 run_next_test();
michael@0 107 });
michael@0 108
michael@0 109 // An ancient blocklist should be ignored
michael@0 110 add_test(function test_ancient() {
michael@0 111 clearBlocklists();
michael@0 112 copyToApp(ANCIENT);
michael@0 113 copyToProfile(OLD, OLD_TSTAMP);
michael@0 114
michael@0 115 incrementAppVersion();
michael@0 116 startupManager();
michael@0 117
michael@0 118 reloadBlocklist();
michael@0 119 let blocklist = AM_Cc["@mozilla.org/extensions/blocklist;1"].
michael@0 120 getService(AM_Ci.nsIBlocklistService);
michael@0 121 do_check_false(blocklist.isAddonBlocklisted(invalidAddon));
michael@0 122 do_check_false(blocklist.isAddonBlocklisted(ancientAddon));
michael@0 123 do_check_true(blocklist.isAddonBlocklisted(oldAddon));
michael@0 124 do_check_false(blocklist.isAddonBlocklisted(newAddon));
michael@0 125
michael@0 126 shutdownManager();
michael@0 127
michael@0 128 run_next_test();
michael@0 129 });
michael@0 130
michael@0 131 // A new blocklist should override an old blocklist
michael@0 132 add_test(function test_override() {
michael@0 133 clearBlocklists();
michael@0 134 copyToApp(NEW);
michael@0 135 copyToProfile(OLD, OLD_TSTAMP);
michael@0 136
michael@0 137 incrementAppVersion();
michael@0 138 startupManager();
michael@0 139
michael@0 140 reloadBlocklist();
michael@0 141 let blocklist = AM_Cc["@mozilla.org/extensions/blocklist;1"].
michael@0 142 getService(AM_Ci.nsIBlocklistService);
michael@0 143 do_check_false(blocklist.isAddonBlocklisted(invalidAddon));
michael@0 144 do_check_false(blocklist.isAddonBlocklisted(ancientAddon));
michael@0 145 do_check_false(blocklist.isAddonBlocklisted(oldAddon));
michael@0 146 do_check_true(blocklist.isAddonBlocklisted(newAddon));
michael@0 147
michael@0 148 shutdownManager();
michael@0 149
michael@0 150 run_next_test();
michael@0 151 });
michael@0 152
michael@0 153 // An old blocklist shouldn't override a new blocklist
michael@0 154 add_test(function test_retain() {
michael@0 155 clearBlocklists();
michael@0 156 copyToApp(OLD);
michael@0 157 copyToProfile(NEW, NEW_TSTAMP);
michael@0 158
michael@0 159 incrementAppVersion();
michael@0 160 startupManager();
michael@0 161
michael@0 162 reloadBlocklist();
michael@0 163 let blocklist = AM_Cc["@mozilla.org/extensions/blocklist;1"].
michael@0 164 getService(AM_Ci.nsIBlocklistService);
michael@0 165 do_check_false(blocklist.isAddonBlocklisted(invalidAddon));
michael@0 166 do_check_false(blocklist.isAddonBlocklisted(ancientAddon));
michael@0 167 do_check_false(blocklist.isAddonBlocklisted(oldAddon));
michael@0 168 do_check_true(blocklist.isAddonBlocklisted(newAddon));
michael@0 169
michael@0 170 shutdownManager();
michael@0 171
michael@0 172 run_next_test();
michael@0 173 });
michael@0 174
michael@0 175 // A missing blocklist in the profile should still load an app-shipped blocklist
michael@0 176 add_test(function test_missing() {
michael@0 177 clearBlocklists();
michael@0 178 copyToApp(OLD);
michael@0 179 copyToProfile(NEW, NEW_TSTAMP);
michael@0 180
michael@0 181 incrementAppVersion();
michael@0 182 startupManager();
michael@0 183 shutdownManager();
michael@0 184
michael@0 185 let blocklist = FileUtils.getFile(KEY_PROFILEDIR, [FILE_BLOCKLIST]);
michael@0 186 blocklist.remove(true);
michael@0 187 startupManager(false);
michael@0 188
michael@0 189 reloadBlocklist();
michael@0 190 let blocklist = AM_Cc["@mozilla.org/extensions/blocklist;1"].
michael@0 191 getService(AM_Ci.nsIBlocklistService);
michael@0 192 do_check_false(blocklist.isAddonBlocklisted(invalidAddon));
michael@0 193 do_check_false(blocklist.isAddonBlocklisted(ancientAddon));
michael@0 194 do_check_true(blocklist.isAddonBlocklisted(oldAddon));
michael@0 195 do_check_false(blocklist.isAddonBlocklisted(newAddon));
michael@0 196
michael@0 197 shutdownManager();
michael@0 198
michael@0 199 run_next_test();
michael@0 200 });

mercurial