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

changeset 0
6474c204b198
equal deleted inserted replaced
-1:000000000000 0:c63e0dcf2207
1 /* This Source Code Form is subject to the terms of the Mozilla Public
2 * License, v. 2.0. If a copy of the MPL was not distributed with this
3 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
4 */
5
6 const {classes: Cc, interfaces: Ci, utils: Cu, results: Cr} = Components;
7
8 const URI_EXTENSION_BLOCKLIST_DIALOG = "chrome://mozapps/content/extensions/blocklist.xul";
9
10 Cu.import("resource://testing-common/httpd.js");
11 var testserver = new HttpServer();
12 testserver.start(-1);
13 gPort = testserver.identity.primaryPort;
14
15 // register static files with server and interpolate port numbers in them
16 mapFile("/data/test_bug393285.xml", testserver);
17
18 const profileDir = gProfD.clone();
19 profileDir.append("extensions");
20
21 let addonIDs = ["test_bug393285_1@tests.mozilla.org",
22 "test_bug393285_2@tests.mozilla.org",
23 "test_bug393285_3a@tests.mozilla.org",
24 "test_bug393285_3b@tests.mozilla.org",
25 "test_bug393285_4@tests.mozilla.org",
26 "test_bug393285_5@tests.mozilla.org",
27 "test_bug393285_6@tests.mozilla.org",
28 "test_bug393285_7@tests.mozilla.org",
29 "test_bug393285_8@tests.mozilla.org",
30 "test_bug393285_9@tests.mozilla.org",
31 "test_bug393285_10@tests.mozilla.org",
32 "test_bug393285_11@tests.mozilla.org",
33 "test_bug393285_12@tests.mozilla.org",
34 "test_bug393285_13@tests.mozilla.org",
35 "test_bug393285_14@tests.mozilla.org"];
36
37 // A window watcher to deal with the blocklist UI dialog.
38 var WindowWatcher = {
39 openWindow: function(parent, url, name, features, arguments) {
40 // Should be called to list the newly blocklisted items
41 do_check_eq(url, URI_EXTENSION_BLOCKLIST_DIALOG);
42
43 // Simulate auto-disabling any softblocks
44 var list = arguments.wrappedJSObject.list;
45 list.forEach(function(aItem) {
46 if (!aItem.blocked)
47 aItem.disable = true;
48 });
49
50 //run the code after the blocklist is closed
51 Services.obs.notifyObservers(null, "addon-blocklist-closed", null);
52
53 },
54
55 QueryInterface: function(iid) {
56 if (iid.equals(Ci.nsIWindowWatcher)
57 || iid.equals(Ci.nsISupports))
58 return this;
59
60 throw Cr.NS_ERROR_NO_INTERFACE;
61 }
62 };
63
64 var WindowWatcherFactory = {
65 createInstance: function createInstance(outer, iid) {
66 if (outer != null)
67 throw Cr.NS_ERROR_NO_AGGREGATION;
68 return WindowWatcher.QueryInterface(iid);
69 }
70 };
71
72 var registrar = Components.manager.QueryInterface(Ci.nsIComponentRegistrar);
73 registrar.registerFactory(Components.ID("{1dfeb90a-2193-45d5-9cb8-864928b2af55}"),
74 "Fake Window Watcher",
75 "@mozilla.org/embedcomp/window-watcher;1",
76 WindowWatcherFactory);
77
78
79 function load_blocklist(aFile, aCallback) {
80 Services.obs.addObserver(function() {
81 Services.obs.removeObserver(arguments.callee, "blocklist-updated");
82
83 do_execute_soon(aCallback);
84 }, "blocklist-updated", false);
85
86 Services.prefs.setCharPref("extensions.blocklist.url", "http://localhost:" +
87 gPort + "/data/" + aFile);
88 var blocklist = Cc["@mozilla.org/extensions/blocklist;1"].
89 getService(Ci.nsITimerCallback);
90 blocklist.notify(null);
91 }
92
93
94 function end_test() {
95 testserver.stop(do_test_finished);
96 }
97
98 function run_test() {
99 do_test_pending();
100
101 createAppInfo("xpcshell@tests.mozilla.org", "XPCShell", "1", "1.9");
102
103 writeInstallRDFForExtension({
104 id: "test_bug393285_1@tests.mozilla.org",
105 name: "extension 1",
106 version: "1.0",
107 targetApplications: [{
108 id: "xpcshell@tests.mozilla.org",
109 minVersion: "1",
110 maxVersion: "3"
111 }]
112 }, profileDir);
113
114
115 writeInstallRDFForExtension({
116 id: "test_bug393285_2@tests.mozilla.org",
117 name: "extension 2",
118 version: "1.0",
119 targetApplications: [{
120 id: "xpcshell@tests.mozilla.org",
121 minVersion: "1",
122 maxVersion: "3"
123 }]
124 }, profileDir);
125
126 writeInstallRDFForExtension({
127 id: "test_bug393285_3a@tests.mozilla.org",
128 name: "extension 3a",
129 version: "1.0",
130 targetApplications: [{
131 id: "xpcshell@tests.mozilla.org",
132 minVersion: "1",
133 maxVersion: "3"
134 }]
135 }, profileDir);
136
137 writeInstallRDFForExtension({
138 id: "test_bug393285_3b@tests.mozilla.org",
139 name: "extension 3b",
140 version: "2.0",
141 targetApplications: [{
142 id: "xpcshell@tests.mozilla.org",
143 minVersion: "1",
144 maxVersion: "3"
145 }]
146 }, profileDir);
147
148 writeInstallRDFForExtension({
149 id: "test_bug393285_4@tests.mozilla.org",
150 name: "extension 4",
151 version: "1.0",
152 targetApplications: [{
153 id: "xpcshell@tests.mozilla.org",
154 minVersion: "1",
155 maxVersion: "3"
156 }]
157 }, profileDir);
158
159 writeInstallRDFForExtension({
160 id: "test_bug393285_5@tests.mozilla.org",
161 name: "extension 5",
162 version: "1.0",
163 targetApplications: [{
164 id: "xpcshell@tests.mozilla.org",
165 minVersion: "1",
166 maxVersion: "3"
167 }]
168 }, profileDir);
169
170 writeInstallRDFForExtension({
171 id: "test_bug393285_6@tests.mozilla.org",
172 name: "extension 6",
173 version: "1.0",
174 targetApplications: [{
175 id: "xpcshell@tests.mozilla.org",
176 minVersion: "1",
177 maxVersion: "3"
178 }]
179 }, profileDir);
180
181 writeInstallRDFForExtension({
182 id: "test_bug393285_7@tests.mozilla.org",
183 name: "extension 7",
184 version: "1.0",
185 targetApplications: [{
186 id: "xpcshell@tests.mozilla.org",
187 minVersion: "1",
188 maxVersion: "3"
189 }]
190 }, profileDir);
191
192 writeInstallRDFForExtension({
193 id: "test_bug393285_8@tests.mozilla.org",
194 name: "extension 8",
195 version: "1.0",
196 targetApplications: [{
197 id: "xpcshell@tests.mozilla.org",
198 minVersion: "1",
199 maxVersion: "3"
200 }]
201 }, profileDir);
202
203 writeInstallRDFForExtension({
204 id: "test_bug393285_9@tests.mozilla.org",
205 name: "extension 9",
206 version: "1.0",
207 targetApplications: [{
208 id: "xpcshell@tests.mozilla.org",
209 minVersion: "1",
210 maxVersion: "3"
211 }]
212 }, profileDir);
213
214 writeInstallRDFForExtension({
215 id: "test_bug393285_10@tests.mozilla.org",
216 name: "extension 10",
217 version: "1.0",
218 targetApplications: [{
219 id: "xpcshell@tests.mozilla.org",
220 minVersion: "1",
221 maxVersion: "3"
222 }]
223 }, profileDir);
224
225 writeInstallRDFForExtension({
226 id: "test_bug393285_11@tests.mozilla.org",
227 name: "extension 11",
228 version: "1.0",
229 targetApplications: [{
230 id: "xpcshell@tests.mozilla.org",
231 minVersion: "1",
232 maxVersion: "3"
233 }]
234 }, profileDir);
235
236 writeInstallRDFForExtension({
237 id: "test_bug393285_12@tests.mozilla.org",
238 name: "extension 12",
239 version: "1.0",
240 targetApplications: [{
241 id: "xpcshell@tests.mozilla.org",
242 minVersion: "1",
243 maxVersion: "3"
244 }]
245 }, profileDir);
246
247 writeInstallRDFForExtension({
248 id: "test_bug393285_13@tests.mozilla.org",
249 name: "extension 13",
250 version: "1.0",
251 targetApplications: [{
252 id: "xpcshell@tests.mozilla.org",
253 minVersion: "1",
254 maxVersion: "3"
255 }]
256 }, profileDir);
257
258 writeInstallRDFForExtension({
259 id: "test_bug393285_14@tests.mozilla.org",
260 name: "extension 14",
261 version: "1.0",
262 targetApplications: [{
263 id: "xpcshell@tests.mozilla.org",
264 minVersion: "1",
265 maxVersion: "3"
266 }]
267 }, profileDir);
268
269 startupManager();
270
271 AddonManager.getAddonsByIDs(addonIDs, function(addons) {
272 for (addon of addons) {
273 do_check_eq(addon.blocklistState, Ci.nsIBlocklistService.STATE_NOT_BLOCKED);
274 }
275 run_test_1();
276 });
277 }
278
279 function run_test_1() {
280 load_blocklist("test_bug393285.xml", function() {
281 restartManager();
282
283 var blocklist = Cc["@mozilla.org/extensions/blocklist;1"]
284 .getService(Ci.nsIBlocklistService);
285
286 AddonManager.getAddonsByIDs(addonIDs,
287 function([a1, a2, a3, a4, a5, a6, a7, a8, a9, a10,
288 a11, a12, a13, a14, a15]) {
289 // No info in blocklist, shouldn't be blocked
290 do_check_false(blocklist.isAddonBlocklisted(a1, "1", "1.9"));
291
292 // Should always be blocked
293 do_check_true(blocklist.isAddonBlocklisted(a2, "1", "1.9"));
294
295 // Only version 1 should be blocked
296 do_check_true(blocklist.isAddonBlocklisted(a3, "1", "1.9"));
297 do_check_false(blocklist.isAddonBlocklisted(a4, "1", "1.9"));
298
299 // Should be blocked for app version 1
300 do_check_true(blocklist.isAddonBlocklisted(a5, "1", "1.9"));
301 do_check_false(blocklist.isAddonBlocklisted(a5, "2", "1.9"));
302
303 // Not blocklisted because we are a different OS
304 do_check_false(blocklist.isAddonBlocklisted(a6, "2", "1.9"));
305
306 // Blocklisted based on OS
307 do_check_true(blocklist.isAddonBlocklisted(a7, "2", "1.9"));
308 do_check_true(blocklist.isAddonBlocklisted(a8, "2", "1.9"));
309
310 // Not blocklisted because we are a different ABI
311 do_check_false(blocklist.isAddonBlocklisted(a9, "2", "1.9"));
312
313 // Blocklisted based on ABI
314 do_check_true(blocklist.isAddonBlocklisted(a10, "2", "1.9"));
315 do_check_true(blocklist.isAddonBlocklisted(a11, "2", "1.9"));
316
317 // Doesnt match both os and abi so not blocked
318 do_check_false(blocklist.isAddonBlocklisted(a12, "2", "1.9"));
319 do_check_false(blocklist.isAddonBlocklisted(a13, "2", "1.9"));
320 do_check_false(blocklist.isAddonBlocklisted(a14, "2", "1.9"));
321
322 // Matches both os and abi so blocked
323 do_check_true(blocklist.isAddonBlocklisted(a15, "2", "1.9"));
324 end_test();
325 });
326 });
327 }

mercurial