michael@0: /* Any copyright is dedicated to the Public Domain. michael@0: * http://creativecommons.org/publicdomain/zero/1.0/ michael@0: */ michael@0: michael@0: // This verifies that language packs can be used without restarts. michael@0: Components.utils.import("resource://gre/modules/Services.jsm"); michael@0: michael@0: // Enable loading extensions from the user scopes michael@0: Services.prefs.setIntPref("extensions.enabledScopes", michael@0: AddonManager.SCOPE_PROFILE + AddonManager.SCOPE_USER); michael@0: // Enable installing distribution add-ons michael@0: Services.prefs.setBoolPref("extensions.installDistroAddons", true); michael@0: michael@0: createAppInfo("xpcshell@tests.mozilla.org", "XPCShell", "1", "1.9.2"); michael@0: michael@0: const profileDir = gProfD.clone(); michael@0: profileDir.append("extensions"); michael@0: const userExtDir = gProfD.clone(); michael@0: userExtDir.append("extensions2"); michael@0: userExtDir.append(gAppInfo.ID); michael@0: registerDirectory("XREUSysExt", userExtDir.parent); michael@0: const distroDir = gProfD.clone(); michael@0: distroDir.append("distribution"); michael@0: distroDir.append("extensions"); michael@0: registerDirectory("XREAppDist", distroDir.parent); michael@0: michael@0: var chrome = Components.classes["@mozilla.org/chrome/chrome-registry;1"] michael@0: .getService(Components.interfaces.nsIXULChromeRegistry); michael@0: michael@0: function do_unregister_manifest() { michael@0: let path = getFileForAddon(profileDir, "langpack-x-testing@tests.mozilla.org"); michael@0: Components.manager.removeBootstrappedManifestLocation(path); michael@0: } michael@0: michael@0: function do_check_locale_not_registered(provider) { michael@0: let didThrow = false; michael@0: try { michael@0: chrome.getSelectedLocale(provider); michael@0: } catch (e) { michael@0: didThrow = true; michael@0: } michael@0: do_check_true(didThrow); michael@0: } michael@0: michael@0: function run_test() { michael@0: do_test_pending(); michael@0: michael@0: startupManager(); michael@0: michael@0: run_test_1(); michael@0: } michael@0: michael@0: // Tests that installing doesn't require a restart michael@0: function run_test_1() { michael@0: do_check_locale_not_registered("test-langpack"); michael@0: michael@0: prepare_test({ }, [ michael@0: "onNewInstall" michael@0: ]); michael@0: michael@0: AddonManager.getInstallForFile(do_get_addon("test_langpack"), function(install) { michael@0: ensure_test_completed(); michael@0: michael@0: do_check_neq(install, null); michael@0: do_check_eq(install.type, "locale"); michael@0: do_check_eq(install.version, "1.0"); michael@0: do_check_eq(install.name, "Language Pack x-testing"); michael@0: do_check_eq(install.state, AddonManager.STATE_DOWNLOADED); michael@0: do_check_true(install.addon.hasResource("install.rdf")); michael@0: do_check_false(install.addon.hasResource("bootstrap.js")); michael@0: do_check_eq(install.addon.operationsRequiringRestart & michael@0: AddonManager.OP_NEEDS_RESTART_INSTALL, 0); michael@0: michael@0: let addon = install.addon; michael@0: prepare_test({ michael@0: "langpack-x-testing@tests.mozilla.org": [ michael@0: ["onInstalling", false], michael@0: "onInstalled" michael@0: ] michael@0: }, [ michael@0: "onInstallStarted", michael@0: "onInstallEnded", michael@0: ], function() { michael@0: do_check_true(addon.hasResource("install.rdf")); michael@0: // spin to let the startup complete michael@0: do_execute_soon(check_test_1); michael@0: }); michael@0: install.install(); michael@0: }); michael@0: } michael@0: michael@0: function check_test_1() { michael@0: AddonManager.getAllInstalls(function(installs) { michael@0: // There should be no active installs now since the install completed and michael@0: // doesn't require a restart. michael@0: do_check_eq(installs.length, 0); michael@0: michael@0: AddonManager.getAddonByID("langpack-x-testing@tests.mozilla.org", function(b1) { michael@0: do_check_neq(b1, null); michael@0: do_check_eq(b1.version, "1.0"); michael@0: do_check_false(b1.appDisabled); michael@0: do_check_false(b1.userDisabled); michael@0: do_check_true(b1.isActive); michael@0: // check chrome reg that language pack is registered michael@0: do_check_eq(chrome.getSelectedLocale("test-langpack"), "x-testing"); michael@0: do_check_true(b1.hasResource("install.rdf")); michael@0: do_check_false(b1.hasResource("bootstrap.js")); michael@0: michael@0: let dir = do_get_addon_root_uri(profileDir, "langpack-x-testing@tests.mozilla.org"); michael@0: michael@0: AddonManager.getAddonsWithOperationsByTypes(null, function(list) { michael@0: do_check_eq(list.length, 0); michael@0: michael@0: run_test_2(); michael@0: }); michael@0: }); michael@0: }); michael@0: } michael@0: michael@0: // Tests that disabling doesn't require a restart michael@0: function run_test_2() { michael@0: AddonManager.getAddonByID("langpack-x-testing@tests.mozilla.org", function(b1) { michael@0: prepare_test({ michael@0: "langpack-x-testing@tests.mozilla.org": [ michael@0: ["onDisabling", false], michael@0: "onDisabled" michael@0: ] michael@0: }); michael@0: michael@0: do_check_eq(b1.operationsRequiringRestart & michael@0: AddonManager.OP_NEEDS_RESTART_DISABLE, 0); michael@0: b1.userDisabled = true; michael@0: ensure_test_completed(); michael@0: michael@0: do_check_neq(b1, null); michael@0: do_check_eq(b1.version, "1.0"); michael@0: do_check_false(b1.appDisabled); michael@0: do_check_true(b1.userDisabled); michael@0: do_check_false(b1.isActive); michael@0: // check chrome reg that language pack is not registered michael@0: do_check_locale_not_registered("test-langpack"); michael@0: michael@0: AddonManager.getAddonByID("langpack-x-testing@tests.mozilla.org", function(newb1) { michael@0: do_check_neq(newb1, null); michael@0: do_check_eq(newb1.version, "1.0"); michael@0: do_check_false(newb1.appDisabled); michael@0: do_check_true(newb1.userDisabled); michael@0: do_check_false(newb1.isActive); michael@0: michael@0: do_execute_soon(run_test_3); michael@0: }); michael@0: }); michael@0: } michael@0: michael@0: // Test that restarting doesn't accidentally re-enable michael@0: function run_test_3() { michael@0: shutdownManager(); michael@0: startupManager(false); michael@0: // check chrome reg that language pack is not registered michael@0: do_check_locale_not_registered("test-langpack"); michael@0: michael@0: AddonManager.getAddonByID("langpack-x-testing@tests.mozilla.org", function(b1) { michael@0: do_check_neq(b1, null); michael@0: do_check_eq(b1.version, "1.0"); michael@0: do_check_false(b1.appDisabled); michael@0: do_check_true(b1.userDisabled); michael@0: do_check_false(b1.isActive); michael@0: michael@0: run_test_4(); michael@0: }); michael@0: } michael@0: michael@0: // Tests that enabling doesn't require a restart michael@0: function run_test_4() { michael@0: AddonManager.getAddonByID("langpack-x-testing@tests.mozilla.org", function(b1) { michael@0: prepare_test({ michael@0: "langpack-x-testing@tests.mozilla.org": [ michael@0: ["onEnabling", false], michael@0: "onEnabled" michael@0: ] michael@0: }); michael@0: michael@0: do_check_eq(b1.operationsRequiringRestart & michael@0: AddonManager.OP_NEEDS_RESTART_ENABLE, 0); michael@0: b1.userDisabled = false; michael@0: ensure_test_completed(); michael@0: michael@0: do_check_neq(b1, null); michael@0: do_check_eq(b1.version, "1.0"); michael@0: do_check_false(b1.appDisabled); michael@0: do_check_false(b1.userDisabled); michael@0: do_check_true(b1.isActive); michael@0: // check chrome reg that language pack is registered michael@0: do_check_eq(chrome.getSelectedLocale("test-langpack"), "x-testing"); michael@0: michael@0: AddonManager.getAddonByID("langpack-x-testing@tests.mozilla.org", function(newb1) { michael@0: do_check_neq(newb1, null); michael@0: do_check_eq(newb1.version, "1.0"); michael@0: do_check_false(newb1.appDisabled); michael@0: do_check_false(newb1.userDisabled); michael@0: do_check_true(newb1.isActive); michael@0: michael@0: do_execute_soon(run_test_5); michael@0: }); michael@0: }); michael@0: } michael@0: michael@0: // Tests that a restart shuts down and restarts the add-on michael@0: function run_test_5() { michael@0: shutdownManager(); michael@0: do_unregister_manifest(); michael@0: // check chrome reg that language pack is not registered michael@0: do_check_locale_not_registered("test-langpack"); michael@0: startupManager(false); michael@0: // check chrome reg that language pack is registered michael@0: do_check_eq(chrome.getSelectedLocale("test-langpack"), "x-testing"); michael@0: michael@0: AddonManager.getAddonByID("langpack-x-testing@tests.mozilla.org", function(b1) { michael@0: do_check_neq(b1, null); michael@0: do_check_eq(b1.version, "1.0"); michael@0: do_check_false(b1.appDisabled); michael@0: do_check_false(b1.userDisabled); michael@0: do_check_true(b1.isActive); michael@0: do_check_false(isExtensionInAddonsList(profileDir, b1.id)); michael@0: michael@0: run_test_7(); michael@0: }); michael@0: } michael@0: michael@0: // Tests that uninstalling doesn't require a restart michael@0: function run_test_7() { michael@0: AddonManager.getAddonByID("langpack-x-testing@tests.mozilla.org", function(b1) { michael@0: prepare_test({ michael@0: "langpack-x-testing@tests.mozilla.org": [ michael@0: ["onUninstalling", false], michael@0: "onUninstalled" michael@0: ] michael@0: }); michael@0: michael@0: do_check_eq(b1.operationsRequiringRestart & michael@0: AddonManager.OP_NEEDS_RESTART_UNINSTALL, 0); michael@0: b1.uninstall(); michael@0: michael@0: check_test_7(); michael@0: }); michael@0: } michael@0: michael@0: function check_test_7() { michael@0: ensure_test_completed(); michael@0: // check chrome reg that language pack is not registered michael@0: do_check_locale_not_registered("test-langpack"); michael@0: michael@0: AddonManager.getAddonByID("langpack-x-testing@tests.mozilla.org", michael@0: callback_soon(function(b1) { michael@0: do_check_eq(b1, null); michael@0: michael@0: restartManager(); michael@0: michael@0: AddonManager.getAddonByID("langpack-x-testing@tests.mozilla.org", function(newb1) { michael@0: do_check_eq(newb1, null); michael@0: michael@0: do_execute_soon(run_test_8); michael@0: }); michael@0: })); michael@0: } michael@0: michael@0: // Tests that a locale detected in the profile starts working immediately michael@0: function run_test_8() { michael@0: shutdownManager(); michael@0: michael@0: manuallyInstall(do_get_addon("test_langpack"), profileDir, "langpack-x-testing@tests.mozilla.org"); michael@0: michael@0: startupManager(false); michael@0: michael@0: AddonManager.getAddonByID("langpack-x-testing@tests.mozilla.org", michael@0: callback_soon(function(b1) { michael@0: do_check_neq(b1, null); michael@0: do_check_eq(b1.version, "1.0"); michael@0: do_check_false(b1.appDisabled); michael@0: do_check_false(b1.userDisabled); michael@0: do_check_true(b1.isActive); michael@0: // check chrome reg that language pack is registered michael@0: do_check_eq(chrome.getSelectedLocale("test-langpack"), "x-testing"); michael@0: do_check_true(b1.hasResource("install.rdf")); michael@0: do_check_false(b1.hasResource("bootstrap.js")); michael@0: michael@0: shutdownManager(); michael@0: do_unregister_manifest(); michael@0: // check chrome reg that language pack is not registered michael@0: do_check_locale_not_registered("test-langpack"); michael@0: startupManager(false); michael@0: // check chrome reg that language pack is registered michael@0: do_check_eq(chrome.getSelectedLocale("test-langpack"), "x-testing"); michael@0: michael@0: AddonManager.getAddonByID("langpack-x-testing@tests.mozilla.org", function(b2) { michael@0: prepare_test({ michael@0: "langpack-x-testing@tests.mozilla.org": [ michael@0: ["onUninstalling", false], michael@0: "onUninstalled" michael@0: ] michael@0: }); michael@0: michael@0: b2.uninstall(); michael@0: ensure_test_completed(); michael@0: do_execute_soon(run_test_9); michael@0: }); michael@0: })); michael@0: } michael@0: michael@0: // Tests that a locale from distribution/extensions gets installed and starts michael@0: // working immediately michael@0: function run_test_9() { michael@0: shutdownManager(); michael@0: manuallyInstall(do_get_addon("test_langpack"), distroDir, "langpack-x-testing@tests.mozilla.org"); michael@0: gAppInfo.version = "2.0"; michael@0: startupManager(true); michael@0: michael@0: AddonManager.getAddonByID("langpack-x-testing@tests.mozilla.org", callback_soon(function(b1) { michael@0: do_check_neq(b1, null); michael@0: do_check_eq(b1.version, "1.0"); michael@0: do_check_false(b1.appDisabled); michael@0: do_check_false(b1.userDisabled); michael@0: do_check_true(b1.isActive); michael@0: // check chrome reg that language pack is registered michael@0: do_check_eq(chrome.getSelectedLocale("test-langpack"), "x-testing"); michael@0: do_check_true(b1.hasResource("install.rdf")); michael@0: do_check_false(b1.hasResource("bootstrap.js")); michael@0: michael@0: shutdownManager(); michael@0: do_unregister_manifest(); michael@0: // check chrome reg that language pack is not registered michael@0: do_check_locale_not_registered("test-langpack"); michael@0: startupManager(false); michael@0: // check chrome reg that language pack is registered michael@0: do_check_eq(chrome.getSelectedLocale("test-langpack"), "x-testing"); michael@0: michael@0: do_test_finished(); michael@0: })); michael@0: }