--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mozilla-backout-677092.patch Fri Jan 11 10:10:04 2013 +0100
@@ -0,0 +1,296 @@
+# HG changeset patch
+# Parent 297b3a7802b2488cca8f2e6febc77e9dbf7f16e0
+# User Wolfgang Rosenauer <wr@rosenauer.org>
+Bug 818468 - Langpacks bundled in distribution/extensions are registered but disabled even if shown enabled
+(backing out Bug 677092 - Make language packs restartless by default)
+
+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
+@@ -757,18 +757,18 @@ function loadManifestFromRDF(aUri, aStre
+ if (addon.optionsType &&
+ addon.optionsType != AddonManager.OPTIONS_TYPE_DIALOG &&
+ addon.optionsType != AddonManager.OPTIONS_TYPE_INLINE &&
+ addon.optionsType != AddonManager.OPTIONS_TYPE_TAB) {
+ throw new Error("Install manifest specifies unknown type: " + addon.optionsType);
+ }
+ }
+ else {
+- // spell check dictionaries and language packs never require a restart
+- if (addon.type == "dictionary" || addon.type == "locale")
++ // spell check dictionaries never require a restart
++ if (addon.type == "dictionary")
+ addon.bootstrap = true;
+
+ // Only extensions are allowed to provide an optionsURL, optionsType or aboutURL. For
+ // all other types they are silently ignored
+ addon.optionsURL = null;
+ addon.optionsType = null;
+ addon.aboutURL = null;
+
+@@ -3712,21 +3712,16 @@ var XPIProvider = {
+ // Never call any bootstrap methods in safe mode
+ if (Services.appinfo.inSafeMode)
+ return;
+
+ if (aMethod == "startup")
+ 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);
+
+ if (!(aMethod in this.bootstrapScopes[aId])) {
+ WARN("Add-on " + aId + " is missing bootstrap method " + aMethod);
+ return;
+ }
+diff --git a/toolkit/mozapps/extensions/test/xpcshell/test_dictionary.js b/toolkit/mozapps/extensions/test/xpcshell/test_dictionary.js
+--- a/toolkit/mozapps/extensions/test/xpcshell/test_dictionary.js
++++ b/toolkit/mozapps/extensions/test/xpcshell/test_dictionary.js
+@@ -4,19 +4,16 @@
+
+ // This verifies that bootstrappable add-ons can be used without restarts.
+ Components.utils.import("resource://gre/modules/Services.jsm");
+
+ // Enable loading extensions from the user scopes
+ Services.prefs.setIntPref("extensions.enabledScopes",
+ AddonManager.SCOPE_PROFILE + AddonManager.SCOPE_USER);
+
+-// The test extension uses an insecure update url.
+-Services.prefs.setBoolPref(PREF_EM_CHECK_UPDATE_SECURITY, false);
+-
+ createAppInfo("xpcshell@tests.mozilla.org", "XPCShell", "1", "1.9.2");
+
+ const profileDir = gProfD.clone();
+ profileDir.append("extensions");
+ const userExtDir = gProfD.clone();
+ userExtDir.append("extensions2");
+ userExtDir.append(gAppInfo.ID);
+ registerDirectory("XREUSysExt", userExtDir.parent);
+@@ -98,17 +95,16 @@ var HunspellEngine = {
+ }
+ };
+
+ function run_test() {
+ do_test_pending();
+
+ // Create and configure the HTTP server.
+ testserver = new HttpServer();
+- testserver.registerDirectory("/data/", do_get_file("data"));
+ testserver.registerDirectory("/addons/", do_get_file("addons"));
+ testserver.start(4444);
+
+ startupManager();
+
+ run_test_1();
+ }
+
+@@ -563,17 +559,17 @@ function check_test_23() {
+ 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();
+
+- run_test_25();
++ testserver.stop(run_test_25);
+ });
+ });
+ });
+ });
+ }
+
+ // Tests that updating from a bootstrappable add-on to a normal add-on calls
+ // the uninstall method
+@@ -631,160 +627,15 @@ function run_test_26() {
+
+ 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();
+- b1.uninstall();
+- restartManager();
+- run_test_27();
++
++ do_test_finished();
+ });
+ });
+ });
+ }
+
+-// Tests that an update check from a normal add-on to a bootstrappable add-on works
+-function run_test_27() {
+- writeInstallRDFForExtension({
+- id: "ab-CD@dictionaries.addons.mozilla.org",
+- version: "1.0",
+- updateURL: "http://localhost:4444/data/test_dictionary.rdf",
+- targetApplications: [{
+- id: "xpcshell@tests.mozilla.org",
+- minVersion: "1",
+- maxVersion: "1"
+- }],
+- name: "Test Dictionary",
+- }, profileDir);
+- restartManager();
+-
+- prepare_test({
+- "ab-CD@dictionaries.addons.mozilla.org": [
+- "onInstalling"
+- ]
+- }, [
+- "onNewInstall",
+- "onDownloadStarted",
+- "onDownloadEnded",
+- "onInstallStarted",
+- "onInstallEnded"
+- ], check_test_27);
+-
+- AddonManagerPrivate.backgroundUpdateCheck();
+-}
+-
+-function check_test_27(install) {
+- do_check_eq(install.existingAddon.pendingUpgrade.install, install);
+-
+- restartManager();
+- AddonManager.getAddonByID("ab-CD@dictionaries.addons.mozilla.org", function(b1) {
+- do_check_neq(b1, null);
+- do_check_eq(b1.version, "2.0");
+- do_check_eq(b1.type, "dictionary");
+- b1.uninstall();
+- restartManager();
+-
+- run_test_28();
+- });
+-}
+-
+-// Tests that an update check from a bootstrappable add-on to a normal add-on works
+-function run_test_28() {
+- writeInstallRDFForExtension({
+- id: "ef@dictionaries.addons.mozilla.org",
+- version: "1.0",
+- type: "64",
+- updateURL: "http://localhost:4444/data/test_dictionary.rdf",
+- targetApplications: [{
+- id: "xpcshell@tests.mozilla.org",
+- minVersion: "1",
+- maxVersion: "1"
+- }],
+- name: "Test Dictionary ef",
+- }, profileDir);
+- restartManager();
+-
+- prepare_test({
+- "ef@dictionaries.addons.mozilla.org": [
+- "onInstalling"
+- ]
+- }, [
+- "onNewInstall",
+- "onDownloadStarted",
+- "onDownloadEnded",
+- "onInstallStarted",
+- "onInstallEnded"
+- ], check_test_28);
+-
+- AddonManagerPrivate.backgroundUpdateCheck();
+-}
+-
+-function check_test_28(install) {
+- do_check_eq(install.existingAddon.pendingUpgrade.install, install);
+-
+- restartManager();
+- AddonManager.getAddonByID("ef@dictionaries.addons.mozilla.org", function(b2) {
+- do_check_neq(b2, null);
+- do_check_eq(b2.version, "2.0");
+- do_check_eq(b2.type, "extension");
+- b2.uninstall();
+- restartManager();
+-
+- run_test_29();
+- });
+-}
+-
+-// Tests that an update check from a bootstrappable add-on to a bootstrappable add-on works
+-function run_test_29() {
+- writeInstallRDFForExtension({
+- id: "gh@dictionaries.addons.mozilla.org",
+- version: "1.0",
+- type: "64",
+- updateURL: "http://localhost:4444/data/test_dictionary.rdf",
+- targetApplications: [{
+- id: "xpcshell@tests.mozilla.org",
+- minVersion: "1",
+- maxVersion: "1"
+- }],
+- name: "Test Dictionary gh",
+- }, profileDir);
+- restartManager();
+-
+- prepare_test({
+- "gh@dictionaries.addons.mozilla.org": [
+- ["onInstalling", false /* = no restart */],
+- ["onInstalled", false]
+- ]
+- }, [
+- "onNewInstall",
+- "onDownloadStarted",
+- "onDownloadEnded",
+- "onInstallStarted",
+- "onInstallEnded"
+- ], check_test_29);
+-
+- AddonManagerPrivate.backgroundUpdateCheck();
+-}
+-
+-function check_test_29(install) {
+- AddonManager.getAddonByID("gh@dictionaries.addons.mozilla.org", function(b2) {
+- do_check_neq(b2, null);
+- do_check_eq(b2.version, "2.0");
+- do_check_eq(b2.type, "dictionary");
+-
+- prepare_test({
+- "gh@dictionaries.addons.mozilla.org": [
+- ["onUninstalling", false],
+- ["onUninstalled", false],
+- ]
+- }, [
+- ], finish_test_29);
+-
+- b2.uninstall();
+- });
+-}
+-
+-function finish_test_29() {
+- testserver.stop(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
+@@ -136,17 +136,16 @@ fail-if = os == "android"
+ [test_cacheflush.js]
+ [test_checkcompatibility.js]
+ [test_ChromeManifestParser.js]
+ [test_compatoverrides.js]
+ [test_corrupt.js]
+ [test_corrupt_strictcompat.js]
+ [test_db_sanity.js]
+ [test_dictionary.js]
+-[test_langpack.js]
+ [test_disable.js]
+ [test_distribution.js]
+ [test_dss.js]
+ # Bug 676992: test consistently fails on Android
+ fail-if = os == "android"
+ [test_duplicateplugins.js]
+ # Bug 676992: test consistently hangs on Android
+ skip-if = os == "android"