Bug 1213450 - Complete the implementation of chrome.i18n - getAcceptLanguages, r?kmag draft
authorbsilverberg <bsilverberg@mozilla.com>
Mon, 08 Feb 2016 16:19:15 -0500
changeset 329629 6356451cc789ff2321b2616310013f5a80e6d2a8
parent 329624 749b7238082f44a15728dbf4311955d737ce0782
child 514005 6f81749b32bc2df04ee5bb493e9cc6bb8822f5ca
push id10575
push userbmo:bob.silverberg@gmail.com
push dateMon, 08 Feb 2016 21:20:39 +0000
reviewerskmag
bugs1213450
milestone47.0a1
Bug 1213450 - Complete the implementation of chrome.i18n - getAcceptLanguages, r?kmag Address review comments - Use Preferences.jsm - return a Promise instead of calling runSafe() - Check lengths of arrays in tests
toolkit/components/extensions/ext-i18n.js
toolkit/components/extensions/test/mochitest/test_ext_i18n.html
--- a/toolkit/components/extensions/ext-i18n.js
+++ b/toolkit/components/extensions/ext-i18n.js
@@ -1,28 +1,22 @@
 "use strict";
 
-XPCOMUtils.defineLazyServiceGetter(this, "PrefService",
-                                   "@mozilla.org/preferences-service;1",
-                                   "nsIPrefService");
-
-Cu.import("resource://gre/modules/ExtensionUtils.jsm");
-var {
-  runSafe,
-} = ExtensionUtils;
+XPCOMUtils.defineLazyModuleGetter(this, "Preferences",
+                                  "resource://gre/modules/Preferences.jsm");
 
 extensions.registerSchemaAPI("i18n", null, (extension, context) => {
   return {
     i18n: {
       getMessage: function(messageName, substitutions) {
         return extension.localizeMessage(messageName, substitutions);
       },
       getAcceptLanguages: function(callback) {
-        let result = PrefService.getComplexValue("intl.accept_languages", Ci.nsIPrefLocalizedString).data;
+        let result = Preferences.get("intl.accept_languages", "", Ci.nsIPrefLocalizedString);
         result = result.split(',');
         result = result.map(lang => {
           return lang.replace(/-/g, "_").trim();
         });
-        runSafe(context, callback, result);
+        return Promise.resolve(result);
       }
     },
   };
 });
--- a/toolkit/components/extensions/test/mochitest/test_ext_i18n.html
+++ b/toolkit/components/extensions/test/mochitest/test_ext_i18n.html
@@ -167,16 +167,17 @@ add_task(function* test_get_accept_langu
 
   SpecialPowers.setCharPref("intl.accept_languages", "en-US, en, fr-CA, fr");
 
   function backgroundScript() {
     let expectedLangs = ["en_US", "en", "fr_CA", "fr"];
     browser.test.log("running test_get_accept_languages_custom");
     browser.i18n.getAcceptLanguages(
       langs => {
+        browser.test.assertEq(expectedLangs.length, langs.length, "returned array should be of the expected length");
         langs.map((lang, index) => {
           browser.test.assertEq(expectedLangs[index], lang, "expected languages should be returned");
         });
         SpecialPowers.clearUserPref("intl.accept_languages");
       }
     );
 
     browser.test.notifyPass("test_get_accept_languages_custom");
@@ -196,16 +197,17 @@ add_task(function* test_get_accept_langu
 
 add_task(function* test_get_accept_languages_default() {
 
   function backgroundScript() {
     let expectedLangs = ["en_US", "en"];
     browser.test.log("running test_get_accept_languages_default");
     browser.i18n.getAcceptLanguages(
       langs => {
+        browser.test.assertEq(expectedLangs.length, langs.length, "returned array should be of the expected length");
         langs.map((lang, index) => {
           browser.test.assertEq(expectedLangs[index], lang, "expected languages should be returned");
         });
       }
     );
     browser.test.notifyPass("test_get_accept_languages_default");
   }