# HG changeset patch # User Axel Hecht # Date 1348128099 -7200 # Node ID 38adce439c3c0b5fd7a035dc53ffd853e80f87ba # Parent 08d435dedc7fc19bfad3d31c62daec9013525c6d bug 677092, make language packs restartless, r=Unfocused Make language packs just trigger the chrome registration hooks, and disable picking up bootstrap.js, and declare them restartless. diff --git a/toolkit/mozapps/extensions/XPIProvider.jsm b/toolkit/mozapps/extensions/XPIProvider.jsm --- a/toolkit/mozapps/extensions/XPIProvider.jsm +++ b/toolkit/mozapps/extensions/XPIProvider.jsm @@ -740,8 +740,8 @@ } } else { - // spell check dictionaries never require a restart - if (addon.type == "dictionary") + // spell check dictionaries and language packs never require a restart + if (addon.type == "dictionary" || addon.type == "locale") addon.bootstrap = true; // Only extensions are allowed to provide an optionsURL, optionsType or aboutURL. For @@ -3695,6 +3695,11 @@ Components.manager.addBootstrappedManifestLocation(aFile); try { + // Don't call bootstrap.js methods for language packs, + // they only contain chrome. + if (aType == "locale") + return; + // Load the scope if it hasn't already been loaded if (!(aId in this.bootstrapScopes)) this.loadBootstrapScope(aId, aFile, aVersion, aType); diff --git a/toolkit/mozapps/extensions/test/addons/test_chromemanifest_1/chrome.manifest b/toolkit/mozapps/extensions/test/addons/test_langpack/chrome.manifest copy from toolkit/mozapps/extensions/test/addons/test_chromemanifest_1/chrome.manifest copy to toolkit/mozapps/extensions/test/addons/test_langpack/chrome.manifest --- a/toolkit/mozapps/extensions/test/addons/test_chromemanifest_1/chrome.manifest +++ b/toolkit/mozapps/extensions/test/addons/test_langpack/chrome.manifest @@ -1,6 +1,1 @@ -content test-addon-1 chrome/content -# comment! - locale test-addon-1 en-US locale/en-US - # commentaire! - locale test-addon-1 fr-FR locale/fr-FR -overlay chrome://browser/content/browser.xul chrome://test-addon-1/content/overlay.xul +locale test-langpack x-testing locale/x-testing diff --git a/toolkit/mozapps/extensions/test/addons/test_chromemanifest_1/install.rdf b/toolkit/mozapps/extensions/test/addons/test_langpack/install.rdf copy from toolkit/mozapps/extensions/test/addons/test_chromemanifest_1/install.rdf copy to toolkit/mozapps/extensions/test/addons/test_langpack/install.rdf --- a/toolkit/mozapps/extensions/test/addons/test_chromemanifest_1/install.rdf +++ b/toolkit/mozapps/extensions/test/addons/test_langpack/install.rdf @@ -4,12 +4,12 @@ xmlns:em="http://www.mozilla.org/2004/em-rdf#"> - addon1@tests.mozilla.org + langpack-x-testing@tests.mozilla.org + 8 1.0 - Test 1 - Test Description + Language Pack x-testing diff --git a/toolkit/mozapps/extensions/test/xpcshell/test_dictionary.js b/toolkit/mozapps/extensions/test/xpcshell/test_langpack.js copy from toolkit/mozapps/extensions/test/xpcshell/test_dictionary.js copy to toolkit/mozapps/extensions/test/xpcshell/test_langpack.js --- a/toolkit/mozapps/extensions/test/xpcshell/test_dictionary.js +++ b/toolkit/mozapps/extensions/test/xpcshell/test_langpack.js @@ -2,7 +2,7 @@ * http://creativecommons.org/publicdomain/zero/1.0/ */ -// This verifies that bootstrappable add-ons can be used without restarts. +// This verifies that language packs can be used without restarts. Components.utils.import("resource://gre/modules/Services.jsm"); // Enable loading extensions from the user scopes @@ -18,91 +18,22 @@ userExtDir.append(gAppInfo.ID); registerDirectory("XREUSysExt", userExtDir.parent); -Components.utils.import("resource://testing-common/httpd.js"); -var testserver; +var chrome = Components.classes["@mozilla.org/chrome/chrome-registry;1"] + .getService(Components.interfaces.nsIXULChromeRegistry); -/** - * This object is both a factory and an mozISpellCheckingEngine implementation (so, it - * is de-facto a service). It's also an interface requestor that gives out - * itself when asked for mozISpellCheckingEngine. - */ -var HunspellEngine = { - dictionaryDirs: [], - listener: null, - - QueryInterface: function hunspell_qi(iid) { - if (iid.equals(Components.interfaces.nsISupports) || - iid.equals(Components.interfaces.nsIFactory) || - iid.equals(Components.interfaces.mozISpellCheckingEngine)) - return this; - throw Components.results.NS_ERROR_NO_INTERFACE; - }, - createInstance: function hunspell_ci(outer, iid) { - if (outer) - throw Components.results.NS_ERROR_NO_AGGREGATION; - return this.QueryInterface(iid); - }, - lockFactory: function hunspell_lockf(lock) { - throw Components.results.NS_ERROR_NOT_IMPLEMENTED; - }, - - addDirectory: function hunspell_addDirectory(dir) { - this.dictionaryDirs.push(dir); - if (this.listener) - this.listener("addDirectory"); - }, - - removeDirectory: function hunspell_addDirectory(dir) { - this.dictionaryDirs.splice(this.dictionaryDirs.indexOf(dir), 1); - if (this.listener) - this.listener("removeDirectory"); - }, - - getInterface: function hunspell_gi(iid) { - if (iid.equals(Components.interfaces.mozISpellCheckingEngine)) - return this; - throw Components.results.NS_ERROR_NO_INTERFACE; - }, - - contractID: "@mozilla.org/spellchecker/engine;1", - classID: Components.ID("{6f3c63bc-a4fd-449b-9a58-a2d9bd972cce}"), - - activate: function hunspell_activate() { - this.origClassID = Components.manager.nsIComponentRegistrar - .contractIDToCID(this.contractID); - this.origFactory = Components.manager - .getClassObject(Components.classes[this.contractID], - Components.interfaces.nsIFactory); - - Components.manager.nsIComponentRegistrar - .unregisterFactory(this.origClassID, this.origFactory); - Components.manager.nsIComponentRegistrar.registerFactory(this.classID, - "Test hunspell", this.contractID, this); - }, - - deactivate: function hunspell_deactivate() { - Components.manager.nsIComponentRegistrar.unregisterFactory(this.classID, this); - Components.manager.nsIComponentRegistrar.registerFactory(this.origClassID, - "Hunspell", this.contractID, this.origFactory); - }, - - isDictionaryEnabled: function hunspell_isDictionaryEnabled(name) { - return this.dictionaryDirs.some(function(dir) { - var dic = dir.clone(); - dic.append(name); - return dic.exists(); - }); +function do_check_locale_not_registered(provider) { + let didThrow = false; + try { + chrome.getSelectedLocale(provider); + } catch (e) { + didThrow = true; } -}; + do_check_true(didThrow); +} function run_test() { do_test_pending(); - // Create and configure the HTTP server. - testserver = new HttpServer(); - testserver.registerDirectory("/addons/", do_get_file("addons")); - testserver.start(4444); - startupManager(); run_test_1(); @@ -114,25 +45,22 @@ "onNewInstall" ]); - HunspellEngine.activate(); - - AddonManager.getInstallForFile(do_get_addon("test_dictionary"), function(install) { + AddonManager.getInstallForFile(do_get_addon("test_langpack"), function(install) { ensure_test_completed(); do_check_neq(install, null); - do_check_eq(install.type, "dictionary"); + do_check_eq(install.type, "locale"); do_check_eq(install.version, "1.0"); - do_check_eq(install.name, "Test Dictionary"); + do_check_eq(install.name, "Language Pack x-testing"); do_check_eq(install.state, AddonManager.STATE_DOWNLOADED); do_check_true(install.addon.hasResource("install.rdf")); do_check_false(install.addon.hasResource("bootstrap.js")); do_check_eq(install.addon.operationsRequiringRestart & AddonManager.OP_NEEDS_RESTART_INSTALL, 0); - do_check_not_in_crash_annotation("ab-CD@dictionaries.addons.mozilla.org", "1.0"); let addon = install.addon; prepare_test({ - "ab-CD@dictionaries.addons.mozilla.org": [ + "langpack-x-testing@tests.mozilla.org": [ ["onInstalling", false], "onInstalled" ] @@ -141,11 +69,7 @@ "onInstallEnded", ], function() { do_check_true(addon.hasResource("install.rdf")); - HunspellEngine.listener = function(aEvent) { - HunspellEngine.listener = null; - do_check_eq(aEvent, "addDirectory"); - check_test_1(); - }; + check_test_1(); }); install.install(); }); @@ -157,18 +81,18 @@ // doesn't require a restart. do_check_eq(installs.length, 0); - AddonManager.getAddonByID("ab-CD@dictionaries.addons.mozilla.org", function(b1) { + AddonManager.getAddonByID("langpack-x-testing@tests.mozilla.org", function(b1) { do_check_neq(b1, null); do_check_eq(b1.version, "1.0"); do_check_false(b1.appDisabled); do_check_false(b1.userDisabled); do_check_true(b1.isActive); - do_check_true(HunspellEngine.isDictionaryEnabled("ab-CD.dic")); + // check chrome reg that language pack is registered + do_check_eq(chrome.getSelectedLocale("test-langpack"), "x-testing"); do_check_true(b1.hasResource("install.rdf")); do_check_false(b1.hasResource("bootstrap.js")); - do_check_in_crash_annotation("ab-CD@dictionaries.addons.mozilla.org", "1.0"); - let dir = do_get_addon_root_uri(profileDir, "ab-CD@dictionaries.addons.mozilla.org"); + let dir = do_get_addon_root_uri(profileDir, "langpack-x-testing@tests.mozilla.org"); AddonManager.getAddonsWithOperationsByTypes(null, function(list) { do_check_eq(list.length, 0); @@ -181,9 +105,9 @@ // Tests that disabling doesn't require a restart function run_test_2() { - AddonManager.getAddonByID("ab-CD@dictionaries.addons.mozilla.org", function(b1) { + AddonManager.getAddonByID("langpack-x-testing@tests.mozilla.org", function(b1) { prepare_test({ - "ab-CD@dictionaries.addons.mozilla.org": [ + "langpack-x-testing@tests.mozilla.org": [ ["onDisabling", false], "onDisabled" ] @@ -199,10 +123,10 @@ do_check_false(b1.appDisabled); do_check_true(b1.userDisabled); do_check_false(b1.isActive); - do_check_false(HunspellEngine.isDictionaryEnabled("ab-CD.dic")); - do_check_not_in_crash_annotation("ab-CD@dictionaries.addons.mozilla.org", "1.0"); + // check chrome reg that language pack is not registered + do_check_locale_not_registered("test-langpack"); - AddonManager.getAddonByID("ab-CD@dictionaries.addons.mozilla.org", function(newb1) { + AddonManager.getAddonByID("langpack-x-testing@tests.mozilla.org", function(newb1) { do_check_neq(newb1, null); do_check_eq(newb1.version, "1.0"); do_check_false(newb1.appDisabled); @@ -217,12 +141,11 @@ // Test that restarting doesn't accidentally re-enable function run_test_3() { shutdownManager(); - do_check_false(HunspellEngine.isDictionaryEnabled("ab-CD.dic")); startupManager(false); - do_check_false(HunspellEngine.isDictionaryEnabled("ab-CD.dic")); - do_check_not_in_crash_annotation("ab-CD@dictionaries.addons.mozilla.org", "1.0"); + // check chrome reg that language pack is not registered + do_check_locale_not_registered("test-langpack"); - AddonManager.getAddonByID("ab-CD@dictionaries.addons.mozilla.org", function(b1) { + AddonManager.getAddonByID("langpack-x-testing@tests.mozilla.org", function(b1) { do_check_neq(b1, null); do_check_eq(b1.version, "1.0"); do_check_false(b1.appDisabled); @@ -235,9 +158,9 @@ // Tests that enabling doesn't require a restart function run_test_4() { - AddonManager.getAddonByID("ab-CD@dictionaries.addons.mozilla.org", function(b1) { + AddonManager.getAddonByID("langpack-x-testing@tests.mozilla.org", function(b1) { prepare_test({ - "ab-CD@dictionaries.addons.mozilla.org": [ + "langpack-x-testing@tests.mozilla.org": [ ["onEnabling", false], "onEnabled" ] @@ -253,10 +176,10 @@ do_check_false(b1.appDisabled); do_check_false(b1.userDisabled); do_check_true(b1.isActive); - do_check_true(HunspellEngine.isDictionaryEnabled("ab-CD.dic")); - do_check_in_crash_annotation("ab-CD@dictionaries.addons.mozilla.org", "1.0"); + // check chrome reg that language pack is registered + do_check_eq(chrome.getSelectedLocale("test-langpack"), "x-testing"); - AddonManager.getAddonByID("ab-CD@dictionaries.addons.mozilla.org", function(newb1) { + AddonManager.getAddonByID("langpack-x-testing@tests.mozilla.org", function(newb1) { do_check_neq(newb1, null); do_check_eq(newb1.version, "1.0"); do_check_false(newb1.appDisabled); @@ -271,13 +194,11 @@ // Tests that a restart shuts down and restarts the add-on function run_test_5() { shutdownManager(); - do_check_false(HunspellEngine.isDictionaryEnabled("ab-CD.dic")); - do_check_not_in_crash_annotation("ab-CD@dictionaries.addons.mozilla.org", "1.0"); startupManager(false); - do_check_true(HunspellEngine.isDictionaryEnabled("ab-CD.dic")); - do_check_in_crash_annotation("ab-CD@dictionaries.addons.mozilla.org", "1.0"); + // check chrome reg that language pack is registered + do_check_eq(chrome.getSelectedLocale("test-langpack"), "x-testing"); - AddonManager.getAddonByID("ab-CD@dictionaries.addons.mozilla.org", function(b1) { + AddonManager.getAddonByID("langpack-x-testing@tests.mozilla.org", function(b1) { do_check_neq(b1, null); do_check_eq(b1.version, "1.0"); do_check_false(b1.appDisabled); @@ -291,9 +212,9 @@ // Tests that uninstalling doesn't require a restart function run_test_7() { - AddonManager.getAddonByID("ab-CD@dictionaries.addons.mozilla.org", function(b1) { + AddonManager.getAddonByID("langpack-x-testing@tests.mozilla.org", function(b1) { prepare_test({ - "ab-CD@dictionaries.addons.mozilla.org": [ + "langpack-x-testing@tests.mozilla.org": [ ["onUninstalling", false], "onUninstalled" ] @@ -309,333 +230,18 @@ function check_test_7() { ensure_test_completed(); - do_check_false(HunspellEngine.isDictionaryEnabled("ab-CD.dic")); - do_check_not_in_crash_annotation("ab-CD@dictionaries.addons.mozilla.org", "1.0"); + // check chrome reg that language pack is not registered + do_check_locale_not_registered("test-langpack"); - AddonManager.getAddonByID("ab-CD@dictionaries.addons.mozilla.org", function(b1) { + AddonManager.getAddonByID("langpack-x-testing@tests.mozilla.org", function(b1) { do_check_eq(b1, null); restartManager(); - AddonManager.getAddonByID("ab-CD@dictionaries.addons.mozilla.org", function(newb1) { + AddonManager.getAddonByID("langpack-x-testing@tests.mozilla.org", function(newb1) { do_check_eq(newb1, null); - run_test_8(); + do_test_finished(); }); }); } - -// Test that a bootstrapped extension dropped into the profile loads properly -// on startup and doesn't cause an EM restart -function run_test_8() { - shutdownManager(); - - let dir = profileDir.clone(); - dir.append("ab-CD@dictionaries.addons.mozilla.org"); - dir.create(AM_Ci.nsIFile.DIRECTORY_TYPE, 0755); - let zip = AM_Cc["@mozilla.org/libjar/zip-reader;1"]. - createInstance(AM_Ci.nsIZipReader); - zip.open(do_get_addon("test_dictionary")); - dir.append("install.rdf"); - zip.extract("install.rdf", dir); - dir = dir.parent; - dir.append("dictionaries"); - dir.create(AM_Ci.nsIFile.DIRECTORY_TYPE, 0755); - dir.append("ab-CD.dic"); - zip.extract("dictionaries/ab-CD.dic", dir); - zip.close(); - - startupManager(false); - - AddonManager.getAddonByID("ab-CD@dictionaries.addons.mozilla.org", function(b1) { - do_check_neq(b1, null); - do_check_eq(b1.version, "1.0"); - do_check_false(b1.appDisabled); - do_check_false(b1.userDisabled); - do_check_true(b1.isActive); - do_check_true(HunspellEngine.isDictionaryEnabled("ab-CD.dic")); - do_check_in_crash_annotation("ab-CD@dictionaries.addons.mozilla.org", "1.0"); - - run_test_9(); - }); -} - -// Test that items detected as removed during startup get removed properly -function run_test_9() { - shutdownManager(); - - let dir = profileDir.clone(); - dir.append("ab-CD@dictionaries.addons.mozilla.org"); - dir.remove(true); - startupManager(false); - - AddonManager.getAddonByID("ab-CD@dictionaries.addons.mozilla.org", function(b1) { - do_check_eq(b1, null); - do_check_not_in_crash_annotation("ab-CD@dictionaries.addons.mozilla.org", "1.0"); - - run_test_12(); - }); -} - - -// Tests that bootstrapped extensions are correctly loaded even if the app is -// upgraded at the same time -function run_test_12() { - shutdownManager(); - - let dir = profileDir.clone(); - dir.append("ab-CD@dictionaries.addons.mozilla.org"); - dir.create(AM_Ci.nsIFile.DIRECTORY_TYPE, 0755); - let zip = AM_Cc["@mozilla.org/libjar/zip-reader;1"]. - createInstance(AM_Ci.nsIZipReader); - zip.open(do_get_addon("test_dictionary")); - dir.append("install.rdf"); - zip.extract("install.rdf", dir); - dir = dir.parent; - dir.append("dictionaries"); - dir.create(AM_Ci.nsIFile.DIRECTORY_TYPE, 0755); - dir.append("ab-CD.dic"); - zip.extract("dictionaries/ab-CD.dic", dir); - zip.close(); - - startupManager(true); - - AddonManager.getAddonByID("ab-CD@dictionaries.addons.mozilla.org", function(b1) { - do_check_neq(b1, null); - do_check_eq(b1.version, "1.0"); - do_check_false(b1.appDisabled); - do_check_false(b1.userDisabled); - do_check_true(b1.isActive); - do_check_true(HunspellEngine.isDictionaryEnabled("ab-CD.dic")); - do_check_in_crash_annotation("ab-CD@dictionaries.addons.mozilla.org", "1.0"); - - b1.uninstall(); - restartManager(); - - run_test_16(); - }); -} - - -// Tests that bootstrapped extensions don't get loaded when in safe mode -function run_test_16() { - installAllFiles([do_get_addon("test_dictionary")], function() { - AddonManager.getAddonByID("ab-CD@dictionaries.addons.mozilla.org", function(b1) { - // Should have installed and started - do_check_true(HunspellEngine.isDictionaryEnabled("ab-CD.dic")); - - shutdownManager(); - - // Should have stopped - do_check_false(HunspellEngine.isDictionaryEnabled("ab-CD.dic")); - - gAppInfo.inSafeMode = true; - startupManager(false); - - AddonManager.getAddonByID("ab-CD@dictionaries.addons.mozilla.org", function(b1) { - // Should still be stopped - do_check_false(HunspellEngine.isDictionaryEnabled("ab-CD.dic")); - do_check_false(b1.isActive); - - shutdownManager(); - gAppInfo.inSafeMode = false; - startupManager(false); - - // Should have started - do_check_true(HunspellEngine.isDictionaryEnabled("ab-CD.dic")); - - AddonManager.getAddonByID("ab-CD@dictionaries.addons.mozilla.org", function(b1) { - b1.uninstall(); - - run_test_17(); - }); - }); - }); - }); -} - -// Check that a bootstrapped extension in a non-profile location is loaded -function run_test_17() { - shutdownManager(); - - let dir = userExtDir.clone(); - dir.append("ab-CD@dictionaries.addons.mozilla.org"); - dir.create(AM_Ci.nsIFile.DIRECTORY_TYPE, 0755); - let zip = AM_Cc["@mozilla.org/libjar/zip-reader;1"]. - createInstance(AM_Ci.nsIZipReader); - zip.open(do_get_addon("test_dictionary")); - dir.append("install.rdf"); - zip.extract("install.rdf", dir); - dir = dir.parent; - dir.append("dictionaries"); - dir.create(AM_Ci.nsIFile.DIRECTORY_TYPE, 0755); - dir.append("ab-CD.dic"); - zip.extract("dictionaries/ab-CD.dic", dir); - zip.close(); - - startupManager(); - - AddonManager.getAddonByID("ab-CD@dictionaries.addons.mozilla.org", function(b1) { - // Should have installed and started - do_check_true(HunspellEngine.isDictionaryEnabled("ab-CD.dic")); - do_check_neq(b1, null); - do_check_eq(b1.version, "1.0"); - do_check_true(b1.isActive); - - // From run_test_21 - dir = userExtDir.clone(); - dir.append("ab-CD@dictionaries.addons.mozilla.org"); - dir.remove(true); - - restartManager(); - - run_test_23(); - }); -} - -// Tests that installing from a URL doesn't require a restart -function run_test_23() { - prepare_test({ }, [ - "onNewInstall" - ]); - - let url = "http://localhost:4444/addons/test_dictionary.xpi"; - AddonManager.getInstallForURL(url, function(install) { - ensure_test_completed(); - - do_check_neq(install, null); - - prepare_test({ }, [ - "onDownloadStarted", - "onDownloadEnded" - ], function() { - do_check_eq(install.type, "dictionary"); - do_check_eq(install.version, "1.0"); - do_check_eq(install.name, "Test Dictionary"); - do_check_eq(install.state, AddonManager.STATE_DOWNLOADED); - do_check_true(install.addon.hasResource("install.rdf")); - do_check_false(install.addon.hasResource("bootstrap.js")); - do_check_eq(install.addon.operationsRequiringRestart & - AddonManager.OP_NEEDS_RESTART_INSTALL, 0); - do_check_not_in_crash_annotation("ab-CD@dictionaries.addons.mozilla.org", "1.0"); - - let addon = install.addon; - prepare_test({ - "ab-CD@dictionaries.addons.mozilla.org": [ - ["onInstalling", false], - "onInstalled" - ] - }, [ - "onInstallStarted", - "onInstallEnded", - ], function() { - do_check_true(addon.hasResource("install.rdf")); - check_test_23(); - }); - }); - install.install(); - }, "application/x-xpinstall"); -} - -function check_test_23() { - AddonManager.getAllInstalls(function(installs) { - // There should be no active installs now since the install completed and - // doesn't require a restart. - do_check_eq(installs.length, 0); - - AddonManager.getAddonByID("ab-CD@dictionaries.addons.mozilla.org", function(b1) { - do_check_neq(b1, null); - do_check_eq(b1.version, "1.0"); - do_check_false(b1.appDisabled); - do_check_false(b1.userDisabled); - do_check_true(b1.isActive); - do_check_true(HunspellEngine.isDictionaryEnabled("ab-CD.dic")); - do_check_true(b1.hasResource("install.rdf")); - do_check_false(b1.hasResource("bootstrap.js")); - do_check_in_crash_annotation("ab-CD@dictionaries.addons.mozilla.org", "1.0"); - - let dir = do_get_addon_root_uri(profileDir, "ab-CD@dictionaries.addons.mozilla.org"); - - AddonManager.getAddonsWithOperationsByTypes(null, function(list) { - do_check_eq(list.length, 0); - - restartManager(); - AddonManager.getAddonByID("ab-CD@dictionaries.addons.mozilla.org", function(b1) { - b1.uninstall(); - restartManager(); - - testserver.stop(run_test_25); - }); - }); - }); - }); -} - -// Tests that updating from a bootstrappable add-on to a normal add-on calls -// the uninstall method -function run_test_25() { - installAllFiles([do_get_addon("test_dictionary")], function() { - HunspellEngine.listener = function(aEvent) { - HunspellEngine.listener = null; - do_check_eq(aEvent, "addDirectory"); - do_check_true(HunspellEngine.isDictionaryEnabled("ab-CD.dic")); - - installAllFiles([do_get_addon("test_dictionary_2")], function() { - // Needs a restart to complete this so the old version stays running - do_check_true(HunspellEngine.isDictionaryEnabled("ab-CD.dic")); - - AddonManager.getAddonByID("ab-CD@dictionaries.addons.mozilla.org", function(b1) { - do_check_neq(b1, null); - do_check_eq(b1.version, "1.0"); - do_check_true(b1.isActive); - do_check_true(hasFlag(b1.pendingOperations, AddonManager.PENDING_UPGRADE)); - - restartManager(); - - do_check_false(HunspellEngine.isDictionaryEnabled("ab-CD.dic")); - - AddonManager.getAddonByID("ab-CD@dictionaries.addons.mozilla.org", function(b1) { - do_check_neq(b1, null); - do_check_eq(b1.version, "2.0"); - do_check_true(b1.isActive); - do_check_eq(b1.pendingOperations, AddonManager.PENDING_NONE); - - run_test_26(); - }); - }); - }); - }; - }); -} - -// Tests that updating from a normal add-on to a bootstrappable add-on calls -// the install method -function run_test_26() { - installAllFiles([do_get_addon("test_dictionary")], function() { - // Needs a restart to complete this - do_check_false(HunspellEngine.isDictionaryEnabled("ab-CD.dic")); - - AddonManager.getAddonByID("ab-CD@dictionaries.addons.mozilla.org", function(b1) { - do_check_neq(b1, null); - do_check_eq(b1.version, "2.0"); - do_check_true(b1.isActive); - do_check_true(hasFlag(b1.pendingOperations, AddonManager.PENDING_UPGRADE)); - - restartManager(); - - do_check_true(HunspellEngine.isDictionaryEnabled("ab-CD.dic")); - - AddonManager.getAddonByID("ab-CD@dictionaries.addons.mozilla.org", function(b1) { - do_check_neq(b1, null); - do_check_eq(b1.version, "1.0"); - do_check_true(b1.isActive); - do_check_eq(b1.pendingOperations, AddonManager.PENDING_NONE); - - HunspellEngine.deactivate(); - - do_test_finished(); - }); - }); - }); -} - diff --git a/toolkit/mozapps/extensions/test/xpcshell/xpcshell.ini b/toolkit/mozapps/extensions/test/xpcshell/xpcshell.ini --- a/toolkit/mozapps/extensions/test/xpcshell/xpcshell.ini +++ b/toolkit/mozapps/extensions/test/xpcshell/xpcshell.ini @@ -139,6 +139,7 @@ [test_corrupt_strictcompat.js] [test_db_sanity.js] [test_dictionary.js] +[test_langpack.js] [test_disable.js] [test_distribution.js] [test_dss.js]