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
--- 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");
}