[xulrunner/f16] Added fix for langpacks

Martin Stransky stransky at fedoraproject.org
Wed Jan 9 11:54:54 UTC 2013


commit 4228c3d2be418f9088a0f916c4b149111ae3964b
Author: Martin Stransky <stransky at anakreon.cz>
Date:   Wed Jan 9 12:54:46 2013 +0100

    Added fix for langpacks

 mozilla-677092-restartless-lang.patch |  698 +++++++++++++++++++++++++++++++++
 xulrunner.spec                        |    9 +-
 2 files changed, 705 insertions(+), 2 deletions(-)
---
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 <axel at pike.org>
+# 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#">
+ 
+   <Description about="urn:mozilla:install-manifest">
+-    <em:id>addon1 at tests.mozilla.org</em:id>
++    <em:id>langpack-x-testing at tests.mozilla.org</em:id>
++    <em:type>8</em:type>
+     <em:version>1.0</em:version>
+ 
+     <!-- Front End MetaData -->
+-    <em:name>Test 1</em:name>
+-    <em:description>Test Description</em:description>
++    <em:name>Language Pack x-testing</em:name>
+ 
+     <em:targetApplication>
+       <Description>
+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 at dictionaries.addons.mozilla.org", "1.0");
+ 
+     let addon = install.addon;
+     prepare_test({
+-      "ab-CD at dictionaries.addons.mozilla.org": [
++      "langpack-x-testing at 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 at dictionaries.addons.mozilla.org", function(b1) {
++    AddonManager.getAddonByID("langpack-x-testing at 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 at dictionaries.addons.mozilla.org", "1.0");
+ 
+-      let dir = do_get_addon_root_uri(profileDir, "ab-CD at dictionaries.addons.mozilla.org");
++      let dir = do_get_addon_root_uri(profileDir, "langpack-x-testing at 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 at dictionaries.addons.mozilla.org", function(b1) {
++  AddonManager.getAddonByID("langpack-x-testing at tests.mozilla.org", function(b1) {
+     prepare_test({
+-      "ab-CD at dictionaries.addons.mozilla.org": [
++      "langpack-x-testing at 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 at 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 at dictionaries.addons.mozilla.org", function(newb1) {
++    AddonManager.getAddonByID("langpack-x-testing at 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 at 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 at dictionaries.addons.mozilla.org", function(b1) {
++  AddonManager.getAddonByID("langpack-x-testing at 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 at dictionaries.addons.mozilla.org", function(b1) {
++  AddonManager.getAddonByID("langpack-x-testing at tests.mozilla.org", function(b1) {
+     prepare_test({
+-      "ab-CD at dictionaries.addons.mozilla.org": [
++      "langpack-x-testing at 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 at 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 at dictionaries.addons.mozilla.org", function(newb1) {
++    AddonManager.getAddonByID("langpack-x-testing at 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 at dictionaries.addons.mozilla.org", "1.0");
+   startupManager(false);
+-  do_check_true(HunspellEngine.isDictionaryEnabled("ab-CD.dic"));
+-  do_check_in_crash_annotation("ab-CD at 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 at dictionaries.addons.mozilla.org", function(b1) {
++  AddonManager.getAddonByID("langpack-x-testing at 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 at dictionaries.addons.mozilla.org", function(b1) {
++  AddonManager.getAddonByID("langpack-x-testing at tests.mozilla.org", function(b1) {
+     prepare_test({
+-      "ab-CD at dictionaries.addons.mozilla.org": [
++      "langpack-x-testing at 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 at 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 at dictionaries.addons.mozilla.org", function(b1) {
++  AddonManager.getAddonByID("langpack-x-testing at tests.mozilla.org", function(b1) {
+     do_check_eq(b1, null);
+ 
+     restartManager();
+ 
+-    AddonManager.getAddonByID("ab-CD at dictionaries.addons.mozilla.org", function(newb1) {
++    AddonManager.getAddonByID("langpack-x-testing at 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 at 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 at 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 at 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 at dictionaries.addons.mozilla.org");
+-  dir.remove(true);
+-  startupManager(false);
+-
+-  AddonManager.getAddonByID("ab-CD at dictionaries.addons.mozilla.org", function(b1) {
+-    do_check_eq(b1, null);
+-    do_check_not_in_crash_annotation("ab-CD at 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 at 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 at 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 at 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 at 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 at 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 at 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 at 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 at 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 at 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 at dictionaries.addons.mozilla.org", "1.0");
+-
+-      let addon = install.addon;
+-      prepare_test({
+-        "ab-CD at 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 at 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 at dictionaries.addons.mozilla.org", "1.0");
+-
+-      let dir = do_get_addon_root_uri(profileDir, "ab-CD at dictionaries.addons.mozilla.org");
+-
+-      AddonManager.getAddonsWithOperationsByTypes(null, function(list) {
+-        do_check_eq(list.length, 0);
+-
+-        restartManager();
+-        AddonManager.getAddonByID("ab-CD at 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 at 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 at 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 at 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 at 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]
diff --git a/xulrunner.spec b/xulrunner.spec
index 500ddd7..7549c6d 100644
--- a/xulrunner.spec
+++ b/xulrunner.spec
@@ -75,7 +75,7 @@
 Summary:        XUL Runtime for Gecko Applications
 Name:           xulrunner
 Version:        18.0
-Release:        4%{?pre_tag}%{?dist}
+Release:        5%{?pre_tag}%{?dist}
 URL:            http://developer.mozilla.org/En/XULRunner
 License:        MPLv1.1 or GPLv2+ or LGPLv2+
 Group:          Applications/Internet
@@ -97,6 +97,7 @@ Patch18:        xulrunner-16.0-jemalloc-ppc.patch
 Patch20:        mozilla-193-pkgconfig.patch
 
 # Upstream patches
+Patch100:       mozilla-677092-restartless-lang.patch
 
 # ---------------------------------------------------
 
@@ -224,7 +225,8 @@ cd %{tarballdir}
 %patch17 -p2 -b .gcc47
 %patch18 -p2 -b .jemalloc-ppc
 
-%patch20 -p2 -b .pk
+%patch20  -p2 -b .pk
+%patch100 -p1 -R -b .restartless-lang
 
 %{__rm} -f .mozconfig
 %{__cp} %{SOURCE10} .mozconfig
@@ -502,6 +504,9 @@ fi
 #---------------------------------------------------------------------
 
 %changelog
+* Wed Jan 9 2013 Martin Stransky <stransky at redhat.com> - 18.0-5
+- Added fix for langpacks
+
 * Wed Jan 9 2013 Martin Stransky <stransky at redhat.com> - 18.0-4
 - Fixed source files
 - Disabled WebRTC due to rhbz#304121


More information about the scm-commits mailing list