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 /* Any copyright is dedicated to the Public Domain.
2 * http://creativecommons.org/publicdomain/zero/1.0/
3 */
5 // Checks that we rebuild something sensible from a database with a bad schema
8 Components.utils.import("resource://testing-common/httpd.js");
9 var testserver = new HttpServer();
10 testserver.start(-1);
11 gPort = testserver.identity.primaryPort;
13 // register static files with server and interpolate port numbers in them
14 mapFile("/data/test_corrupt.rdf", testserver);
16 // The test extension uses an insecure update url.
17 Services.prefs.setBoolPref("extensions.checkUpdateSecurity", false);
19 // Will be enabled
20 var addon1 = {
21 id: "addon1@tests.mozilla.org",
22 version: "1.0",
23 name: "Test 1",
24 targetApplications: [{
25 id: "xpcshell@tests.mozilla.org",
26 minVersion: "2",
27 maxVersion: "2"
28 }]
29 };
31 // Will be disabled
32 var addon2 = {
33 id: "addon2@tests.mozilla.org",
34 version: "1.0",
35 name: "Test 2",
36 targetApplications: [{
37 id: "xpcshell@tests.mozilla.org",
38 minVersion: "2",
39 maxVersion: "2"
40 }]
41 };
43 // Will get a compatibility update and be enabled
44 var addon3 = {
45 id: "addon3@tests.mozilla.org",
46 version: "1.0",
47 name: "Test 3",
48 updateURL: "http://localhost:" + gPort + "/data/test_corrupt.rdf",
49 targetApplications: [{
50 id: "xpcshell@tests.mozilla.org",
51 minVersion: "1",
52 maxVersion: "1"
53 }]
54 };
56 // Will get a compatibility update and be disabled
57 var addon4 = {
58 id: "addon4@tests.mozilla.org",
59 version: "1.0",
60 name: "Test 4",
61 updateURL: "http://localhost:" + gPort + "/data/test_corrupt.rdf",
62 targetApplications: [{
63 id: "xpcshell@tests.mozilla.org",
64 minVersion: "1",
65 maxVersion: "1"
66 }]
67 };
69 // Stays incompatible
70 var addon5 = {
71 id: "addon5@tests.mozilla.org",
72 version: "1.0",
73 name: "Test 5",
74 targetApplications: [{
75 id: "xpcshell@tests.mozilla.org",
76 minVersion: "1",
77 maxVersion: "1"
78 }]
79 };
81 // Enabled bootstrapped
82 var addon6 = {
83 id: "addon6@tests.mozilla.org",
84 version: "1.0",
85 name: "Test 6",
86 bootstrap: "true",
87 targetApplications: [{
88 id: "xpcshell@tests.mozilla.org",
89 minVersion: "2",
90 maxVersion: "2"
91 }]
92 };
94 // Disabled bootstrapped
95 var addon7 = {
96 id: "addon7@tests.mozilla.org",
97 version: "1.0",
98 name: "Test 7",
99 bootstrap: "true",
100 targetApplications: [{
101 id: "xpcshell@tests.mozilla.org",
102 minVersion: "2",
103 maxVersion: "2"
104 }]
105 };
107 // The default theme
108 var theme1 = {
109 id: "theme1@tests.mozilla.org",
110 version: "1.0",
111 name: "Theme 1",
112 internalName: "classic/1.0",
113 targetApplications: [{
114 id: "xpcshell@tests.mozilla.org",
115 minVersion: "2",
116 maxVersion: "2"
117 }]
118 };
120 // The selected theme
121 var theme2 = {
122 id: "theme2@tests.mozilla.org",
123 version: "1.0",
124 name: "Theme 2",
125 internalName: "test/1.0",
126 targetApplications: [{
127 id: "xpcshell@tests.mozilla.org",
128 minVersion: "2",
129 maxVersion: "2"
130 }]
131 };
133 const profileDir = gProfD.clone();
134 profileDir.append("extensions");
136 function run_test() {
137 do_test_pending();
138 createAppInfo("xpcshell@tests.mozilla.org", "XPCShell", "2", "2");
140 writeInstallRDFForExtension(addon1, profileDir);
141 writeInstallRDFForExtension(addon2, profileDir);
142 writeInstallRDFForExtension(addon3, profileDir);
143 writeInstallRDFForExtension(addon4, profileDir);
144 writeInstallRDFForExtension(addon5, profileDir);
145 writeInstallRDFForExtension(addon6, profileDir);
146 writeInstallRDFForExtension(addon7, profileDir);
147 writeInstallRDFForExtension(theme1, profileDir);
148 writeInstallRDFForExtension(theme2, profileDir);
150 // Create and configure the HTTP server.
151 testserver.registerDirectory("/addons/", do_get_file("addons"));
153 // Startup the profile and setup the initial state
154 startupManager();
156 AddonManager.getAddonsByIDs(["addon2@tests.mozilla.org",
157 "addon3@tests.mozilla.org",
158 "addon4@tests.mozilla.org",
159 "addon7@tests.mozilla.org",
160 "theme2@tests.mozilla.org"], function([a2, a3, a4,
161 a7, t2]) {
162 // Set up the initial state
163 a2.userDisabled = true;
164 a4.userDisabled = true;
165 a7.userDisabled = true;
166 t2.userDisabled = false;
167 a3.findUpdates({
168 onUpdateFinished: function() {
169 a4.findUpdates({
170 onUpdateFinished: function() {
171 do_execute_soon(run_test_1);
172 }
173 }, AddonManager.UPDATE_WHEN_PERIODIC_UPDATE);
174 }
175 }, AddonManager.UPDATE_WHEN_PERIODIC_UPDATE);
176 });
177 }
179 function end_test() {
180 testserver.stop(do_test_finished);
181 }
183 function run_test_1() {
184 restartManager();
186 AddonManager.getAddonsByIDs(["addon1@tests.mozilla.org",
187 "addon2@tests.mozilla.org",
188 "addon3@tests.mozilla.org",
189 "addon4@tests.mozilla.org",
190 "addon5@tests.mozilla.org",
191 "addon6@tests.mozilla.org",
192 "addon7@tests.mozilla.org",
193 "theme1@tests.mozilla.org",
194 "theme2@tests.mozilla.org"], function([a1, a2, a3,
195 a4, a5, a6,
196 a7, t1, t2]) {
197 do_check_neq(a1, null);
198 do_check_true(a1.isActive);
199 do_check_false(a1.userDisabled);
200 do_check_false(a1.appDisabled);
201 do_check_eq(a1.pendingOperations, AddonManager.PENDING_NONE);
203 do_check_neq(a2, null);
204 do_check_false(a2.isActive);
205 do_check_true(a2.userDisabled);
206 do_check_false(a2.appDisabled);
207 do_check_eq(a2.pendingOperations, AddonManager.PENDING_NONE);
209 do_check_neq(a3, null);
210 do_check_true(a3.isActive);
211 do_check_false(a3.userDisabled);
212 do_check_false(a3.appDisabled);
213 do_check_eq(a3.pendingOperations, AddonManager.PENDING_NONE);
215 do_check_neq(a4, null);
216 do_check_false(a4.isActive);
217 do_check_true(a4.userDisabled);
218 do_check_false(a4.appDisabled);
219 do_check_eq(a4.pendingOperations, AddonManager.PENDING_NONE);
221 do_check_neq(a5, null);
222 do_check_false(a5.isActive);
223 do_check_false(a5.userDisabled);
224 do_check_true(a5.appDisabled);
225 do_check_eq(a5.pendingOperations, AddonManager.PENDING_NONE);
227 do_check_neq(a6, null);
228 do_check_true(a6.isActive);
229 do_check_false(a6.userDisabled);
230 do_check_false(a6.appDisabled);
231 do_check_eq(a6.pendingOperations, AddonManager.PENDING_NONE);
233 do_check_neq(a7, null);
234 do_check_false(a7.isActive);
235 do_check_true(a7.userDisabled);
236 do_check_false(a7.appDisabled);
237 do_check_eq(a7.pendingOperations, AddonManager.PENDING_NONE);
239 do_check_neq(t1, null);
240 do_check_false(t1.isActive);
241 do_check_true(t1.userDisabled);
242 do_check_false(t1.appDisabled);
243 do_check_eq(t1.pendingOperations, AddonManager.PENDING_NONE);
245 do_check_neq(t2, null);
246 do_check_true(t2.isActive);
247 do_check_false(t2.userDisabled);
248 do_check_false(t2.appDisabled);
249 do_check_eq(t2.pendingOperations, AddonManager.PENDING_NONE);
251 do_execute_soon(run_test_1_modified_db);
252 });
253 }
256 function run_test_1_modified_db() {
257 // After restarting the database won't be open so we can alter
258 // the schema
259 shutdownManager();
260 changeXPIDBVersion(100);
261 startupManager();
263 // Accessing the add-ons should open and recover the database. Since
264 // migration occurs everything should be recovered correctly
265 AddonManager.getAddonsByIDs(["addon1@tests.mozilla.org",
266 "addon2@tests.mozilla.org",
267 "addon3@tests.mozilla.org",
268 "addon4@tests.mozilla.org",
269 "addon5@tests.mozilla.org",
270 "addon6@tests.mozilla.org",
271 "addon7@tests.mozilla.org",
272 "theme1@tests.mozilla.org",
273 "theme2@tests.mozilla.org"], function([a1, a2, a3,
274 a4, a5, a6,
275 a7, t1, t2]) {
276 do_check_neq(a1, null);
277 do_check_true(a1.isActive);
278 do_check_false(a1.userDisabled);
279 do_check_false(a1.appDisabled);
280 do_check_eq(a1.pendingOperations, AddonManager.PENDING_NONE);
282 do_check_neq(a2, null);
283 do_check_false(a2.isActive);
284 do_check_true(a2.userDisabled);
285 do_check_false(a2.appDisabled);
286 do_check_eq(a2.pendingOperations, AddonManager.PENDING_NONE);
288 do_check_neq(a3, null);
289 do_check_true(a3.isActive);
290 do_check_false(a3.userDisabled);
291 do_check_false(a3.appDisabled);
292 do_check_eq(a3.pendingOperations, AddonManager.PENDING_NONE);
294 do_check_neq(a4, null);
295 do_check_false(a4.isActive);
296 do_check_true(a4.userDisabled);
297 do_check_false(a4.appDisabled);
298 do_check_eq(a4.pendingOperations, AddonManager.PENDING_NONE);
300 do_check_neq(a5, null);
301 do_check_false(a5.isActive);
302 do_check_false(a5.userDisabled);
303 do_check_true(a5.appDisabled);
304 do_check_eq(a5.pendingOperations, AddonManager.PENDING_NONE);
306 do_check_neq(a6, null);
307 do_check_true(a6.isActive);
308 do_check_false(a6.userDisabled);
309 do_check_false(a6.appDisabled);
310 do_check_eq(a6.pendingOperations, AddonManager.PENDING_NONE);
312 do_check_neq(a7, null);
313 do_check_false(a7.isActive);
314 do_check_true(a7.userDisabled);
315 do_check_false(a7.appDisabled);
316 do_check_eq(a7.pendingOperations, AddonManager.PENDING_NONE);
318 do_check_neq(t1, null);
319 do_check_false(t1.isActive);
320 do_check_true(t1.userDisabled);
321 do_check_false(t1.appDisabled);
322 do_check_eq(t1.pendingOperations, AddonManager.PENDING_NONE);
324 do_check_neq(t2, null);
325 do_check_true(t2.isActive);
326 do_check_false(t2.userDisabled);
327 do_check_false(t2.appDisabled);
328 do_check_eq(t2.pendingOperations, AddonManager.PENDING_NONE);
330 do_execute_soon(run_test_1_after_rebuild);
331 });
332 }
334 function run_test_1_after_rebuild() {
335 restartManager();
337 AddonManager.getAddonsByIDs(["addon1@tests.mozilla.org",
338 "addon2@tests.mozilla.org",
339 "addon3@tests.mozilla.org",
340 "addon4@tests.mozilla.org",
341 "addon5@tests.mozilla.org",
342 "addon6@tests.mozilla.org",
343 "addon7@tests.mozilla.org",
344 "theme1@tests.mozilla.org",
345 "theme2@tests.mozilla.org"], function([a1, a2, a3,
346 a4, a5, a6,
347 a7, t1, t2]) {
348 do_check_neq(a1, null);
349 do_check_true(a1.isActive);
350 do_check_false(a1.userDisabled);
351 do_check_false(a1.appDisabled);
352 do_check_eq(a1.pendingOperations, AddonManager.PENDING_NONE);
354 do_check_neq(a2, null);
355 do_check_false(a2.isActive);
356 do_check_true(a2.userDisabled);
357 do_check_false(a2.appDisabled);
358 do_check_eq(a2.pendingOperations, AddonManager.PENDING_NONE);
360 do_check_neq(a3, null);
361 do_check_true(a3.isActive);
362 do_check_false(a3.userDisabled);
363 do_check_false(a3.appDisabled);
364 do_check_eq(a3.pendingOperations, AddonManager.PENDING_NONE);
366 do_check_neq(a4, null);
367 do_check_false(a4.isActive);
368 do_check_true(a4.userDisabled);
369 do_check_false(a4.appDisabled);
370 do_check_eq(a4.pendingOperations, AddonManager.PENDING_NONE);
372 do_check_neq(a5, null);
373 do_check_false(a5.isActive);
374 do_check_false(a5.userDisabled);
375 do_check_true(a5.appDisabled);
376 do_check_eq(a5.pendingOperations, AddonManager.PENDING_NONE);
378 do_check_neq(a6, null);
379 do_check_true(a6.isActive);
380 do_check_false(a6.userDisabled);
381 do_check_false(a6.appDisabled);
382 do_check_eq(a6.pendingOperations, AddonManager.PENDING_NONE);
384 do_check_neq(a7, null);
385 do_check_false(a7.isActive);
386 do_check_true(a7.userDisabled);
387 do_check_false(a7.appDisabled);
388 do_check_eq(a7.pendingOperations, AddonManager.PENDING_NONE);
390 do_check_neq(t1, null);
391 do_check_false(t1.isActive);
392 do_check_true(t1.userDisabled);
393 do_check_false(t1.appDisabled);
394 do_check_eq(t1.pendingOperations, AddonManager.PENDING_NONE);
396 do_check_neq(t2, null);
397 do_check_true(t2.isActive);
398 do_check_false(t2.userDisabled);
399 do_check_false(t2.appDisabled);
400 do_check_eq(t2.pendingOperations, AddonManager.PENDING_NONE);
402 end_test();
403 });
404 }