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

Sat, 03 Jan 2015 20:18:00 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Sat, 03 Jan 2015 20:18:00 +0100
branch
TOR_BUG_3246
changeset 7
129ffea94266
permissions
-rw-r--r--

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 Components.utils.import("resource://gre/modules/NetUtil.jsm");
     7 // using a dynamic port in the addon metadata
     8 Components.utils.import("resource://testing-common/httpd.js");
     9 let gServer = new HttpServer();
    10 gServer.start(-1);
    11 gPort = gServer.identity.primaryPort;
    13 // This verifies that themes behave as expected
    15 const PREF_GENERAL_SKINS_SELECTEDSKIN = "general.skins.selectedSkin";
    16 const PREF_EXTENSIONS_DSS_ENABLED = "extensions.dss.enabled";
    18 Components.utils.import("resource://gre/modules/LightweightThemeManager.jsm");
    20 const profileDir = gProfD.clone();
    21 profileDir.append("extensions");
    23 // Observer to ensure a "lightweight-theme-styling-update" notification is sent
    24 // when expected
    25 var gLWThemeChanged = false;
    26 var LightweightThemeObserver = {
    27   observe: function(aSubject, aTopic, aData) {
    28     if (aTopic != "lightweight-theme-styling-update")
    29       return;
    31     gLWThemeChanged = true;
    32   }
    33 };
    35 AM_Cc["@mozilla.org/observer-service;1"]
    36      .getService(Components.interfaces.nsIObserverService)
    37      .addObserver(LightweightThemeObserver, "lightweight-theme-styling-update", false);
    40 function run_test() {
    41   do_test_pending();
    42   createAppInfo("xpcshell@tests.mozilla.org", "XPCShell", "1", "1.9.2");
    44   Services.prefs.setCharPref(PREF_GENERAL_SKINS_SELECTEDSKIN, "theme1/1.0");
    45   Services.prefs.setBoolPref(PREF_EXTENSIONS_DSS_ENABLED, true);
    46   writeInstallRDFForExtension({
    47     id: "theme1@tests.mozilla.org",
    48     version: "1.0",
    49     name: "Test 1",
    50     type: 4,
    51     internalName: "theme1/1.0",
    52     targetApplications: [{
    53       id: "xpcshell@tests.mozilla.org",
    54       minVersion: "1",
    55       maxVersion: "2"
    56     }]
    57   }, profileDir);
    59   writeInstallRDFForExtension({
    60     id: "theme2@tests.mozilla.org",
    61     version: "1.0",
    62     name: "Test 1",
    63     internalName: "theme2/1.0",
    64     targetApplications: [{
    65       id: "xpcshell@tests.mozilla.org",
    66       minVersion: "1",
    67       maxVersion: "2"
    68     }]
    69   }, profileDir);
    71   // We need a default theme for some of these things to work but we have hidden
    72   // the one in the application directory.
    73   writeInstallRDFForExtension({
    74     id: "default@tests.mozilla.org",
    75     version: "1.0",
    76     name: "Default",
    77     internalName: "classic/1.0",
    78     targetApplications: [{
    79       id: "xpcshell@tests.mozilla.org",
    80       minVersion: "1",
    81       maxVersion: "2"
    82     }]
    83   }, profileDir);
    85   startupManager();
    86   // Make sure we only register once despite multiple calls
    87   AddonManager.addInstallListener(InstallListener);
    88   AddonManager.addAddonListener(AddonListener);
    89   AddonManager.addInstallListener(InstallListener);
    90   AddonManager.addAddonListener(AddonListener);
    91   AddonManager.addInstallListener(InstallListener);
    93   AddonManager.getAddonsByIDs(["theme1@tests.mozilla.org",
    94                                "theme2@tests.mozilla.org"], function([t1, t2]) {
    95     do_check_neq(t1, null);
    96     do_check_false(t1.userDisabled);
    97     do_check_false(t1.appDisabled);
    98     do_check_true(t1.isActive);
    99     do_check_eq(t1.screenshots, null);
   100     do_check_true(isThemeInAddonsList(profileDir, t1.id));
   101     do_check_false(hasFlag(t1.permissions, AddonManager.PERM_CAN_DISABLE));
   102     do_check_false(hasFlag(t1.permissions, AddonManager.PERM_CAN_ENABLE));
   104     do_check_neq(t2, null);
   105     do_check_true(t2.userDisabled);
   106     do_check_false(t2.appDisabled);
   107     do_check_false(t2.isActive);
   108     do_check_eq(t2.screenshots, null);
   109     do_check_true(isThemeInAddonsList(profileDir, t2.id));
   110     do_check_false(hasFlag(t2.permissions, AddonManager.PERM_CAN_DISABLE));
   111     do_check_true(hasFlag(t2.permissions, AddonManager.PERM_CAN_ENABLE));
   113     do_execute_soon(run_test_1);
   114   });
   115 }
   117 function end_test() {
   118   do_execute_soon(do_test_finished);
   119 }
   121 // Checks enabling one theme disables the others
   122 function run_test_1() {
   123   prepare_test({
   124     "theme1@tests.mozilla.org": [
   125       ["onDisabling", false],
   126       "onDisabled"
   127     ],
   128     "theme2@tests.mozilla.org": [
   129       ["onEnabling", false],
   130       "onEnabled"
   131     ]
   132   });
   133   AddonManager.getAddonsByIDs(["theme1@tests.mozilla.org",
   134                                "theme2@tests.mozilla.org"], function([t1, t2]) {
   135     t2.userDisabled = false;
   137     ensure_test_completed();
   138     do_check_false(hasFlag(t2.permissions, AddonManager.PERM_CAN_DISABLE));
   139     do_check_false(hasFlag(t2.permissions, AddonManager.PERM_CAN_ENABLE));
   141     do_check_true(t1.userDisabled);
   142     do_check_false(hasFlag(t1.permissions, AddonManager.PERM_CAN_DISABLE));
   143     do_check_true(hasFlag(t1.permissions, AddonManager.PERM_CAN_ENABLE));
   145     do_execute_soon(check_test_1);
   146   });
   147 }
   149 function check_test_1() {
   150   restartManager();
   151   do_check_eq(Services.prefs.getCharPref(PREF_GENERAL_SKINS_SELECTEDSKIN), "theme2/1.0");
   153   AddonManager.getAddonsByIDs(["theme1@tests.mozilla.org",
   154                                "theme2@tests.mozilla.org"], function([t1, t2]) {
   155     do_check_neq(t1, null);
   156     do_check_true(t1.userDisabled);
   157     do_check_false(t1.appDisabled);
   158     do_check_false(t1.isActive);
   159     do_check_true(isThemeInAddonsList(profileDir, t1.id));
   160     do_check_false(hasFlag(t1.permissions, AddonManager.PERM_CAN_DISABLE));
   161     do_check_true(hasFlag(t1.permissions, AddonManager.PERM_CAN_ENABLE));
   163     do_check_neq(t2, null);
   164     do_check_false(t2.userDisabled);
   165     do_check_false(t2.appDisabled);
   166     do_check_true(t2.isActive);
   167     do_check_true(isThemeInAddonsList(profileDir, t2.id));
   168     do_check_false(hasFlag(t2.permissions, AddonManager.PERM_CAN_DISABLE));
   169     do_check_false(hasFlag(t2.permissions, AddonManager.PERM_CAN_ENABLE));
   170     do_check_false(gLWThemeChanged);
   172     do_execute_soon(run_test_2);
   173   });
   174 }
   176 // Removing the active theme should fall back to the default (not ideal in this
   177 // case since we don't have the default theme installed)
   178 function run_test_2() {
   179   var dest = profileDir.clone();
   180   dest.append(do_get_expected_addon_name("theme2@tests.mozilla.org"));
   181   dest.remove(true);
   183   restartManager();
   184   do_check_eq(Services.prefs.getCharPref(PREF_GENERAL_SKINS_SELECTEDSKIN), "classic/1.0");
   186   AddonManager.getAddonsByIDs(["theme1@tests.mozilla.org",
   187                                "theme2@tests.mozilla.org"], function([t1, t2]) {
   188     do_check_neq(t1, null);
   189     do_check_true(t1.userDisabled);
   190     do_check_false(t1.appDisabled);
   191     do_check_false(t1.isActive);
   192     do_check_true(isThemeInAddonsList(profileDir, t1.id));
   193     do_check_false(hasFlag(t1.permissions, AddonManager.PERM_CAN_DISABLE));
   194     do_check_true(hasFlag(t1.permissions, AddonManager.PERM_CAN_ENABLE));
   196     do_check_eq(t2, null);
   197     do_check_false(isThemeInAddonsList(profileDir, "theme2@tests.mozilla.org"));
   198     do_check_false(gLWThemeChanged);
   200     do_execute_soon(run_test_3);
   201   });
   202 }
   204 // Installing a lightweight theme should happen instantly and disable the default theme
   205 function run_test_3() {
   206   writeInstallRDFForExtension({
   207     id: "theme2@tests.mozilla.org",
   208     version: "1.0",
   209     name: "Test 1",
   210     internalName: "theme2/1.0",
   211     targetApplications: [{
   212       id: "xpcshell@tests.mozilla.org",
   213       minVersion: "1",
   214       maxVersion: "2"
   215     }]
   216   }, profileDir);
   217   restartManager();
   219   prepare_test({
   220     "1@personas.mozilla.org": [
   221       ["onInstalling", false],
   222       "onInstalled",
   223       ["onEnabling", false],
   224       "onEnabled"
   225     ],
   226     "default@tests.mozilla.org": [
   227       ["onDisabling", false],
   228       "onDisabled",
   229     ]
   230   }, [
   231     "onExternalInstall"
   232   ]);
   234   LightweightThemeManager.currentTheme = {
   235     id: "1",
   236     version: "1",
   237     name: "Test LW Theme",
   238     description: "A test theme",
   239     author: "Mozilla",
   240     homepageURL: "http://localhost:" + gPort + "/data/index.html",
   241     headerURL: "http://localhost:" + gPort + "/data/header.png",
   242     footerURL: "http://localhost:" + gPort + "/data/footer.png",
   243     previewURL: "http://localhost:" + gPort + "/data/preview.png",
   244     iconURL: "http://localhost:" + gPort + "/data/icon.png"
   245   };
   247   ensure_test_completed();
   249   AddonManager.getAddonByID("1@personas.mozilla.org", function(p1) {
   250     do_check_neq(null, p1);
   251     do_check_eq(p1.name, "Test LW Theme");
   252     do_check_eq(p1.version, "1");
   253     do_check_eq(p1.type, "theme");
   254     do_check_eq(p1.description, "A test theme");
   255     do_check_eq(p1.creator, "Mozilla");
   256     do_check_eq(p1.homepageURL, "http://localhost:" + gPort + "/data/index.html");
   257     do_check_eq(p1.iconURL, "http://localhost:" + gPort + "/data/icon.png");
   258     do_check_eq(p1.screenshots.length, 1);
   259     do_check_eq(p1.screenshots[0], "http://localhost:" + gPort + "/data/preview.png");
   260     do_check_false(p1.appDisabled);
   261     do_check_false(p1.userDisabled);
   262     do_check_true(p1.isCompatible);
   263     do_check_true(p1.providesUpdatesSecurely);
   264     do_check_eq(p1.blocklistState, 0);
   265     do_check_true(p1.isActive);
   266     do_check_eq(p1.pendingOperations, 0);
   267     do_check_eq(p1.permissions, AddonManager.PERM_CAN_UNINSTALL | AddonManager.PERM_CAN_DISABLE);
   268     do_check_eq(p1.scope, AddonManager.SCOPE_PROFILE);
   269     do_check_true("isCompatibleWith" in p1);
   270     do_check_true("findUpdates" in p1);
   272     AddonManager.getAddonsByTypes(["theme"], function(addons) {
   273       let seen = false;
   274       addons.forEach(function(a) {
   275         if (a.id == "1@personas.mozilla.org") {
   276           seen = true;
   277         }
   278         else {
   279           dump("Checking theme " + a.id + "\n");
   280           do_check_false(a.isActive);
   281           do_check_true(a.userDisabled);
   282         }
   283       });
   284       do_check_true(seen);
   286       do_check_true(gLWThemeChanged);
   287       gLWThemeChanged = false;
   289       do_execute_soon(run_test_4);
   290     });
   291   });
   292 }
   294 // Installing a second lightweight theme should disable the first with no restart
   295 function run_test_4() {
   296   prepare_test({
   297     "1@personas.mozilla.org": [
   298       ["onDisabling", false],
   299       "onDisabled",
   300     ],
   301     "2@personas.mozilla.org": [
   302       ["onInstalling", false],
   303       "onInstalled",
   304       ["onEnabling", false],
   305       "onEnabled"
   306     ]
   307   }, [
   308     "onExternalInstall"
   309   ]);
   311   LightweightThemeManager.currentTheme = {
   312     id: "2",
   313     version: "1",
   314     name: "Test LW Theme",
   315     description: "A second test theme",
   316     author: "Mozilla",
   317     homepageURL: "http://localhost:" + gPort + "/data/index.html",
   318     headerURL: "http://localhost:" + gPort + "/data/header.png",
   319     footerURL: "http://localhost:" + gPort + "/data/footer.png",
   320     previewURL: "http://localhost:" + gPort + "/data/preview.png",
   321     iconURL: "http://localhost:" + gPort + "/data/icon.png"
   322   };
   324   ensure_test_completed();
   326   AddonManager.getAddonsByIDs(["1@personas.mozilla.org",
   327                                "2@personas.mozilla.org"], function([p1, p2]) {
   328     do_check_neq(null, p2);
   329     do_check_false(p2.appDisabled);
   330     do_check_false(p2.userDisabled);
   331     do_check_true(p2.isActive);
   332     do_check_eq(p2.pendingOperations, 0);
   333     do_check_eq(p2.permissions, AddonManager.PERM_CAN_UNINSTALL | AddonManager.PERM_CAN_DISABLE);
   335     do_check_neq(null, p1);
   336     do_check_false(p1.appDisabled);
   337     do_check_true(p1.userDisabled);
   338     do_check_false(p1.isActive);
   339     do_check_eq(p1.pendingOperations, 0);
   340     do_check_eq(p1.permissions, AddonManager.PERM_CAN_UNINSTALL | AddonManager.PERM_CAN_ENABLE);
   342     AddonManager.getAddonsByTypes(["theme"], function(addons) {
   343       let seen = false;
   344       addons.forEach(function(a) {
   345         if (a.id == "2@personas.mozilla.org") {
   346           seen = true;
   347         }
   348         else {
   349           dump("Checking theme " + a.id + "\n");
   350           do_check_false(a.isActive);
   351           do_check_true(a.userDisabled);
   352         }
   353       });
   354       do_check_true(seen);
   356       do_check_true(gLWThemeChanged);
   357       gLWThemeChanged = false;
   359       do_execute_soon(run_test_5);
   360     });
   361   });
   362 }
   364 // Switching to a custom theme should disable the lightweight theme and require
   365 // a restart. Cancelling that should also be possible.
   366 function run_test_5() {
   367   prepare_test({
   368     "2@personas.mozilla.org": [
   369       ["onDisabling", false],
   370       "onDisabled"
   371     ],
   372     "theme2@tests.mozilla.org": [
   373       ["onEnabling", false],
   374       "onEnabled"
   375     ]
   376   });
   378   AddonManager.getAddonsByIDs(["2@personas.mozilla.org",
   379                                "theme2@tests.mozilla.org"], function([p2, t2]) {
   380     t2.userDisabled = false;
   382     ensure_test_completed();
   384     prepare_test({
   385       "2@personas.mozilla.org": [
   386         "onEnabling"
   387       ],
   388       "theme2@tests.mozilla.org": [
   389         ["onDisabling", false],
   390         "onDisabled"
   391       ]
   392     });
   394     p2.userDisabled = false;
   396     ensure_test_completed();
   398     prepare_test({
   399       "2@personas.mozilla.org": [
   400         ["onOperationCancelled", true]
   401       ],
   402       "theme2@tests.mozilla.org": [
   403         ["onEnabling", false],
   404         "onEnabled"
   405       ]
   406     });
   408     t2.userDisabled = false;
   410     ensure_test_completed();
   412     do_check_true(t2.isActive);
   413     do_check_false(t2.userDisabled);
   414     do_check_false(hasFlag(AddonManager.PENDING_ENABLE, t2.pendingOperations));
   415     do_check_false(p2.isActive);
   416     do_check_true(p2.userDisabled);
   417     do_check_false(hasFlag(AddonManager.PENDING_DISABLE, p2.pendingOperations));
   418     do_check_true(hasFlag(AddonManager.PERM_CAN_ENABLE, p2.permissions));
   419     do_check_true(gLWThemeChanged);
   421     do_execute_soon(check_test_5);
   422   });
   423 }
   425 function check_test_5() {
   426   restartManager();
   428   AddonManager.getAddonsByIDs(["2@personas.mozilla.org",
   429                                "theme2@tests.mozilla.org"], function([p2, t2]) {
   430     do_check_true(t2.isActive);
   431     do_check_false(t2.userDisabled);
   432     do_check_false(hasFlag(AddonManager.PENDING_ENABLE, t2.pendingOperations));
   433     do_check_false(p2.isActive);
   434     do_check_true(p2.userDisabled);
   435     do_check_false(hasFlag(AddonManager.PENDING_DISABLE, p2.pendingOperations));
   437     do_check_true(gLWThemeChanged);
   438     gLWThemeChanged = false;
   440     do_execute_soon(run_test_6);
   441   });
   442 }
   444 // Switching from a custom theme to a lightweight theme should require a restart
   445 function run_test_6() {
   446   prepare_test({
   447     "2@personas.mozilla.org": [
   448       "onEnabling",
   449     ],
   450     "theme2@tests.mozilla.org": [
   451       ["onDisabling", false],
   452       "onDisabled"
   453     ]
   454   });
   456   AddonManager.getAddonsByIDs(["2@personas.mozilla.org",
   457                                "theme2@tests.mozilla.org"], function([p2, t2]) {
   458     p2.userDisabled = false;
   460     ensure_test_completed();
   462     prepare_test({
   463       "2@personas.mozilla.org": [
   464         "onOperationCancelled",
   465       ],
   466       "theme2@tests.mozilla.org": [
   467         ["onEnabling", false],
   468         "onEnabled"
   469       ]
   470     });
   472     t2.userDisabled = false;
   474     ensure_test_completed();
   476     prepare_test({
   477       "2@personas.mozilla.org": [
   478         "onEnabling",
   479       ],
   480       "theme2@tests.mozilla.org": [
   481         ["onDisabling", false],
   482         "onDisabled"
   483       ]
   484     });
   486     p2.userDisabled = false;
   488     ensure_test_completed();
   490     do_check_false(p2.isActive);
   491     do_check_false(p2.userDisabled);
   492     do_check_true(hasFlag(AddonManager.PENDING_ENABLE, p2.pendingOperations));
   493     do_check_false(t2.isActive);
   494     do_check_true(t2.userDisabled);
   495     do_check_false(hasFlag(AddonManager.PENDING_DISABLE, t2.pendingOperations));
   496     do_check_false(gLWThemeChanged);
   498     do_execute_soon(check_test_6);
   499   });
   500 }
   502 function check_test_6() {
   503   restartManager();
   505   AddonManager.getAddonsByIDs(["2@personas.mozilla.org",
   506                                "theme2@tests.mozilla.org"], function([p2, t2]) {
   507     do_check_true(p2.isActive);
   508     do_check_false(p2.userDisabled);
   509     do_check_false(hasFlag(AddonManager.PENDING_ENABLE, p2.pendingOperations));
   510     do_check_false(t2.isActive);
   511     do_check_true(t2.userDisabled);
   512     do_check_false(hasFlag(AddonManager.PENDING_DISABLE, t2.pendingOperations));
   514     do_check_true(gLWThemeChanged);
   515     gLWThemeChanged = false;
   517     do_execute_soon(run_test_7);
   518   });
   519 }
   521 // Uninstalling a lightweight theme should not require a restart
   522 function run_test_7() {
   523   prepare_test({
   524     "1@personas.mozilla.org": [
   525       ["onUninstalling", false],
   526       "onUninstalled"
   527     ]
   528   });
   530   AddonManager.getAddonByID("1@personas.mozilla.org", function(p1) {
   531     p1.uninstall();
   533     ensure_test_completed();
   534     do_check_eq(LightweightThemeManager.usedThemes.length, 1);
   535     do_check_false(gLWThemeChanged);
   537     do_execute_soon(run_test_8);
   538   });
   539 }
   541 // Uninstalling a lightweight theme in use should not require a restart and it
   542 // should reactivate the default theme
   543 // Also, uninstalling a lightweight theme in use should send a
   544 // "lightweight-theme-styling-update" notification through the observer service
   545 function run_test_8() {
   546   prepare_test({
   547     "2@personas.mozilla.org": [
   548       ["onUninstalling", false],
   549       "onUninstalled"
   550     ],
   551     "default@tests.mozilla.org": [
   552       ["onEnabling", false],
   553       "onEnabled"
   554     ]
   555   });
   557   AddonManager.getAddonByID("2@personas.mozilla.org", function(p2) {
   558     p2.uninstall();
   560     ensure_test_completed();
   561     do_check_eq(LightweightThemeManager.usedThemes.length, 0);
   563     do_check_true(gLWThemeChanged);
   564     gLWThemeChanged = false;
   566     do_execute_soon(run_test_9);
   567   });
   568 }
   570 // Uninstalling a theme not in use should not require a restart
   571 function run_test_9() {
   572   AddonManager.getAddonByID("theme1@tests.mozilla.org", function(t1) {
   573     prepare_test({
   574       "theme1@tests.mozilla.org": [
   575         ["onUninstalling", false],
   576         "onUninstalled"
   577       ]
   578     });
   580     t1.uninstall();
   582     ensure_test_completed();
   584     AddonManager.getAddonByID("theme1@tests.mozilla.org", function(newt1) {
   585       do_check_eq(newt1, null);
   586       do_check_false(gLWThemeChanged);
   588       do_execute_soon(run_test_10);
   589     });
   590   });
   591 }
   593 // Uninstalling a custom theme in use should require a restart
   594 function run_test_10() {
   595   AddonManager.getAddonByID("theme2@tests.mozilla.org", callback_soon(function(oldt2) {
   596     prepare_test({
   597       "theme2@tests.mozilla.org": [
   598         ["onEnabling", false],
   599         "onEnabled"
   600       ],
   601       "default@tests.mozilla.org": [
   602         ["onDisabling", false],
   603         "onDisabled"
   604       ]
   605     });
   607     oldt2.userDisabled = false;
   609     ensure_test_completed();
   611     restartManager();
   613     AddonManager.getAddonsByIDs(["default@tests.mozilla.org",
   614                                  "theme2@tests.mozilla.org"],
   615                                  callback_soon(function([d, t2]) {
   616       do_check_true(t2.isActive);
   617       do_check_false(t2.userDisabled);
   618       do_check_false(t2.appDisabled);
   619       do_check_false(d.isActive);
   620       do_check_true(d.userDisabled);
   621       do_check_false(d.appDisabled);
   623       prepare_test({
   624         "theme2@tests.mozilla.org": [
   625           ["onUninstalling", false],
   626           "onUninstalled"
   627         ],
   628         "default@tests.mozilla.org": [
   629           ["onEnabling", false],
   630           "onEnabled"
   631         ]
   632       });
   634       t2.uninstall();
   636       ensure_test_completed();
   637       do_check_false(gLWThemeChanged);
   639       restartManager();
   641       do_execute_soon(run_test_11);
   642     }));
   643   }));
   644 }
   646 // Installing a custom theme not in use should not require a restart
   647 function run_test_11() {
   648   prepare_test({ }, [
   649     "onNewInstall"
   650   ]);
   652   AddonManager.getInstallForFile(do_get_addon("test_theme"), function(install) {
   653     ensure_test_completed();
   655     do_check_neq(install, null);
   656     do_check_eq(install.type, "theme");
   657     do_check_eq(install.version, "1.0");
   658     do_check_eq(install.name, "Test Theme 1");
   659     do_check_eq(install.state, AddonManager.STATE_DOWNLOADED);
   661     prepare_test({
   662       "theme1@tests.mozilla.org": [
   663         ["onInstalling", false],
   664         "onInstalled"
   665       ]
   666     }, [
   667       "onInstallStarted",
   668       "onInstallEnded",
   669     ], callback_soon(check_test_11));
   670     install.install();
   671   });
   672 }
   674 function check_test_11() {
   675   restartManager();
   676   AddonManager.getAddonByID("theme1@tests.mozilla.org", function(t1) {
   677     do_check_neq(t1, null);
   678     var previewSpec = do_get_addon_root_uri(profileDir, "theme1@tests.mozilla.org") + "preview.png";
   679     do_check_eq(t1.screenshots.length, 1);
   680     do_check_eq(t1.screenshots[0], previewSpec);
   681     do_check_false(gLWThemeChanged);
   683     do_execute_soon(run_test_12);
   684   });
   685 }
   687 // Updating a custom theme not in use should not require a restart
   688 function run_test_12() {
   689   prepare_test({ }, [
   690     "onNewInstall"
   691   ]);
   693   AddonManager.getInstallForFile(do_get_addon("test_theme"), function(install) {
   694     ensure_test_completed();
   696     do_check_neq(install, null);
   697     do_check_eq(install.type, "theme");
   698     do_check_eq(install.version, "1.0");
   699     do_check_eq(install.name, "Test Theme 1");
   700     do_check_eq(install.state, AddonManager.STATE_DOWNLOADED);
   702     prepare_test({
   703       "theme1@tests.mozilla.org": [
   704         ["onInstalling", false],
   705         "onInstalled"
   706       ]
   707     }, [
   708       "onInstallStarted",
   709       "onInstallEnded",
   710     ], check_test_12);
   711     install.install();
   712   });
   713 }
   715 function check_test_12() {
   716   AddonManager.getAddonByID("theme1@tests.mozilla.org", function(t1) {
   717     do_check_neq(t1, null);
   718     do_check_false(gLWThemeChanged);
   720     do_execute_soon(run_test_13);
   721   });
   722 }
   724 // Updating a custom theme in use should require a restart
   725 function run_test_13() {
   726   AddonManager.getAddonByID("theme1@tests.mozilla.org", callback_soon(function(t1) {
   727     prepare_test({
   728       "theme1@tests.mozilla.org": [
   729         ["onEnabling", false],
   730         "onEnabled"
   731       ],
   732       "default@tests.mozilla.org": [
   733         ["onDisabling", false],
   734         "onDisabled"
   735       ]
   736     });
   738     t1.userDisabled = false;
   739     ensure_test_completed();
   740     restartManager();
   742     prepare_test({ }, [
   743       "onNewInstall"
   744     ]);
   746     AddonManager.getInstallForFile(do_get_addon("test_theme"), function(install) {
   747       ensure_test_completed();
   749       do_check_neq(install, null);
   750       do_check_eq(install.type, "theme");
   751       do_check_eq(install.version, "1.0");
   752       do_check_eq(install.name, "Test Theme 1");
   753       do_check_eq(install.state, AddonManager.STATE_DOWNLOADED);
   755       prepare_test({
   756         "theme1@tests.mozilla.org": [
   757           "onInstalling",
   758         ]
   759       }, [
   760         "onInstallStarted",
   761         "onInstallEnded",
   762       ], callback_soon(check_test_13));
   763       install.install();
   764     });
   765   }));
   766 }
   768 function check_test_13() {
   769   restartManager();
   771   AddonManager.getAddonByID("theme1@tests.mozilla.org", function(t1) {
   772     do_check_neq(t1, null);
   773     do_check_true(t1.isActive);
   774     do_check_false(gLWThemeChanged);
   775     t1.uninstall();
   777     do_execute_soon(run_test_14);
   778   });
   779 }
   781 // Switching from a lightweight theme to the default theme should not require
   782 // a restart
   783 function run_test_14() {
   784   restartManager();
   785   LightweightThemeManager.currentTheme = {
   786     id: "1",
   787     version: "1",
   788     name: "Test LW Theme",
   789     description: "A test theme",
   790     author: "Mozilla",
   791     homepageURL: "http://localhost:" + gPort + "/data/index.html",
   792     headerURL: "http://localhost:" + gPort + "/data/header.png",
   793     footerURL: "http://localhost:" + gPort + "/data/footer.png",
   794     previewURL: "http://localhost:" + gPort + "/data/preview.png",
   795     iconURL: "http://localhost:" + gPort + "/data/icon.png"
   796   };
   798   AddonManager.getAddonByID("default@tests.mozilla.org", function(d) {
   799     do_check_true(d.userDisabled);
   800     do_check_false(d.isActive);
   802     prepare_test({
   803       "1@personas.mozilla.org": [
   804         ["onDisabling", false],
   805         "onDisabled"
   806       ],
   807       "default@tests.mozilla.org": [
   808         ["onEnabling", false],
   809         "onEnabled"
   810       ]
   811     });
   813     d.userDisabled = false;
   814     ensure_test_completed();
   816     do_check_false(d.userDisabled);
   817     do_check_true(d.isActive);
   819     do_check_true(gLWThemeChanged);
   820     gLWThemeChanged = false;
   822     end_test();
   823   });
   824 }

mercurial