1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/toolkit/mozapps/extensions/test/xpcshell/test_dss.js Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,824 @@ 1.4 +/* Any copyright is dedicated to the Public Domain. 1.5 + * http://creativecommons.org/publicdomain/zero/1.0/ 1.6 + */ 1.7 + 1.8 +Components.utils.import("resource://gre/modules/NetUtil.jsm"); 1.9 + 1.10 +// using a dynamic port in the addon metadata 1.11 +Components.utils.import("resource://testing-common/httpd.js"); 1.12 +let gServer = new HttpServer(); 1.13 +gServer.start(-1); 1.14 +gPort = gServer.identity.primaryPort; 1.15 + 1.16 +// This verifies that themes behave as expected 1.17 + 1.18 +const PREF_GENERAL_SKINS_SELECTEDSKIN = "general.skins.selectedSkin"; 1.19 +const PREF_EXTENSIONS_DSS_ENABLED = "extensions.dss.enabled"; 1.20 + 1.21 +Components.utils.import("resource://gre/modules/LightweightThemeManager.jsm"); 1.22 + 1.23 +const profileDir = gProfD.clone(); 1.24 +profileDir.append("extensions"); 1.25 + 1.26 +// Observer to ensure a "lightweight-theme-styling-update" notification is sent 1.27 +// when expected 1.28 +var gLWThemeChanged = false; 1.29 +var LightweightThemeObserver = { 1.30 + observe: function(aSubject, aTopic, aData) { 1.31 + if (aTopic != "lightweight-theme-styling-update") 1.32 + return; 1.33 + 1.34 + gLWThemeChanged = true; 1.35 + } 1.36 +}; 1.37 + 1.38 +AM_Cc["@mozilla.org/observer-service;1"] 1.39 + .getService(Components.interfaces.nsIObserverService) 1.40 + .addObserver(LightweightThemeObserver, "lightweight-theme-styling-update", false); 1.41 + 1.42 + 1.43 +function run_test() { 1.44 + do_test_pending(); 1.45 + createAppInfo("xpcshell@tests.mozilla.org", "XPCShell", "1", "1.9.2"); 1.46 + 1.47 + Services.prefs.setCharPref(PREF_GENERAL_SKINS_SELECTEDSKIN, "theme1/1.0"); 1.48 + Services.prefs.setBoolPref(PREF_EXTENSIONS_DSS_ENABLED, true); 1.49 + writeInstallRDFForExtension({ 1.50 + id: "theme1@tests.mozilla.org", 1.51 + version: "1.0", 1.52 + name: "Test 1", 1.53 + type: 4, 1.54 + internalName: "theme1/1.0", 1.55 + targetApplications: [{ 1.56 + id: "xpcshell@tests.mozilla.org", 1.57 + minVersion: "1", 1.58 + maxVersion: "2" 1.59 + }] 1.60 + }, profileDir); 1.61 + 1.62 + writeInstallRDFForExtension({ 1.63 + id: "theme2@tests.mozilla.org", 1.64 + version: "1.0", 1.65 + name: "Test 1", 1.66 + internalName: "theme2/1.0", 1.67 + targetApplications: [{ 1.68 + id: "xpcshell@tests.mozilla.org", 1.69 + minVersion: "1", 1.70 + maxVersion: "2" 1.71 + }] 1.72 + }, profileDir); 1.73 + 1.74 + // We need a default theme for some of these things to work but we have hidden 1.75 + // the one in the application directory. 1.76 + writeInstallRDFForExtension({ 1.77 + id: "default@tests.mozilla.org", 1.78 + version: "1.0", 1.79 + name: "Default", 1.80 + internalName: "classic/1.0", 1.81 + targetApplications: [{ 1.82 + id: "xpcshell@tests.mozilla.org", 1.83 + minVersion: "1", 1.84 + maxVersion: "2" 1.85 + }] 1.86 + }, profileDir); 1.87 + 1.88 + startupManager(); 1.89 + // Make sure we only register once despite multiple calls 1.90 + AddonManager.addInstallListener(InstallListener); 1.91 + AddonManager.addAddonListener(AddonListener); 1.92 + AddonManager.addInstallListener(InstallListener); 1.93 + AddonManager.addAddonListener(AddonListener); 1.94 + AddonManager.addInstallListener(InstallListener); 1.95 + 1.96 + AddonManager.getAddonsByIDs(["theme1@tests.mozilla.org", 1.97 + "theme2@tests.mozilla.org"], function([t1, t2]) { 1.98 + do_check_neq(t1, null); 1.99 + do_check_false(t1.userDisabled); 1.100 + do_check_false(t1.appDisabled); 1.101 + do_check_true(t1.isActive); 1.102 + do_check_eq(t1.screenshots, null); 1.103 + do_check_true(isThemeInAddonsList(profileDir, t1.id)); 1.104 + do_check_false(hasFlag(t1.permissions, AddonManager.PERM_CAN_DISABLE)); 1.105 + do_check_false(hasFlag(t1.permissions, AddonManager.PERM_CAN_ENABLE)); 1.106 + 1.107 + do_check_neq(t2, null); 1.108 + do_check_true(t2.userDisabled); 1.109 + do_check_false(t2.appDisabled); 1.110 + do_check_false(t2.isActive); 1.111 + do_check_eq(t2.screenshots, null); 1.112 + do_check_true(isThemeInAddonsList(profileDir, t2.id)); 1.113 + do_check_false(hasFlag(t2.permissions, AddonManager.PERM_CAN_DISABLE)); 1.114 + do_check_true(hasFlag(t2.permissions, AddonManager.PERM_CAN_ENABLE)); 1.115 + 1.116 + do_execute_soon(run_test_1); 1.117 + }); 1.118 +} 1.119 + 1.120 +function end_test() { 1.121 + do_execute_soon(do_test_finished); 1.122 +} 1.123 + 1.124 +// Checks enabling one theme disables the others 1.125 +function run_test_1() { 1.126 + prepare_test({ 1.127 + "theme1@tests.mozilla.org": [ 1.128 + ["onDisabling", false], 1.129 + "onDisabled" 1.130 + ], 1.131 + "theme2@tests.mozilla.org": [ 1.132 + ["onEnabling", false], 1.133 + "onEnabled" 1.134 + ] 1.135 + }); 1.136 + AddonManager.getAddonsByIDs(["theme1@tests.mozilla.org", 1.137 + "theme2@tests.mozilla.org"], function([t1, t2]) { 1.138 + t2.userDisabled = false; 1.139 + 1.140 + ensure_test_completed(); 1.141 + do_check_false(hasFlag(t2.permissions, AddonManager.PERM_CAN_DISABLE)); 1.142 + do_check_false(hasFlag(t2.permissions, AddonManager.PERM_CAN_ENABLE)); 1.143 + 1.144 + do_check_true(t1.userDisabled); 1.145 + do_check_false(hasFlag(t1.permissions, AddonManager.PERM_CAN_DISABLE)); 1.146 + do_check_true(hasFlag(t1.permissions, AddonManager.PERM_CAN_ENABLE)); 1.147 + 1.148 + do_execute_soon(check_test_1); 1.149 + }); 1.150 +} 1.151 + 1.152 +function check_test_1() { 1.153 + restartManager(); 1.154 + do_check_eq(Services.prefs.getCharPref(PREF_GENERAL_SKINS_SELECTEDSKIN), "theme2/1.0"); 1.155 + 1.156 + AddonManager.getAddonsByIDs(["theme1@tests.mozilla.org", 1.157 + "theme2@tests.mozilla.org"], function([t1, t2]) { 1.158 + do_check_neq(t1, null); 1.159 + do_check_true(t1.userDisabled); 1.160 + do_check_false(t1.appDisabled); 1.161 + do_check_false(t1.isActive); 1.162 + do_check_true(isThemeInAddonsList(profileDir, t1.id)); 1.163 + do_check_false(hasFlag(t1.permissions, AddonManager.PERM_CAN_DISABLE)); 1.164 + do_check_true(hasFlag(t1.permissions, AddonManager.PERM_CAN_ENABLE)); 1.165 + 1.166 + do_check_neq(t2, null); 1.167 + do_check_false(t2.userDisabled); 1.168 + do_check_false(t2.appDisabled); 1.169 + do_check_true(t2.isActive); 1.170 + do_check_true(isThemeInAddonsList(profileDir, t2.id)); 1.171 + do_check_false(hasFlag(t2.permissions, AddonManager.PERM_CAN_DISABLE)); 1.172 + do_check_false(hasFlag(t2.permissions, AddonManager.PERM_CAN_ENABLE)); 1.173 + do_check_false(gLWThemeChanged); 1.174 + 1.175 + do_execute_soon(run_test_2); 1.176 + }); 1.177 +} 1.178 + 1.179 +// Removing the active theme should fall back to the default (not ideal in this 1.180 +// case since we don't have the default theme installed) 1.181 +function run_test_2() { 1.182 + var dest = profileDir.clone(); 1.183 + dest.append(do_get_expected_addon_name("theme2@tests.mozilla.org")); 1.184 + dest.remove(true); 1.185 + 1.186 + restartManager(); 1.187 + do_check_eq(Services.prefs.getCharPref(PREF_GENERAL_SKINS_SELECTEDSKIN), "classic/1.0"); 1.188 + 1.189 + AddonManager.getAddonsByIDs(["theme1@tests.mozilla.org", 1.190 + "theme2@tests.mozilla.org"], function([t1, t2]) { 1.191 + do_check_neq(t1, null); 1.192 + do_check_true(t1.userDisabled); 1.193 + do_check_false(t1.appDisabled); 1.194 + do_check_false(t1.isActive); 1.195 + do_check_true(isThemeInAddonsList(profileDir, t1.id)); 1.196 + do_check_false(hasFlag(t1.permissions, AddonManager.PERM_CAN_DISABLE)); 1.197 + do_check_true(hasFlag(t1.permissions, AddonManager.PERM_CAN_ENABLE)); 1.198 + 1.199 + do_check_eq(t2, null); 1.200 + do_check_false(isThemeInAddonsList(profileDir, "theme2@tests.mozilla.org")); 1.201 + do_check_false(gLWThemeChanged); 1.202 + 1.203 + do_execute_soon(run_test_3); 1.204 + }); 1.205 +} 1.206 + 1.207 +// Installing a lightweight theme should happen instantly and disable the default theme 1.208 +function run_test_3() { 1.209 + writeInstallRDFForExtension({ 1.210 + id: "theme2@tests.mozilla.org", 1.211 + version: "1.0", 1.212 + name: "Test 1", 1.213 + internalName: "theme2/1.0", 1.214 + targetApplications: [{ 1.215 + id: "xpcshell@tests.mozilla.org", 1.216 + minVersion: "1", 1.217 + maxVersion: "2" 1.218 + }] 1.219 + }, profileDir); 1.220 + restartManager(); 1.221 + 1.222 + prepare_test({ 1.223 + "1@personas.mozilla.org": [ 1.224 + ["onInstalling", false], 1.225 + "onInstalled", 1.226 + ["onEnabling", false], 1.227 + "onEnabled" 1.228 + ], 1.229 + "default@tests.mozilla.org": [ 1.230 + ["onDisabling", false], 1.231 + "onDisabled", 1.232 + ] 1.233 + }, [ 1.234 + "onExternalInstall" 1.235 + ]); 1.236 + 1.237 + LightweightThemeManager.currentTheme = { 1.238 + id: "1", 1.239 + version: "1", 1.240 + name: "Test LW Theme", 1.241 + description: "A test theme", 1.242 + author: "Mozilla", 1.243 + homepageURL: "http://localhost:" + gPort + "/data/index.html", 1.244 + headerURL: "http://localhost:" + gPort + "/data/header.png", 1.245 + footerURL: "http://localhost:" + gPort + "/data/footer.png", 1.246 + previewURL: "http://localhost:" + gPort + "/data/preview.png", 1.247 + iconURL: "http://localhost:" + gPort + "/data/icon.png" 1.248 + }; 1.249 + 1.250 + ensure_test_completed(); 1.251 + 1.252 + AddonManager.getAddonByID("1@personas.mozilla.org", function(p1) { 1.253 + do_check_neq(null, p1); 1.254 + do_check_eq(p1.name, "Test LW Theme"); 1.255 + do_check_eq(p1.version, "1"); 1.256 + do_check_eq(p1.type, "theme"); 1.257 + do_check_eq(p1.description, "A test theme"); 1.258 + do_check_eq(p1.creator, "Mozilla"); 1.259 + do_check_eq(p1.homepageURL, "http://localhost:" + gPort + "/data/index.html"); 1.260 + do_check_eq(p1.iconURL, "http://localhost:" + gPort + "/data/icon.png"); 1.261 + do_check_eq(p1.screenshots.length, 1); 1.262 + do_check_eq(p1.screenshots[0], "http://localhost:" + gPort + "/data/preview.png"); 1.263 + do_check_false(p1.appDisabled); 1.264 + do_check_false(p1.userDisabled); 1.265 + do_check_true(p1.isCompatible); 1.266 + do_check_true(p1.providesUpdatesSecurely); 1.267 + do_check_eq(p1.blocklistState, 0); 1.268 + do_check_true(p1.isActive); 1.269 + do_check_eq(p1.pendingOperations, 0); 1.270 + do_check_eq(p1.permissions, AddonManager.PERM_CAN_UNINSTALL | AddonManager.PERM_CAN_DISABLE); 1.271 + do_check_eq(p1.scope, AddonManager.SCOPE_PROFILE); 1.272 + do_check_true("isCompatibleWith" in p1); 1.273 + do_check_true("findUpdates" in p1); 1.274 + 1.275 + AddonManager.getAddonsByTypes(["theme"], function(addons) { 1.276 + let seen = false; 1.277 + addons.forEach(function(a) { 1.278 + if (a.id == "1@personas.mozilla.org") { 1.279 + seen = true; 1.280 + } 1.281 + else { 1.282 + dump("Checking theme " + a.id + "\n"); 1.283 + do_check_false(a.isActive); 1.284 + do_check_true(a.userDisabled); 1.285 + } 1.286 + }); 1.287 + do_check_true(seen); 1.288 + 1.289 + do_check_true(gLWThemeChanged); 1.290 + gLWThemeChanged = false; 1.291 + 1.292 + do_execute_soon(run_test_4); 1.293 + }); 1.294 + }); 1.295 +} 1.296 + 1.297 +// Installing a second lightweight theme should disable the first with no restart 1.298 +function run_test_4() { 1.299 + prepare_test({ 1.300 + "1@personas.mozilla.org": [ 1.301 + ["onDisabling", false], 1.302 + "onDisabled", 1.303 + ], 1.304 + "2@personas.mozilla.org": [ 1.305 + ["onInstalling", false], 1.306 + "onInstalled", 1.307 + ["onEnabling", false], 1.308 + "onEnabled" 1.309 + ] 1.310 + }, [ 1.311 + "onExternalInstall" 1.312 + ]); 1.313 + 1.314 + LightweightThemeManager.currentTheme = { 1.315 + id: "2", 1.316 + version: "1", 1.317 + name: "Test LW Theme", 1.318 + description: "A second test theme", 1.319 + author: "Mozilla", 1.320 + homepageURL: "http://localhost:" + gPort + "/data/index.html", 1.321 + headerURL: "http://localhost:" + gPort + "/data/header.png", 1.322 + footerURL: "http://localhost:" + gPort + "/data/footer.png", 1.323 + previewURL: "http://localhost:" + gPort + "/data/preview.png", 1.324 + iconURL: "http://localhost:" + gPort + "/data/icon.png" 1.325 + }; 1.326 + 1.327 + ensure_test_completed(); 1.328 + 1.329 + AddonManager.getAddonsByIDs(["1@personas.mozilla.org", 1.330 + "2@personas.mozilla.org"], function([p1, p2]) { 1.331 + do_check_neq(null, p2); 1.332 + do_check_false(p2.appDisabled); 1.333 + do_check_false(p2.userDisabled); 1.334 + do_check_true(p2.isActive); 1.335 + do_check_eq(p2.pendingOperations, 0); 1.336 + do_check_eq(p2.permissions, AddonManager.PERM_CAN_UNINSTALL | AddonManager.PERM_CAN_DISABLE); 1.337 + 1.338 + do_check_neq(null, p1); 1.339 + do_check_false(p1.appDisabled); 1.340 + do_check_true(p1.userDisabled); 1.341 + do_check_false(p1.isActive); 1.342 + do_check_eq(p1.pendingOperations, 0); 1.343 + do_check_eq(p1.permissions, AddonManager.PERM_CAN_UNINSTALL | AddonManager.PERM_CAN_ENABLE); 1.344 + 1.345 + AddonManager.getAddonsByTypes(["theme"], function(addons) { 1.346 + let seen = false; 1.347 + addons.forEach(function(a) { 1.348 + if (a.id == "2@personas.mozilla.org") { 1.349 + seen = true; 1.350 + } 1.351 + else { 1.352 + dump("Checking theme " + a.id + "\n"); 1.353 + do_check_false(a.isActive); 1.354 + do_check_true(a.userDisabled); 1.355 + } 1.356 + }); 1.357 + do_check_true(seen); 1.358 + 1.359 + do_check_true(gLWThemeChanged); 1.360 + gLWThemeChanged = false; 1.361 + 1.362 + do_execute_soon(run_test_5); 1.363 + }); 1.364 + }); 1.365 +} 1.366 + 1.367 +// Switching to a custom theme should disable the lightweight theme and require 1.368 +// a restart. Cancelling that should also be possible. 1.369 +function run_test_5() { 1.370 + prepare_test({ 1.371 + "2@personas.mozilla.org": [ 1.372 + ["onDisabling", false], 1.373 + "onDisabled" 1.374 + ], 1.375 + "theme2@tests.mozilla.org": [ 1.376 + ["onEnabling", false], 1.377 + "onEnabled" 1.378 + ] 1.379 + }); 1.380 + 1.381 + AddonManager.getAddonsByIDs(["2@personas.mozilla.org", 1.382 + "theme2@tests.mozilla.org"], function([p2, t2]) { 1.383 + t2.userDisabled = false; 1.384 + 1.385 + ensure_test_completed(); 1.386 + 1.387 + prepare_test({ 1.388 + "2@personas.mozilla.org": [ 1.389 + "onEnabling" 1.390 + ], 1.391 + "theme2@tests.mozilla.org": [ 1.392 + ["onDisabling", false], 1.393 + "onDisabled" 1.394 + ] 1.395 + }); 1.396 + 1.397 + p2.userDisabled = false; 1.398 + 1.399 + ensure_test_completed(); 1.400 + 1.401 + prepare_test({ 1.402 + "2@personas.mozilla.org": [ 1.403 + ["onOperationCancelled", true] 1.404 + ], 1.405 + "theme2@tests.mozilla.org": [ 1.406 + ["onEnabling", false], 1.407 + "onEnabled" 1.408 + ] 1.409 + }); 1.410 + 1.411 + t2.userDisabled = false; 1.412 + 1.413 + ensure_test_completed(); 1.414 + 1.415 + do_check_true(t2.isActive); 1.416 + do_check_false(t2.userDisabled); 1.417 + do_check_false(hasFlag(AddonManager.PENDING_ENABLE, t2.pendingOperations)); 1.418 + do_check_false(p2.isActive); 1.419 + do_check_true(p2.userDisabled); 1.420 + do_check_false(hasFlag(AddonManager.PENDING_DISABLE, p2.pendingOperations)); 1.421 + do_check_true(hasFlag(AddonManager.PERM_CAN_ENABLE, p2.permissions)); 1.422 + do_check_true(gLWThemeChanged); 1.423 + 1.424 + do_execute_soon(check_test_5); 1.425 + }); 1.426 +} 1.427 + 1.428 +function check_test_5() { 1.429 + restartManager(); 1.430 + 1.431 + AddonManager.getAddonsByIDs(["2@personas.mozilla.org", 1.432 + "theme2@tests.mozilla.org"], function([p2, t2]) { 1.433 + do_check_true(t2.isActive); 1.434 + do_check_false(t2.userDisabled); 1.435 + do_check_false(hasFlag(AddonManager.PENDING_ENABLE, t2.pendingOperations)); 1.436 + do_check_false(p2.isActive); 1.437 + do_check_true(p2.userDisabled); 1.438 + do_check_false(hasFlag(AddonManager.PENDING_DISABLE, p2.pendingOperations)); 1.439 + 1.440 + do_check_true(gLWThemeChanged); 1.441 + gLWThemeChanged = false; 1.442 + 1.443 + do_execute_soon(run_test_6); 1.444 + }); 1.445 +} 1.446 + 1.447 +// Switching from a custom theme to a lightweight theme should require a restart 1.448 +function run_test_6() { 1.449 + prepare_test({ 1.450 + "2@personas.mozilla.org": [ 1.451 + "onEnabling", 1.452 + ], 1.453 + "theme2@tests.mozilla.org": [ 1.454 + ["onDisabling", false], 1.455 + "onDisabled" 1.456 + ] 1.457 + }); 1.458 + 1.459 + AddonManager.getAddonsByIDs(["2@personas.mozilla.org", 1.460 + "theme2@tests.mozilla.org"], function([p2, t2]) { 1.461 + p2.userDisabled = false; 1.462 + 1.463 + ensure_test_completed(); 1.464 + 1.465 + prepare_test({ 1.466 + "2@personas.mozilla.org": [ 1.467 + "onOperationCancelled", 1.468 + ], 1.469 + "theme2@tests.mozilla.org": [ 1.470 + ["onEnabling", false], 1.471 + "onEnabled" 1.472 + ] 1.473 + }); 1.474 + 1.475 + t2.userDisabled = false; 1.476 + 1.477 + ensure_test_completed(); 1.478 + 1.479 + prepare_test({ 1.480 + "2@personas.mozilla.org": [ 1.481 + "onEnabling", 1.482 + ], 1.483 + "theme2@tests.mozilla.org": [ 1.484 + ["onDisabling", false], 1.485 + "onDisabled" 1.486 + ] 1.487 + }); 1.488 + 1.489 + p2.userDisabled = false; 1.490 + 1.491 + ensure_test_completed(); 1.492 + 1.493 + do_check_false(p2.isActive); 1.494 + do_check_false(p2.userDisabled); 1.495 + do_check_true(hasFlag(AddonManager.PENDING_ENABLE, p2.pendingOperations)); 1.496 + do_check_false(t2.isActive); 1.497 + do_check_true(t2.userDisabled); 1.498 + do_check_false(hasFlag(AddonManager.PENDING_DISABLE, t2.pendingOperations)); 1.499 + do_check_false(gLWThemeChanged); 1.500 + 1.501 + do_execute_soon(check_test_6); 1.502 + }); 1.503 +} 1.504 + 1.505 +function check_test_6() { 1.506 + restartManager(); 1.507 + 1.508 + AddonManager.getAddonsByIDs(["2@personas.mozilla.org", 1.509 + "theme2@tests.mozilla.org"], function([p2, t2]) { 1.510 + do_check_true(p2.isActive); 1.511 + do_check_false(p2.userDisabled); 1.512 + do_check_false(hasFlag(AddonManager.PENDING_ENABLE, p2.pendingOperations)); 1.513 + do_check_false(t2.isActive); 1.514 + do_check_true(t2.userDisabled); 1.515 + do_check_false(hasFlag(AddonManager.PENDING_DISABLE, t2.pendingOperations)); 1.516 + 1.517 + do_check_true(gLWThemeChanged); 1.518 + gLWThemeChanged = false; 1.519 + 1.520 + do_execute_soon(run_test_7); 1.521 + }); 1.522 +} 1.523 + 1.524 +// Uninstalling a lightweight theme should not require a restart 1.525 +function run_test_7() { 1.526 + prepare_test({ 1.527 + "1@personas.mozilla.org": [ 1.528 + ["onUninstalling", false], 1.529 + "onUninstalled" 1.530 + ] 1.531 + }); 1.532 + 1.533 + AddonManager.getAddonByID("1@personas.mozilla.org", function(p1) { 1.534 + p1.uninstall(); 1.535 + 1.536 + ensure_test_completed(); 1.537 + do_check_eq(LightweightThemeManager.usedThemes.length, 1); 1.538 + do_check_false(gLWThemeChanged); 1.539 + 1.540 + do_execute_soon(run_test_8); 1.541 + }); 1.542 +} 1.543 + 1.544 +// Uninstalling a lightweight theme in use should not require a restart and it 1.545 +// should reactivate the default theme 1.546 +// Also, uninstalling a lightweight theme in use should send a 1.547 +// "lightweight-theme-styling-update" notification through the observer service 1.548 +function run_test_8() { 1.549 + prepare_test({ 1.550 + "2@personas.mozilla.org": [ 1.551 + ["onUninstalling", false], 1.552 + "onUninstalled" 1.553 + ], 1.554 + "default@tests.mozilla.org": [ 1.555 + ["onEnabling", false], 1.556 + "onEnabled" 1.557 + ] 1.558 + }); 1.559 + 1.560 + AddonManager.getAddonByID("2@personas.mozilla.org", function(p2) { 1.561 + p2.uninstall(); 1.562 + 1.563 + ensure_test_completed(); 1.564 + do_check_eq(LightweightThemeManager.usedThemes.length, 0); 1.565 + 1.566 + do_check_true(gLWThemeChanged); 1.567 + gLWThemeChanged = false; 1.568 + 1.569 + do_execute_soon(run_test_9); 1.570 + }); 1.571 +} 1.572 + 1.573 +// Uninstalling a theme not in use should not require a restart 1.574 +function run_test_9() { 1.575 + AddonManager.getAddonByID("theme1@tests.mozilla.org", function(t1) { 1.576 + prepare_test({ 1.577 + "theme1@tests.mozilla.org": [ 1.578 + ["onUninstalling", false], 1.579 + "onUninstalled" 1.580 + ] 1.581 + }); 1.582 + 1.583 + t1.uninstall(); 1.584 + 1.585 + ensure_test_completed(); 1.586 + 1.587 + AddonManager.getAddonByID("theme1@tests.mozilla.org", function(newt1) { 1.588 + do_check_eq(newt1, null); 1.589 + do_check_false(gLWThemeChanged); 1.590 + 1.591 + do_execute_soon(run_test_10); 1.592 + }); 1.593 + }); 1.594 +} 1.595 + 1.596 +// Uninstalling a custom theme in use should require a restart 1.597 +function run_test_10() { 1.598 + AddonManager.getAddonByID("theme2@tests.mozilla.org", callback_soon(function(oldt2) { 1.599 + prepare_test({ 1.600 + "theme2@tests.mozilla.org": [ 1.601 + ["onEnabling", false], 1.602 + "onEnabled" 1.603 + ], 1.604 + "default@tests.mozilla.org": [ 1.605 + ["onDisabling", false], 1.606 + "onDisabled" 1.607 + ] 1.608 + }); 1.609 + 1.610 + oldt2.userDisabled = false; 1.611 + 1.612 + ensure_test_completed(); 1.613 + 1.614 + restartManager(); 1.615 + 1.616 + AddonManager.getAddonsByIDs(["default@tests.mozilla.org", 1.617 + "theme2@tests.mozilla.org"], 1.618 + callback_soon(function([d, t2]) { 1.619 + do_check_true(t2.isActive); 1.620 + do_check_false(t2.userDisabled); 1.621 + do_check_false(t2.appDisabled); 1.622 + do_check_false(d.isActive); 1.623 + do_check_true(d.userDisabled); 1.624 + do_check_false(d.appDisabled); 1.625 + 1.626 + prepare_test({ 1.627 + "theme2@tests.mozilla.org": [ 1.628 + ["onUninstalling", false], 1.629 + "onUninstalled" 1.630 + ], 1.631 + "default@tests.mozilla.org": [ 1.632 + ["onEnabling", false], 1.633 + "onEnabled" 1.634 + ] 1.635 + }); 1.636 + 1.637 + t2.uninstall(); 1.638 + 1.639 + ensure_test_completed(); 1.640 + do_check_false(gLWThemeChanged); 1.641 + 1.642 + restartManager(); 1.643 + 1.644 + do_execute_soon(run_test_11); 1.645 + })); 1.646 + })); 1.647 +} 1.648 + 1.649 +// Installing a custom theme not in use should not require a restart 1.650 +function run_test_11() { 1.651 + prepare_test({ }, [ 1.652 + "onNewInstall" 1.653 + ]); 1.654 + 1.655 + AddonManager.getInstallForFile(do_get_addon("test_theme"), function(install) { 1.656 + ensure_test_completed(); 1.657 + 1.658 + do_check_neq(install, null); 1.659 + do_check_eq(install.type, "theme"); 1.660 + do_check_eq(install.version, "1.0"); 1.661 + do_check_eq(install.name, "Test Theme 1"); 1.662 + do_check_eq(install.state, AddonManager.STATE_DOWNLOADED); 1.663 + 1.664 + prepare_test({ 1.665 + "theme1@tests.mozilla.org": [ 1.666 + ["onInstalling", false], 1.667 + "onInstalled" 1.668 + ] 1.669 + }, [ 1.670 + "onInstallStarted", 1.671 + "onInstallEnded", 1.672 + ], callback_soon(check_test_11)); 1.673 + install.install(); 1.674 + }); 1.675 +} 1.676 + 1.677 +function check_test_11() { 1.678 + restartManager(); 1.679 + AddonManager.getAddonByID("theme1@tests.mozilla.org", function(t1) { 1.680 + do_check_neq(t1, null); 1.681 + var previewSpec = do_get_addon_root_uri(profileDir, "theme1@tests.mozilla.org") + "preview.png"; 1.682 + do_check_eq(t1.screenshots.length, 1); 1.683 + do_check_eq(t1.screenshots[0], previewSpec); 1.684 + do_check_false(gLWThemeChanged); 1.685 + 1.686 + do_execute_soon(run_test_12); 1.687 + }); 1.688 +} 1.689 + 1.690 +// Updating a custom theme not in use should not require a restart 1.691 +function run_test_12() { 1.692 + prepare_test({ }, [ 1.693 + "onNewInstall" 1.694 + ]); 1.695 + 1.696 + AddonManager.getInstallForFile(do_get_addon("test_theme"), function(install) { 1.697 + ensure_test_completed(); 1.698 + 1.699 + do_check_neq(install, null); 1.700 + do_check_eq(install.type, "theme"); 1.701 + do_check_eq(install.version, "1.0"); 1.702 + do_check_eq(install.name, "Test Theme 1"); 1.703 + do_check_eq(install.state, AddonManager.STATE_DOWNLOADED); 1.704 + 1.705 + prepare_test({ 1.706 + "theme1@tests.mozilla.org": [ 1.707 + ["onInstalling", false], 1.708 + "onInstalled" 1.709 + ] 1.710 + }, [ 1.711 + "onInstallStarted", 1.712 + "onInstallEnded", 1.713 + ], check_test_12); 1.714 + install.install(); 1.715 + }); 1.716 +} 1.717 + 1.718 +function check_test_12() { 1.719 + AddonManager.getAddonByID("theme1@tests.mozilla.org", function(t1) { 1.720 + do_check_neq(t1, null); 1.721 + do_check_false(gLWThemeChanged); 1.722 + 1.723 + do_execute_soon(run_test_13); 1.724 + }); 1.725 +} 1.726 + 1.727 +// Updating a custom theme in use should require a restart 1.728 +function run_test_13() { 1.729 + AddonManager.getAddonByID("theme1@tests.mozilla.org", callback_soon(function(t1) { 1.730 + prepare_test({ 1.731 + "theme1@tests.mozilla.org": [ 1.732 + ["onEnabling", false], 1.733 + "onEnabled" 1.734 + ], 1.735 + "default@tests.mozilla.org": [ 1.736 + ["onDisabling", false], 1.737 + "onDisabled" 1.738 + ] 1.739 + }); 1.740 + 1.741 + t1.userDisabled = false; 1.742 + ensure_test_completed(); 1.743 + restartManager(); 1.744 + 1.745 + prepare_test({ }, [ 1.746 + "onNewInstall" 1.747 + ]); 1.748 + 1.749 + AddonManager.getInstallForFile(do_get_addon("test_theme"), function(install) { 1.750 + ensure_test_completed(); 1.751 + 1.752 + do_check_neq(install, null); 1.753 + do_check_eq(install.type, "theme"); 1.754 + do_check_eq(install.version, "1.0"); 1.755 + do_check_eq(install.name, "Test Theme 1"); 1.756 + do_check_eq(install.state, AddonManager.STATE_DOWNLOADED); 1.757 + 1.758 + prepare_test({ 1.759 + "theme1@tests.mozilla.org": [ 1.760 + "onInstalling", 1.761 + ] 1.762 + }, [ 1.763 + "onInstallStarted", 1.764 + "onInstallEnded", 1.765 + ], callback_soon(check_test_13)); 1.766 + install.install(); 1.767 + }); 1.768 + })); 1.769 +} 1.770 + 1.771 +function check_test_13() { 1.772 + restartManager(); 1.773 + 1.774 + AddonManager.getAddonByID("theme1@tests.mozilla.org", function(t1) { 1.775 + do_check_neq(t1, null); 1.776 + do_check_true(t1.isActive); 1.777 + do_check_false(gLWThemeChanged); 1.778 + t1.uninstall(); 1.779 + 1.780 + do_execute_soon(run_test_14); 1.781 + }); 1.782 +} 1.783 + 1.784 +// Switching from a lightweight theme to the default theme should not require 1.785 +// a restart 1.786 +function run_test_14() { 1.787 + restartManager(); 1.788 + LightweightThemeManager.currentTheme = { 1.789 + id: "1", 1.790 + version: "1", 1.791 + name: "Test LW Theme", 1.792 + description: "A test theme", 1.793 + author: "Mozilla", 1.794 + homepageURL: "http://localhost:" + gPort + "/data/index.html", 1.795 + headerURL: "http://localhost:" + gPort + "/data/header.png", 1.796 + footerURL: "http://localhost:" + gPort + "/data/footer.png", 1.797 + previewURL: "http://localhost:" + gPort + "/data/preview.png", 1.798 + iconURL: "http://localhost:" + gPort + "/data/icon.png" 1.799 + }; 1.800 + 1.801 + AddonManager.getAddonByID("default@tests.mozilla.org", function(d) { 1.802 + do_check_true(d.userDisabled); 1.803 + do_check_false(d.isActive); 1.804 + 1.805 + prepare_test({ 1.806 + "1@personas.mozilla.org": [ 1.807 + ["onDisabling", false], 1.808 + "onDisabled" 1.809 + ], 1.810 + "default@tests.mozilla.org": [ 1.811 + ["onEnabling", false], 1.812 + "onEnabled" 1.813 + ] 1.814 + }); 1.815 + 1.816 + d.userDisabled = false; 1.817 + ensure_test_completed(); 1.818 + 1.819 + do_check_false(d.userDisabled); 1.820 + do_check_true(d.isActive); 1.821 + 1.822 + do_check_true(gLWThemeChanged); 1.823 + gLWThemeChanged = false; 1.824 + 1.825 + end_test(); 1.826 + }); 1.827 +}