Sat, 03 Jan 2015 20:18:00 +0100
Conditionally enable double key logic according to:
private browsing mode or privacy.thirdparty.isolate preference and
implement in GetCookieStringCommon and FindCookie where it counts...
With some reservations of how to convince FindCookie users to test
condition and pass a nullptr when disabling double key logic.
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 */
6 const URI_EXTENSION_UPDATE_DIALOG = "chrome://mozapps/content/extensions/update.xul";
7 const PREF_EM_SHOW_MISMATCH_UI = "extensions.showMismatchUI";
9 // The test extension uses an insecure update url.
10 Services.prefs.setBoolPref("extensions.checkUpdateSecurity", false);
12 const Cc = Components.classes;
13 const Ci = Components.interfaces;
14 const Cu = Components.utils;
15 const Cr = Components.results;
17 Cu.import("resource://testing-common/httpd.js");
18 var testserver;
20 const profileDir = gProfD.clone();
21 profileDir.append("extensions");
23 var gInstallUpdate = false;
24 var gCheckUpdates = false;
26 // This will be called to show the compatibility update dialog.
27 var WindowWatcher = {
28 expected: false,
29 arguments: null,
31 openWindow: function(parent, url, name, features, arguments) {
32 do_check_true(Services.startup.interrupted);
33 do_check_eq(url, URI_EXTENSION_UPDATE_DIALOG);
34 do_check_true(this.expected);
35 this.expected = false;
36 this.arguments = arguments.QueryInterface(AM_Ci.nsIVariant);
38 var updated = !gCheckUpdates;
39 if (gCheckUpdates) {
40 AddonManager.getAddonByID("bug542391_6@tests.mozilla.org", function(a6) {
41 a6.findUpdates({
42 onUpdateFinished: function() {
43 AddonManagerPrivate.removeStartupChange("disabled", "bug542391_6@tests.mozilla.org");
44 updated = true;
45 }
46 }, AddonManager.UPDATE_WHEN_NEW_APP_INSTALLED);
47 });
48 }
50 var installed = !gInstallUpdate;
51 if (gInstallUpdate) {
52 // Simulate installing an update while in the dialog
53 installAllFiles([do_get_addon("test_bug542391_3_2")], function() {
54 AddonManagerPrivate.removeStartupChange("disabled", "bug542391_3@tests.mozilla.org");
55 AddonManagerPrivate.addStartupChange("updated", "bug542391_3@tests.mozilla.org");
56 installed = true;
57 });
58 }
60 // The dialog is meant to be opened modally and the install operation can be
61 // asynchronous, so we must spin an event loop (like the modal window does)
62 // until the install is complete
63 let thr = AM_Cc["@mozilla.org/thread-manager;1"].
64 getService(AM_Ci.nsIThreadManager).
65 mainThread;
67 while (!installed || !updated)
68 thr.processNextEvent(false);
69 },
71 QueryInterface: function(iid) {
72 if (iid.equals(Ci.nsIWindowWatcher)
73 || iid.equals(Ci.nsISupports))
74 return this;
76 throw Cr.NS_ERROR_NO_INTERFACE;
77 }
78 }
80 var WindowWatcherFactory = {
81 createInstance: function createInstance(outer, iid) {
82 if (outer != null)
83 throw Components.results.NS_ERROR_NO_AGGREGATION;
84 return WindowWatcher.QueryInterface(iid);
85 }
86 };
88 var registrar = Components.manager.QueryInterface(Components.interfaces.nsIComponentRegistrar);
89 registrar.registerFactory(Components.ID("{1dfeb90a-2193-45d5-9cb8-864928b2af55}"),
90 "Fake Window Watcher",
91 "@mozilla.org/embedcomp/window-watcher;1", WindowWatcherFactory);
93 function check_state_v1([a1, a2, a3, a4, a5, a6]) {
94 do_check_neq(a1, null);
95 do_check_false(a1.appDisabled);
96 do_check_false(a1.userDisabled);
97 do_check_true(a1.isActive);
98 do_check_true(isExtensionInAddonsList(profileDir, a1.id));
100 do_check_neq(a2, null);
101 do_check_false(a2.appDisabled);
102 do_check_true(a2.userDisabled);
103 do_check_false(a2.isActive);
104 do_check_false(isExtensionInAddonsList(profileDir, a2.id));
106 do_check_neq(a3, null);
107 do_check_false(a3.appDisabled);
108 do_check_false(a3.userDisabled);
109 do_check_true(a3.isActive);
110 do_check_true(isExtensionInAddonsList(profileDir, a3.id));
111 do_check_eq(a3.version, "1.0");
113 do_check_neq(a4, null);
114 do_check_false(a4.appDisabled);
115 do_check_true(a4.userDisabled);
116 do_check_false(a4.isActive);
117 do_check_false(isExtensionInAddonsList(profileDir, a4.id));
119 do_check_neq(a5, null);
120 do_check_false(a5.appDisabled);
121 do_check_false(a5.userDisabled);
122 do_check_true(a5.isActive);
123 do_check_true(isExtensionInAddonsList(profileDir, a5.id));
125 do_check_neq(a6, null);
126 do_check_false(a6.appDisabled);
127 do_check_false(a6.userDisabled);
128 do_check_true(a6.isActive);
129 do_check_true(isExtensionInAddonsList(profileDir, a6.id));
130 }
132 function check_state_v1_2([a1, a2, a3, a4, a5, a6]) {
133 do_check_neq(a1, null);
134 do_check_false(a1.appDisabled);
135 do_check_false(a1.userDisabled);
136 do_check_true(a1.isActive);
137 do_check_true(isExtensionInAddonsList(profileDir, a1.id));
139 do_check_neq(a2, null);
140 do_check_false(a2.appDisabled);
141 do_check_true(a2.userDisabled);
142 do_check_false(a2.isActive);
143 do_check_false(isExtensionInAddonsList(profileDir, a2.id));
145 do_check_neq(a3, null);
146 do_check_true(a3.appDisabled);
147 do_check_false(a3.userDisabled);
148 do_check_false(a3.isActive);
149 do_check_false(isExtensionInAddonsList(profileDir, a3.id));
150 do_check_eq(a3.version, "2.0");
152 do_check_neq(a4, null);
153 do_check_false(a4.appDisabled);
154 do_check_true(a4.userDisabled);
155 do_check_false(a4.isActive);
156 do_check_false(isExtensionInAddonsList(profileDir, a4.id));
158 do_check_neq(a5, null);
159 do_check_false(a5.appDisabled);
160 do_check_false(a5.userDisabled);
161 do_check_true(a5.isActive);
162 do_check_true(isExtensionInAddonsList(profileDir, a5.id));
164 do_check_neq(a6, null);
165 do_check_false(a6.appDisabled);
166 do_check_false(a6.userDisabled);
167 do_check_true(a6.isActive);
168 do_check_true(isExtensionInAddonsList(profileDir, a6.id));
169 }
171 function check_state_v2([a1, a2, a3, a4, a5, a6]) {
172 do_check_neq(a1, null);
173 do_check_true(a1.appDisabled);
174 do_check_false(a1.userDisabled);
175 do_check_false(a1.isActive);
176 do_check_false(isExtensionInAddonsList(profileDir, a1.id));
178 do_check_neq(a2, null);
179 do_check_false(a2.appDisabled);
180 do_check_true(a2.userDisabled);
181 do_check_false(a2.isActive);
182 do_check_false(isExtensionInAddonsList(profileDir, a2.id));
184 do_check_neq(a3, null);
185 do_check_false(a3.appDisabled);
186 do_check_false(a3.userDisabled);
187 do_check_true(a3.isActive);
188 do_check_true(isExtensionInAddonsList(profileDir, a3.id));
189 do_check_eq(a3.version, "1.0");
191 do_check_neq(a4, null);
192 do_check_false(a4.appDisabled);
193 do_check_true(a4.userDisabled);
194 do_check_false(a4.isActive);
195 do_check_false(isExtensionInAddonsList(profileDir, a4.id));
197 do_check_neq(a5, null);
198 do_check_false(a5.appDisabled);
199 do_check_false(a5.userDisabled);
200 do_check_true(a5.isActive);
201 do_check_true(isExtensionInAddonsList(profileDir, a5.id));
203 do_check_neq(a6, null);
204 do_check_false(a6.appDisabled);
205 do_check_false(a6.userDisabled);
206 do_check_true(a6.isActive);
207 do_check_true(isExtensionInAddonsList(profileDir, a6.id));
208 }
210 function check_state_v3([a1, a2, a3, a4, a5, a6]) {
211 do_check_neq(a1, null);
212 do_check_true(a1.appDisabled);
213 do_check_false(a1.userDisabled);
214 do_check_false(a1.isActive);
215 do_check_false(isExtensionInAddonsList(profileDir, a1.id));
217 do_check_neq(a2, null);
218 do_check_true(a2.appDisabled);
219 do_check_true(a2.userDisabled);
220 do_check_false(a2.isActive);
221 do_check_false(isExtensionInAddonsList(profileDir, a2.id));
223 do_check_neq(a3, null);
224 do_check_true(a3.appDisabled);
225 do_check_false(a3.userDisabled);
226 do_check_false(a3.isActive);
227 do_check_false(isExtensionInAddonsList(profileDir, a3.id));
228 do_check_eq(a3.version, "1.0");
230 do_check_neq(a4, null);
231 do_check_false(a4.appDisabled);
232 do_check_true(a4.userDisabled);
233 do_check_false(a4.isActive);
234 do_check_false(isExtensionInAddonsList(profileDir, a4.id));
236 do_check_neq(a5, null);
237 do_check_false(a5.appDisabled);
238 do_check_false(a5.userDisabled);
239 do_check_true(a5.isActive);
240 do_check_true(isExtensionInAddonsList(profileDir, a5.id));
242 do_check_neq(a6, null);
243 do_check_false(a6.appDisabled);
244 do_check_false(a6.userDisabled);
245 do_check_true(a6.isActive);
246 do_check_true(isExtensionInAddonsList(profileDir, a6.id));
247 }
249 function check_state_v3_2([a1, a2, a3, a4, a5, a6]) {
250 do_check_neq(a1, null);
251 do_check_true(a1.appDisabled);
252 do_check_false(a1.userDisabled);
253 do_check_false(a1.isActive);
254 do_check_false(isExtensionInAddonsList(profileDir, a1.id));
256 do_check_neq(a2, null);
257 do_check_true(a2.appDisabled);
258 do_check_true(a2.userDisabled);
259 do_check_false(a2.isActive);
260 do_check_false(isExtensionInAddonsList(profileDir, a2.id));
262 do_check_neq(a3, null);
263 do_check_false(a3.appDisabled);
264 do_check_false(a3.userDisabled);
265 do_check_true(a3.isActive);
266 do_check_true(isExtensionInAddonsList(profileDir, a3.id));
267 do_check_eq(a3.version, "2.0");
269 do_check_neq(a4, null);
270 do_check_false(a4.appDisabled);
271 do_check_true(a4.userDisabled);
272 do_check_false(a4.isActive);
273 do_check_false(isExtensionInAddonsList(profileDir, a4.id));
275 do_check_neq(a5, null);
276 do_check_false(a5.appDisabled);
277 do_check_false(a5.userDisabled);
278 do_check_true(a5.isActive);
279 do_check_true(isExtensionInAddonsList(profileDir, a5.id));
281 do_check_neq(a6, null);
282 do_check_false(a6.appDisabled);
283 do_check_false(a6.userDisabled);
284 do_check_true(a6.isActive);
285 do_check_true(isExtensionInAddonsList(profileDir, a6.id));
286 }
288 // Install all the test add-ons, disable two of them and "upgrade" the app to
289 // version 2 which will appDisable one.
290 function run_test() {
291 do_test_pending();
292 createAppInfo("xpcshell@tests.mozilla.org", "XPCShell", "1", "1");
294 Services.prefs.setBoolPref(PREF_EM_SHOW_MISMATCH_UI, true);
296 // Add an extension to the profile to make sure the dialog doesn't show up
297 // on new profiles
298 var dest = writeInstallRDFForExtension({
299 id: "addon1@tests.mozilla.org",
300 version: "1.0",
301 targetApplications: [{
302 id: "xpcshell@tests.mozilla.org",
303 minVersion: "1",
304 maxVersion: "1"
305 }],
306 name: "Test Addon 1",
307 }, profileDir);
309 // Create and configure the HTTP server.
310 testserver = new HttpServer();
311 testserver.registerDirectory("/data/", do_get_file("data"));
312 testserver.registerDirectory("/addons/", do_get_file("addons"));
313 testserver.start(4444);
315 startupManager();
317 dest.remove(true);
319 installAllFiles([do_get_addon("test_bug542391_1"),
320 do_get_addon("test_bug542391_2"),
321 do_get_addon("test_bug542391_3_1"),
322 do_get_addon("test_bug542391_4"),
323 do_get_addon("test_bug542391_5"),
324 do_get_addon("test_bug542391_6")], function install_and_restart() {
326 restartManager();
327 check_startup_changes("installed", []);
328 check_startup_changes("updated", []);
329 check_startup_changes("uninstalled", ["addon1@tests.mozilla.org"]);
330 check_startup_changes("disabled", []);
331 check_startup_changes("enabled", []);
333 AddonManager.getAddonsByIDs(["bug542391_2@tests.mozilla.org",
334 "bug542391_4@tests.mozilla.org"],
335 callback_soon(function disable_and_restart([a2, a4]) {
336 do_check_true(a2 != null && a4 != null);
337 a2.userDisabled = true;
338 a4.userDisabled = true;
339 restartManager();
340 check_startup_changes("installed", []);
341 check_startup_changes("updated", []);
342 check_startup_changes("uninstalled", []);
343 check_startup_changes("disabled", []);
344 check_startup_changes("enabled", []);
346 AddonManager.getAddonsByIDs(["bug542391_1@tests.mozilla.org",
347 "bug542391_2@tests.mozilla.org",
348 "bug542391_3@tests.mozilla.org",
349 "bug542391_4@tests.mozilla.org",
350 "bug542391_5@tests.mozilla.org",
351 "bug542391_6@tests.mozilla.org"],
352 callback_soon(function(addons) {
353 check_state_v1(addons);
355 WindowWatcher.expected = true;
356 restartManager("2");
357 check_startup_changes("installed", []);
358 check_startup_changes("updated", []);
359 check_startup_changes("uninstalled", []);
360 check_startup_changes("disabled", ["bug542391_1@tests.mozilla.org"]);
361 check_startup_changes("enabled", []);
362 do_check_false(WindowWatcher.expected);
364 AddonManager.getAddonsByIDs(["bug542391_1@tests.mozilla.org",
365 "bug542391_2@tests.mozilla.org",
366 "bug542391_3@tests.mozilla.org",
367 "bug542391_4@tests.mozilla.org",
368 "bug542391_5@tests.mozilla.org",
369 "bug542391_6@tests.mozilla.org"],
370 function(addons) {
371 check_state_v2(addons);
373 do_execute_soon(run_test_1);
374 });
375 }));
376 }));
377 });
378 }
380 function end_test() {
381 testserver.stop(do_test_finished);
382 }
384 // Upgrade to version 3 which will appDisable two more add-ons. Check that the
385 // 3 already disabled add-ons were passed to the mismatch dialog.
386 function run_test_1() {
387 gCheckUpdates = true;
388 WindowWatcher.expected = true;
389 restartManager("3");
390 check_startup_changes("installed", []);
391 check_startup_changes("updated", []);
392 check_startup_changes("uninstalled", []);
393 check_startup_changes("disabled", ["bug542391_3@tests.mozilla.org"]);
394 check_startup_changes("enabled", []);
395 do_check_false(WindowWatcher.expected);
396 gCheckUpdates = false;
398 AddonManager.getAddonsByIDs(["bug542391_1@tests.mozilla.org",
399 "bug542391_2@tests.mozilla.org",
400 "bug542391_3@tests.mozilla.org",
401 "bug542391_4@tests.mozilla.org",
402 "bug542391_5@tests.mozilla.org",
403 "bug542391_6@tests.mozilla.org"],
404 function(addons) {
405 check_state_v3(addons);
407 do_check_eq(WindowWatcher.arguments.length, 3);
408 do_check_true(WindowWatcher.arguments.indexOf("bug542391_1@tests.mozilla.org") >= 0);
409 do_check_true(WindowWatcher.arguments.indexOf("bug542391_2@tests.mozilla.org") >= 0);
410 do_check_true(WindowWatcher.arguments.indexOf("bug542391_4@tests.mozilla.org") >= 0);
412 do_execute_soon(run_test_2);
413 });
414 }
416 // Downgrade to version 2 which will remove appDisable from two add-ons and
417 // should pass all 4 previously disabled add-ons.
418 function run_test_2() {
419 WindowWatcher.expected = true;
420 restartManager("2");
421 check_startup_changes("installed", []);
422 check_startup_changes("updated", []);
423 check_startup_changes("uninstalled", []);
424 check_startup_changes("disabled", []);
425 check_startup_changes("enabled", ["bug542391_3@tests.mozilla.org"]);
426 do_check_false(WindowWatcher.expected);
428 AddonManager.getAddonsByIDs(["bug542391_1@tests.mozilla.org",
429 "bug542391_2@tests.mozilla.org",
430 "bug542391_3@tests.mozilla.org",
431 "bug542391_4@tests.mozilla.org",
432 "bug542391_5@tests.mozilla.org",
433 "bug542391_6@tests.mozilla.org"],
434 function(addons) {
435 check_state_v2(addons);
437 do_check_eq(WindowWatcher.arguments.length, 4);
438 do_check_true(WindowWatcher.arguments.indexOf("bug542391_1@tests.mozilla.org") >= 0);
439 do_check_true(WindowWatcher.arguments.indexOf("bug542391_2@tests.mozilla.org") >= 0);
440 do_check_true(WindowWatcher.arguments.indexOf("bug542391_3@tests.mozilla.org") >= 0);
441 do_check_true(WindowWatcher.arguments.indexOf("bug542391_4@tests.mozilla.org") >= 0);
443 do_execute_soon(run_test_5);
444 });
445 }
447 // Upgrade to version 3 which will appDisable two more add-ons. Check that when
448 // the upgrade dialog updates an add-on no restart is necessary
449 function run_test_5() {
450 Services.prefs.setBoolPref(PREF_EM_SHOW_MISMATCH_UI, true);
451 gInstallUpdate = true;
453 WindowWatcher.expected = true;
454 restartManager("3");
455 check_startup_changes("installed", []);
456 check_startup_changes("updated", ["bug542391_3@tests.mozilla.org"]);
457 check_startup_changes("uninstalled", []);
458 check_startup_changes("disabled", []);
459 check_startup_changes("enabled", []);
460 do_check_false(WindowWatcher.expected);
461 gInstallUpdate = false;
463 AddonManager.getAddonsByIDs(["bug542391_1@tests.mozilla.org",
464 "bug542391_2@tests.mozilla.org",
465 "bug542391_3@tests.mozilla.org",
466 "bug542391_4@tests.mozilla.org",
467 "bug542391_5@tests.mozilla.org",
468 "bug542391_6@tests.mozilla.org"],
469 function(addons) {
470 check_state_v3_2(addons);
472 do_check_eq(WindowWatcher.arguments.length, 3);
473 do_check_true(WindowWatcher.arguments.indexOf("bug542391_1@tests.mozilla.org") >= 0);
474 do_check_true(WindowWatcher.arguments.indexOf("bug542391_2@tests.mozilla.org") >= 0);
475 do_check_true(WindowWatcher.arguments.indexOf("bug542391_4@tests.mozilla.org") >= 0);
477 do_execute_soon(run_test_6);
478 });
479 }
481 // Downgrade to version 1 which will appEnable all the add-ons
482 function run_test_6() {
483 WindowWatcher.expected = true;
484 restartManager("1");
485 check_startup_changes("installed", []);
486 check_startup_changes("updated", []);
487 check_startup_changes("uninstalled", []);
488 check_startup_changes("disabled", ["bug542391_3@tests.mozilla.org"]);
489 check_startup_changes("enabled", ["bug542391_1@tests.mozilla.org"]);
490 do_check_false(WindowWatcher.expected);
492 AddonManager.getAddonsByIDs(["bug542391_1@tests.mozilla.org",
493 "bug542391_2@tests.mozilla.org",
494 "bug542391_3@tests.mozilla.org",
495 "bug542391_4@tests.mozilla.org",
496 "bug542391_5@tests.mozilla.org",
497 "bug542391_6@tests.mozilla.org"],
498 function(addons) {
499 check_state_v1_2(addons);
501 end_test();
502 });
503 }