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

Wed, 31 Dec 2014 06:09:35 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Wed, 31 Dec 2014 06:09:35 +0100
changeset 0
6474c204b198
permissions
-rw-r--r--

Cloned upstream origin tor-browser at tor-browser-31.3.0esr-4.5-1-build1
revision ID fc1c9ff7c1b2defdbc039f12214767608f46423f for hacking purpose.

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 // Checks that we rebuild something sensible from a corrupt database
michael@0 6
michael@0 7 Components.utils.import("resource://testing-common/httpd.js");
michael@0 8 Components.utils.import("resource://gre/modules/osfile.jsm");
michael@0 9
michael@0 10 var testserver = new HttpServer();
michael@0 11 testserver.start(-1);
michael@0 12 gPort = testserver.identity.primaryPort;
michael@0 13 mapFile("/data/test_corrupt.rdf", testserver);
michael@0 14 testserver.registerDirectory("/addons/", do_get_file("addons"));
michael@0 15
michael@0 16 // The test extension uses an insecure update url.
michael@0 17 Services.prefs.setBoolPref(PREF_EM_CHECK_UPDATE_SECURITY, false);
michael@0 18 Services.prefs.setBoolPref(PREF_EM_STRICT_COMPATIBILITY, true);
michael@0 19
michael@0 20 // Will be enabled
michael@0 21 var addon1 = {
michael@0 22 id: "addon1@tests.mozilla.org",
michael@0 23 version: "1.0",
michael@0 24 name: "Test 1",
michael@0 25 targetApplications: [{
michael@0 26 id: "xpcshell@tests.mozilla.org",
michael@0 27 minVersion: "2",
michael@0 28 maxVersion: "2"
michael@0 29 }]
michael@0 30 };
michael@0 31
michael@0 32 // Will be disabled
michael@0 33 var addon2 = {
michael@0 34 id: "addon2@tests.mozilla.org",
michael@0 35 version: "1.0",
michael@0 36 name: "Test 2",
michael@0 37 targetApplications: [{
michael@0 38 id: "xpcshell@tests.mozilla.org",
michael@0 39 minVersion: "2",
michael@0 40 maxVersion: "2"
michael@0 41 }]
michael@0 42 };
michael@0 43
michael@0 44 // Will get a compatibility update and be enabled
michael@0 45 var addon3 = {
michael@0 46 id: "addon3@tests.mozilla.org",
michael@0 47 version: "1.0",
michael@0 48 name: "Test 3",
michael@0 49 updateURL: "http://localhost:" + gPort + "/data/test_corrupt.rdf",
michael@0 50 targetApplications: [{
michael@0 51 id: "xpcshell@tests.mozilla.org",
michael@0 52 minVersion: "1",
michael@0 53 maxVersion: "1"
michael@0 54 }]
michael@0 55 };
michael@0 56
michael@0 57 // Will get a compatibility update and be disabled
michael@0 58 var addon4 = {
michael@0 59 id: "addon4@tests.mozilla.org",
michael@0 60 version: "1.0",
michael@0 61 name: "Test 4",
michael@0 62 updateURL: "http://localhost:" + gPort + "/data/test_corrupt.rdf",
michael@0 63 targetApplications: [{
michael@0 64 id: "xpcshell@tests.mozilla.org",
michael@0 65 minVersion: "1",
michael@0 66 maxVersion: "1"
michael@0 67 }]
michael@0 68 };
michael@0 69
michael@0 70 // Stays incompatible
michael@0 71 var addon5 = {
michael@0 72 id: "addon5@tests.mozilla.org",
michael@0 73 version: "1.0",
michael@0 74 name: "Test 5",
michael@0 75 targetApplications: [{
michael@0 76 id: "xpcshell@tests.mozilla.org",
michael@0 77 minVersion: "1",
michael@0 78 maxVersion: "1"
michael@0 79 }]
michael@0 80 };
michael@0 81
michael@0 82 // Enabled bootstrapped
michael@0 83 var addon6 = {
michael@0 84 id: "addon6@tests.mozilla.org",
michael@0 85 version: "1.0",
michael@0 86 name: "Test 6",
michael@0 87 bootstrap: "true",
michael@0 88 targetApplications: [{
michael@0 89 id: "xpcshell@tests.mozilla.org",
michael@0 90 minVersion: "2",
michael@0 91 maxVersion: "2"
michael@0 92 }]
michael@0 93 };
michael@0 94
michael@0 95 // Disabled bootstrapped
michael@0 96 var addon7 = {
michael@0 97 id: "addon7@tests.mozilla.org",
michael@0 98 version: "1.0",
michael@0 99 name: "Test 7",
michael@0 100 bootstrap: "true",
michael@0 101 targetApplications: [{
michael@0 102 id: "xpcshell@tests.mozilla.org",
michael@0 103 minVersion: "2",
michael@0 104 maxVersion: "2"
michael@0 105 }]
michael@0 106 };
michael@0 107
michael@0 108 // The default theme
michael@0 109 var theme1 = {
michael@0 110 id: "theme1@tests.mozilla.org",
michael@0 111 version: "1.0",
michael@0 112 name: "Theme 1",
michael@0 113 internalName: "classic/1.0",
michael@0 114 targetApplications: [{
michael@0 115 id: "xpcshell@tests.mozilla.org",
michael@0 116 minVersion: "2",
michael@0 117 maxVersion: "2"
michael@0 118 }]
michael@0 119 };
michael@0 120
michael@0 121 // The selected theme
michael@0 122 var theme2 = {
michael@0 123 id: "theme2@tests.mozilla.org",
michael@0 124 version: "1.0",
michael@0 125 name: "Theme 2",
michael@0 126 internalName: "test/1.0",
michael@0 127 targetApplications: [{
michael@0 128 id: "xpcshell@tests.mozilla.org",
michael@0 129 minVersion: "2",
michael@0 130 maxVersion: "2"
michael@0 131 }]
michael@0 132 };
michael@0 133
michael@0 134 const profileDir = gProfD.clone();
michael@0 135 profileDir.append("extensions");
michael@0 136
michael@0 137 add_task(function* init() {
michael@0 138 createAppInfo("xpcshell@tests.mozilla.org", "XPCShell", "2", "2");
michael@0 139
michael@0 140 writeInstallRDFForExtension(addon1, profileDir);
michael@0 141 writeInstallRDFForExtension(addon2, profileDir);
michael@0 142 writeInstallRDFForExtension(addon3, profileDir);
michael@0 143 writeInstallRDFForExtension(addon4, profileDir);
michael@0 144 writeInstallRDFForExtension(addon5, profileDir);
michael@0 145 writeInstallRDFForExtension(addon6, profileDir);
michael@0 146 writeInstallRDFForExtension(addon7, profileDir);
michael@0 147 writeInstallRDFForExtension(theme1, profileDir);
michael@0 148 writeInstallRDFForExtension(theme2, profileDir);
michael@0 149
michael@0 150 // Startup the profile and setup the initial state
michael@0 151 startupManager();
michael@0 152
michael@0 153 // New profile so new add-ons are ignored
michael@0 154 check_startup_changes(AddonManager.STARTUP_CHANGE_INSTALLED, []);
michael@0 155
michael@0 156 let a1, a2, a3, a4, a5, a6, a7, t1, t2;
michael@0 157
michael@0 158 [a2, a3, a4, a7, t2] =
michael@0 159 yield promiseAddonsByIDs(["addon2@tests.mozilla.org",
michael@0 160 "addon3@tests.mozilla.org",
michael@0 161 "addon4@tests.mozilla.org",
michael@0 162 "addon7@tests.mozilla.org",
michael@0 163 "theme2@tests.mozilla.org"]);
michael@0 164
michael@0 165 // Set up the initial state
michael@0 166 let deferredUpdateFinished = Promise.defer();
michael@0 167
michael@0 168 a2.userDisabled = true;
michael@0 169 a4.userDisabled = true;
michael@0 170 a7.userDisabled = true;
michael@0 171 t2.userDisabled = false;
michael@0 172 a3.findUpdates({
michael@0 173 onUpdateFinished: function() {
michael@0 174 a4.findUpdates({
michael@0 175 onUpdateFinished: function() {
michael@0 176 deferredUpdateFinished.resolve();
michael@0 177 }
michael@0 178 }, AddonManager.UPDATE_WHEN_PERIODIC_UPDATE);
michael@0 179 }
michael@0 180 }, AddonManager.UPDATE_WHEN_PERIODIC_UPDATE);
michael@0 181 yield deferredUpdateFinished.promise;
michael@0 182 });
michael@0 183
michael@0 184 add_task(function* run_test_1() {
michael@0 185 let a1, a2, a3, a4, a5, a6, a7, t1, t2;
michael@0 186
michael@0 187 restartManager();
michael@0 188 [a1, a2, a3, a4, a5, a6, a7, t1, t2] =
michael@0 189 yield promiseAddonsByIDs(["addon1@tests.mozilla.org",
michael@0 190 "addon2@tests.mozilla.org",
michael@0 191 "addon3@tests.mozilla.org",
michael@0 192 "addon4@tests.mozilla.org",
michael@0 193 "addon5@tests.mozilla.org",
michael@0 194 "addon6@tests.mozilla.org",
michael@0 195 "addon7@tests.mozilla.org",
michael@0 196 "theme1@tests.mozilla.org",
michael@0 197 "theme2@tests.mozilla.org"]);
michael@0 198
michael@0 199 do_check_neq(a1, null);
michael@0 200 do_check_true(a1.isActive);
michael@0 201 do_check_false(a1.userDisabled);
michael@0 202 do_check_false(a1.appDisabled);
michael@0 203 do_check_eq(a1.pendingOperations, AddonManager.PENDING_NONE);
michael@0 204 do_check_true(isExtensionInAddonsList(profileDir, a1.id));
michael@0 205
michael@0 206 do_check_neq(a2, null);
michael@0 207 do_check_false(a2.isActive);
michael@0 208 do_check_true(a2.userDisabled);
michael@0 209 do_check_false(a2.appDisabled);
michael@0 210 do_check_eq(a2.pendingOperations, AddonManager.PENDING_NONE);
michael@0 211 do_check_false(isExtensionInAddonsList(profileDir, a2.id));
michael@0 212
michael@0 213 do_check_neq(a3, null);
michael@0 214 do_check_true(a3.isActive);
michael@0 215 do_check_false(a3.userDisabled);
michael@0 216 do_check_false(a3.appDisabled);
michael@0 217 do_check_eq(a3.pendingOperations, AddonManager.PENDING_NONE);
michael@0 218 do_check_true(isExtensionInAddonsList(profileDir, a3.id));
michael@0 219
michael@0 220 do_check_neq(a4, null);
michael@0 221 do_check_false(a4.isActive);
michael@0 222 do_check_true(a4.userDisabled);
michael@0 223 do_check_false(a4.appDisabled);
michael@0 224 do_check_eq(a4.pendingOperations, AddonManager.PENDING_NONE);
michael@0 225 do_check_false(isExtensionInAddonsList(profileDir, a4.id));
michael@0 226
michael@0 227 do_check_neq(a5, null);
michael@0 228 do_check_false(a5.isActive);
michael@0 229 do_check_false(a5.userDisabled);
michael@0 230 do_check_true(a5.appDisabled);
michael@0 231 do_check_eq(a5.pendingOperations, AddonManager.PENDING_NONE);
michael@0 232 do_check_false(isExtensionInAddonsList(profileDir, a5.id));
michael@0 233
michael@0 234 do_check_neq(a6, null);
michael@0 235 do_check_true(a6.isActive);
michael@0 236 do_check_false(a6.userDisabled);
michael@0 237 do_check_false(a6.appDisabled);
michael@0 238 do_check_eq(a6.pendingOperations, AddonManager.PENDING_NONE);
michael@0 239
michael@0 240 do_check_neq(a7, null);
michael@0 241 do_check_false(a7.isActive);
michael@0 242 do_check_true(a7.userDisabled);
michael@0 243 do_check_false(a7.appDisabled);
michael@0 244 do_check_eq(a7.pendingOperations, AddonManager.PENDING_NONE);
michael@0 245
michael@0 246 do_check_neq(t1, null);
michael@0 247 do_check_false(t1.isActive);
michael@0 248 do_check_true(t1.userDisabled);
michael@0 249 do_check_false(t1.appDisabled);
michael@0 250 do_check_eq(t1.pendingOperations, AddonManager.PENDING_NONE);
michael@0 251 do_check_false(isThemeInAddonsList(profileDir, t1.id));
michael@0 252
michael@0 253 do_check_neq(t2, null);
michael@0 254 do_check_true(t2.isActive);
michael@0 255 do_check_false(t2.userDisabled);
michael@0 256 do_check_false(t2.appDisabled);
michael@0 257 do_check_eq(t2.pendingOperations, AddonManager.PENDING_NONE);
michael@0 258 do_check_true(isThemeInAddonsList(profileDir, t2.id));
michael@0 259
michael@0 260 // Open another handle on the JSON DB with as much Unix and Windows locking
michael@0 261 // as we can to simulate some other process interfering with it
michael@0 262 shutdownManager();
michael@0 263 do_print("Locking " + gExtensionsJSON.path);
michael@0 264 let options = {
michael@0 265 winShare: 0
michael@0 266 };
michael@0 267 if (OS.Constants.libc.O_EXLOCK)
michael@0 268 options.unixFlags = OS.Constants.libc.O_EXLOCK;
michael@0 269
michael@0 270 let file = yield OS.File.open(gExtensionsJSON.path, {read:true, write:true, existing:true}, options);
michael@0 271
michael@0 272 let filePermissions = gExtensionsJSON.permissions;
michael@0 273 if (!OS.Constants.Win) {
michael@0 274 gExtensionsJSON.permissions = 0;
michael@0 275 }
michael@0 276 startupManager(false);
michael@0 277
michael@0 278 // Shouldn't have seen any startup changes
michael@0 279 check_startup_changes(AddonManager.STARTUP_CHANGE_INSTALLED, []);
michael@0 280
michael@0 281 // Accessing the add-ons should open and recover the database
michael@0 282 [a1, a2, a3, a4, a5, a6, a7, t1, t2] =
michael@0 283 yield promiseAddonsByIDs(["addon1@tests.mozilla.org",
michael@0 284 "addon2@tests.mozilla.org",
michael@0 285 "addon3@tests.mozilla.org",
michael@0 286 "addon4@tests.mozilla.org",
michael@0 287 "addon5@tests.mozilla.org",
michael@0 288 "addon6@tests.mozilla.org",
michael@0 289 "addon7@tests.mozilla.org",
michael@0 290 "theme1@tests.mozilla.org",
michael@0 291 "theme2@tests.mozilla.org"]);
michael@0 292
michael@0 293 // Should be correctly recovered
michael@0 294 do_check_neq(a1, null);
michael@0 295 do_check_true(a1.isActive);
michael@0 296 do_check_false(a1.userDisabled);
michael@0 297 do_check_false(a1.appDisabled);
michael@0 298 do_check_eq(a1.pendingOperations, AddonManager.PENDING_NONE);
michael@0 299 do_check_true(isExtensionInAddonsList(profileDir, a1.id));
michael@0 300
michael@0 301 // Should be correctly recovered
michael@0 302 do_check_neq(a2, null);
michael@0 303 do_check_false(a2.isActive);
michael@0 304 do_check_true(a2.userDisabled);
michael@0 305 do_check_false(a2.appDisabled);
michael@0 306 do_check_eq(a2.pendingOperations, AddonManager.PENDING_NONE);
michael@0 307 do_check_false(isExtensionInAddonsList(profileDir, a2.id));
michael@0 308
michael@0 309 // The compatibility update won't be recovered but it should still be
michael@0 310 // active for this session
michael@0 311 do_check_neq(a3, null);
michael@0 312 do_check_true(a3.isActive);
michael@0 313 do_check_false(a3.userDisabled);
michael@0 314 do_check_true(a3.appDisabled);
michael@0 315 do_check_eq(a3.pendingOperations, AddonManager.PENDING_DISABLE);
michael@0 316 do_check_true(isExtensionInAddonsList(profileDir, a3.id));
michael@0 317
michael@0 318 // The compatibility update won't be recovered and it will not have been
michael@0 319 // able to tell that it was previously userDisabled
michael@0 320 do_check_neq(a4, null);
michael@0 321 do_check_false(a4.isActive);
michael@0 322 do_check_false(a4.userDisabled);
michael@0 323 do_check_true(a4.appDisabled);
michael@0 324 do_check_eq(a4.pendingOperations, AddonManager.PENDING_NONE);
michael@0 325 do_check_false(isExtensionInAddonsList(profileDir, a4.id));
michael@0 326
michael@0 327 do_check_neq(a5, null);
michael@0 328 do_check_false(a5.isActive);
michael@0 329 do_check_false(a5.userDisabled);
michael@0 330 do_check_true(a5.appDisabled);
michael@0 331 do_check_eq(a5.pendingOperations, AddonManager.PENDING_NONE);
michael@0 332 do_check_false(isExtensionInAddonsList(profileDir, a5.id));
michael@0 333
michael@0 334 do_check_neq(a6, null);
michael@0 335 do_check_true(a6.isActive);
michael@0 336 do_check_false(a6.userDisabled);
michael@0 337 do_check_false(a6.appDisabled);
michael@0 338 do_check_eq(a6.pendingOperations, AddonManager.PENDING_NONE);
michael@0 339
michael@0 340 do_check_neq(a7, null);
michael@0 341 do_check_false(a7.isActive);
michael@0 342 do_check_true(a7.userDisabled);
michael@0 343 do_check_false(a7.appDisabled);
michael@0 344 do_check_eq(a7.pendingOperations, AddonManager.PENDING_NONE);
michael@0 345
michael@0 346 // Should be correctly recovered
michael@0 347 do_check_neq(t1, null);
michael@0 348 do_check_false(t1.isActive);
michael@0 349 do_check_true(t1.userDisabled);
michael@0 350 do_check_false(t1.appDisabled);
michael@0 351 do_check_eq(t1.pendingOperations, AddonManager.PENDING_NONE);
michael@0 352 do_check_false(isThemeInAddonsList(profileDir, t1.id));
michael@0 353
michael@0 354 // Should be correctly recovered
michael@0 355 do_check_neq(t2, null);
michael@0 356 do_check_true(t2.isActive);
michael@0 357 do_check_false(t2.userDisabled);
michael@0 358 do_check_false(t2.appDisabled);
michael@0 359 do_check_eq(t2.pendingOperations, AddonManager.PENDING_NONE);
michael@0 360 do_check_true(isThemeInAddonsList(profileDir, t2.id));
michael@0 361
michael@0 362 // Restarting will actually apply changes to extensions.ini which will
michael@0 363 // then be put into the in-memory database when we next fail to load the
michael@0 364 // real thing
michael@0 365 restartManager();
michael@0 366
michael@0 367 // Shouldn't have seen any startup changes
michael@0 368 check_startup_changes(AddonManager.STARTUP_CHANGE_INSTALLED, []);
michael@0 369
michael@0 370 [a1, a2, a3, a4, a5, a6, a7, t1, t2] =
michael@0 371 yield promiseAddonsByIDs(["addon1@tests.mozilla.org",
michael@0 372 "addon2@tests.mozilla.org",
michael@0 373 "addon3@tests.mozilla.org",
michael@0 374 "addon4@tests.mozilla.org",
michael@0 375 "addon5@tests.mozilla.org",
michael@0 376 "addon6@tests.mozilla.org",
michael@0 377 "addon7@tests.mozilla.org",
michael@0 378 "theme1@tests.mozilla.org",
michael@0 379 "theme2@tests.mozilla.org"]);
michael@0 380
michael@0 381 do_check_neq(a1, null);
michael@0 382 do_check_true(a1.isActive);
michael@0 383 do_check_false(a1.userDisabled);
michael@0 384 do_check_false(a1.appDisabled);
michael@0 385 do_check_eq(a1.pendingOperations, AddonManager.PENDING_NONE);
michael@0 386 do_check_true(isExtensionInAddonsList(profileDir, a1.id));
michael@0 387
michael@0 388 do_check_neq(a2, null);
michael@0 389 do_check_false(a2.isActive);
michael@0 390 do_check_true(a2.userDisabled);
michael@0 391 do_check_false(a2.appDisabled);
michael@0 392 do_check_eq(a2.pendingOperations, AddonManager.PENDING_NONE);
michael@0 393 do_check_false(isExtensionInAddonsList(profileDir, a2.id));
michael@0 394
michael@0 395 do_check_neq(a3, null);
michael@0 396 do_check_false(a3.isActive);
michael@0 397 do_check_false(a3.userDisabled);
michael@0 398 do_check_true(a3.appDisabled);
michael@0 399 do_check_eq(a3.pendingOperations, AddonManager.PENDING_NONE);
michael@0 400 do_check_false(isExtensionInAddonsList(profileDir, a3.id));
michael@0 401
michael@0 402 do_check_neq(a4, null);
michael@0 403 do_check_false(a4.isActive);
michael@0 404 do_check_false(a4.userDisabled);
michael@0 405 do_check_true(a4.appDisabled);
michael@0 406 do_check_eq(a4.pendingOperations, AddonManager.PENDING_NONE);
michael@0 407 do_check_false(isExtensionInAddonsList(profileDir, a4.id));
michael@0 408
michael@0 409 do_check_neq(a5, null);
michael@0 410 do_check_false(a5.isActive);
michael@0 411 do_check_false(a5.userDisabled);
michael@0 412 do_check_true(a5.appDisabled);
michael@0 413 do_check_eq(a5.pendingOperations, AddonManager.PENDING_NONE);
michael@0 414 do_check_false(isExtensionInAddonsList(profileDir, a5.id));
michael@0 415
michael@0 416 do_check_neq(a6, null);
michael@0 417 do_check_true(a6.isActive);
michael@0 418 do_check_false(a6.userDisabled);
michael@0 419 do_check_false(a6.appDisabled);
michael@0 420 do_check_eq(a6.pendingOperations, AddonManager.PENDING_NONE);
michael@0 421
michael@0 422 do_check_neq(a7, null);
michael@0 423 do_check_false(a7.isActive);
michael@0 424 do_check_true(a7.userDisabled);
michael@0 425 do_check_false(a7.appDisabled);
michael@0 426 do_check_eq(a7.pendingOperations, AddonManager.PENDING_NONE);
michael@0 427
michael@0 428 do_check_neq(t1, null);
michael@0 429 do_check_false(t1.isActive);
michael@0 430 do_check_true(t1.userDisabled);
michael@0 431 do_check_false(t1.appDisabled);
michael@0 432 do_check_eq(t1.pendingOperations, AddonManager.PENDING_NONE);
michael@0 433 do_check_false(isThemeInAddonsList(profileDir, t1.id));
michael@0 434
michael@0 435 do_check_neq(t2, null);
michael@0 436 do_check_true(t2.isActive);
michael@0 437 do_check_false(t2.userDisabled);
michael@0 438 do_check_false(t2.appDisabled);
michael@0 439 do_check_eq(t2.pendingOperations, AddonManager.PENDING_NONE);
michael@0 440 do_check_true(isThemeInAddonsList(profileDir, t2.id));
michael@0 441
michael@0 442 // After allowing access to the original DB things should go back to as
michael@0 443 // back how they were before the lock
michael@0 444 shutdownManager();
michael@0 445 do_print("Unlocking " + gExtensionsJSON.path);
michael@0 446 yield file.close();
michael@0 447 gExtensionsJSON.permissions = filePermissions;
michael@0 448 startupManager(false);
michael@0 449
michael@0 450 // Shouldn't have seen any startup changes
michael@0 451 check_startup_changes(AddonManager.STARTUP_CHANGE_INSTALLED, []);
michael@0 452
michael@0 453 [a1, a2, a3, a4, a5, a6, a7, t1, t2] =
michael@0 454 yield promiseAddonsByIDs(["addon1@tests.mozilla.org",
michael@0 455 "addon2@tests.mozilla.org",
michael@0 456 "addon3@tests.mozilla.org",
michael@0 457 "addon4@tests.mozilla.org",
michael@0 458 "addon5@tests.mozilla.org",
michael@0 459 "addon6@tests.mozilla.org",
michael@0 460 "addon7@tests.mozilla.org",
michael@0 461 "theme1@tests.mozilla.org",
michael@0 462 "theme2@tests.mozilla.org"]);
michael@0 463
michael@0 464 do_check_neq(a1, null);
michael@0 465 do_check_true(a1.isActive);
michael@0 466 do_check_false(a1.userDisabled);
michael@0 467 do_check_false(a1.appDisabled);
michael@0 468 do_check_eq(a1.pendingOperations, AddonManager.PENDING_NONE);
michael@0 469 do_check_true(isExtensionInAddonsList(profileDir, a1.id));
michael@0 470
michael@0 471 do_check_neq(a2, null);
michael@0 472 do_check_false(a2.isActive);
michael@0 473 do_check_true(a2.userDisabled);
michael@0 474 do_check_false(a2.appDisabled);
michael@0 475 do_check_eq(a2.pendingOperations, AddonManager.PENDING_NONE);
michael@0 476 do_check_false(isExtensionInAddonsList(profileDir, a2.id));
michael@0 477
michael@0 478 do_check_neq(a3, null);
michael@0 479 do_check_false(a3.userDisabled);
michael@0 480 // On Unix, we may be able to save our changes over the locked DB so we
michael@0 481 // remember that this extension was changed to disabled. On Windows we
michael@0 482 // couldn't replace the old DB so we read the older version of the DB
michael@0 483 // where the extension is enabled
michael@0 484 if (gXPISaveError) {
michael@0 485 do_print("XPI save failed");
michael@0 486 do_check_true(a3.isActive);
michael@0 487 do_check_false(a3.appDisabled);
michael@0 488 do_check_true(isExtensionInAddonsList(profileDir, a3.id));
michael@0 489 }
michael@0 490 else {
michael@0 491 do_print("XPI save succeeded");
michael@0 492 do_check_false(a3.isActive);
michael@0 493 do_check_true(a3.appDisabled);
michael@0 494 do_check_false(isExtensionInAddonsList(profileDir, a3.id));
michael@0 495 }
michael@0 496 do_check_eq(a3.pendingOperations, AddonManager.PENDING_NONE);
michael@0 497
michael@0 498 do_check_neq(a4, null);
michael@0 499 do_check_false(a4.isActive);
michael@0 500 // The reverse of the platform difference for a3 - Unix should
michael@0 501 // stay the same as the last iteration because the save succeeded,
michael@0 502 // Windows should still say userDisabled
michael@0 503 if (OS.Constants.Win) {
michael@0 504 do_check_true(a4.userDisabled);
michael@0 505 do_check_false(a4.appDisabled);
michael@0 506 }
michael@0 507 else {
michael@0 508 do_check_false(a4.userDisabled);
michael@0 509 do_check_true(a4.appDisabled);
michael@0 510 }
michael@0 511 do_check_false(isExtensionInAddonsList(profileDir, a4.id));
michael@0 512 do_check_eq(a4.pendingOperations, AddonManager.PENDING_NONE);
michael@0 513
michael@0 514 do_check_neq(a5, null);
michael@0 515 do_check_false(a5.isActive);
michael@0 516 do_check_false(a5.userDisabled);
michael@0 517 do_check_true(a5.appDisabled);
michael@0 518 do_check_eq(a5.pendingOperations, AddonManager.PENDING_NONE);
michael@0 519 do_check_false(isExtensionInAddonsList(profileDir, a5.id));
michael@0 520
michael@0 521 do_check_neq(a6, null);
michael@0 522 do_check_true(a6.isActive);
michael@0 523 do_check_false(a6.userDisabled);
michael@0 524 do_check_false(a6.appDisabled);
michael@0 525 do_check_eq(a6.pendingOperations, AddonManager.PENDING_NONE);
michael@0 526
michael@0 527 do_check_neq(a7, null);
michael@0 528 do_check_false(a7.isActive);
michael@0 529 do_check_true(a7.userDisabled);
michael@0 530 do_check_false(a7.appDisabled);
michael@0 531 do_check_eq(a7.pendingOperations, AddonManager.PENDING_NONE);
michael@0 532
michael@0 533 do_check_neq(t1, null);
michael@0 534 do_check_false(t1.isActive);
michael@0 535 do_check_true(t1.userDisabled);
michael@0 536 do_check_false(t1.appDisabled);
michael@0 537 do_check_eq(t1.pendingOperations, AddonManager.PENDING_NONE);
michael@0 538 do_check_false(isThemeInAddonsList(profileDir, t1.id));
michael@0 539
michael@0 540 do_check_neq(t2, null);
michael@0 541 do_check_true(t2.isActive);
michael@0 542 do_check_false(t2.userDisabled);
michael@0 543 do_check_false(t2.appDisabled);
michael@0 544 do_check_eq(t2.pendingOperations, AddonManager.PENDING_NONE);
michael@0 545 do_check_true(isThemeInAddonsList(profileDir, t2.id));
michael@0 546 });
michael@0 547
michael@0 548 function run_test() {
michael@0 549 run_next_test();
michael@0 550 }
michael@0 551

mercurial