From a8afa0214de056c38a7fa6f5fe49948065bb21cf Mon Sep 17 00:00:00 2001 From: Remi Collet Date: Wed, 9 Jan 2013 13:50:52 +0100 Subject: Xulrunner / Firerfox 18.0 --- mozilla-677092-restartless-lang.patch | 698 ++++++++++++++++++++++++++++++++++ 1 file changed, 698 insertions(+) create mode 100644 mozilla-677092-restartless-lang.patch (limited to 'mozilla-677092-restartless-lang.patch') diff --git a/mozilla-677092-restartless-lang.patch b/mozilla-677092-restartless-lang.patch new file mode 100644 index 0000000..a08de9b --- /dev/null +++ b/mozilla-677092-restartless-lang.patch @@ -0,0 +1,698 @@ +# 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] -- cgit