Bug 1423703 - Use AppLocales rather than RequestedLocales in Activity Stream.
MozReview-Commit-ID: I9LiQfQLAQc
--- a/browser/components/newtab/aboutNewTabService.js
+++ b/browser/components/newtab/aboutNewTabService.js
@@ -178,30 +178,22 @@ AboutNewTabService.prototype = {
* Figure out what path under prerendered to use based on current state.
*/
updatePrerenderedPath() {
// Debug files are specially packaged in a non-localized directory
let path;
if (this._activityStreamDebug) {
path = "static";
} else {
- // Use the exact match locale if it's packaged
- const locale = Services.locale.getRequestedLocale();
- if (ACTIVITY_STREAM_LOCALES.has(locale)) {
- path = locale;
- } else {
- // Fall back to a shared-language packaged locale
- const language = locale.split("-")[0];
- if (ACTIVITY_STREAM_LOCALES.has(language)) {
- path = language;
- } else {
- // Just use the default locale as a final fallback
- path = "en-US";
- }
- }
+ let locales = Services.locale.negotiateLanguages(
+ Services.locale.getAppLocalesAsLangTags(),
+ ACTIVITY_STREAM_LOCALES,
+ Services.locale.defaultLocale
+ );
+ path = locales[0];
}
this._activityStreamPath = `${path}/`;
},
/*
* Returns the default URL.
*
* This URL only depends on the browser.newtabpage.activity-stream.enabled pref. Overriding
--- a/browser/extensions/activity-stream/lib/ActivityStream.jsm
+++ b/browser/extensions/activity-stream/lib/ActivityStream.jsm
@@ -287,17 +287,17 @@ this.ActivityStream = class ActivityStre
if (Services.prefs.prefHasUserValue(GEO_PREF)) {
this.geo = Services.prefs.getStringPref(GEO_PREF);
} else if (this.geo !== "") {
// Watch for geo changes and use a dummy value for now
Services.prefs.addObserver(GEO_PREF, this);
this.geo = "";
}
- this.locale = Services.locale.getRequestedLocale();
+ this.locale = Services.locale.getAppLocaleAsLangTag();
// Update the pref config of those with dynamic values
for (const pref of PREFS_CONFIG.keys()) {
const prefConfig = PREFS_CONFIG.get(pref);
if (!prefConfig.getValue) {
continue;
}
--- a/browser/extensions/activity-stream/lib/TelemetryFeed.jsm
+++ b/browser/extensions/activity-stream/lib/TelemetryFeed.jsm
@@ -254,17 +254,17 @@ this.TelemetryFeed = class TelemetryFeed
*
* @param {string} id The portID of the session, if a session is relevant (optional)
* @return {obj} A telemetry ping
*/
createPing(portID) {
const appInfo = this.store.getState().App;
const ping = {
addon_version: appInfo.version,
- locale: Services.locale.getRequestedLocale(),
+ locale: Services.locale.getAppLocaleAsLangTag(),
user_prefs: this.userPreferences
};
// If the ping is part of a user session, add session-related info
if (portID) {
const session = this.sessions.get(portID) || this.addSession(portID);
Object.assign(ping, {session_id: session.session_id});
--- a/browser/extensions/activity-stream/test/unit/lib/ActivityStream.test.js
+++ b/browser/extensions/activity-stream/test/unit/lib/ActivityStream.test.js
@@ -166,39 +166,39 @@ describe("ActivityStream", () => {
as._updateDynamicPrefs();
assert.isFalse(PREFS_CONFIG.get("feeds.section.topstories").value);
});
it("should be false with expected geo and unexpected locale", () => {
sandbox.stub(global.Services.prefs, "prefHasUserValue").returns(true);
sandbox.stub(global.Services.prefs, "getStringPref").returns("US");
- sandbox.stub(global.Services.locale, "getRequestedLocale").returns("no-LOCALE");
+ sandbox.stub(global.Services.locale, "getAppLocalesAsLangTags").returns("no-LOCALE");
as._updateDynamicPrefs();
assert.isFalse(PREFS_CONFIG.get("feeds.section.topstories").value);
});
it("should be true with expected geo and locale", () => {
sandbox.stub(global.Services.prefs, "prefHasUserValue").returns(true);
sandbox.stub(global.Services.prefs, "getStringPref").returns("US");
- sandbox.stub(global.Services.locale, "getRequestedLocale").returns("en-US");
+ sandbox.stub(global.Services.locale, "getAppLocalesAsLangTags").returns("en-US");
as._updateDynamicPrefs();
assert.isTrue(PREFS_CONFIG.get("feeds.section.topstories").value);
});
it("should be false after expected geo and locale then unexpected", () => {
sandbox.stub(global.Services.prefs, "prefHasUserValue").returns(true);
sandbox.stub(global.Services.prefs, "getStringPref")
.onFirstCall()
.returns("US")
.onSecondCall()
.returns("NOGEO");
- sandbox.stub(global.Services.locale, "getRequestedLocale").returns("en-US");
+ sandbox.stub(global.Services.locale, "getAppLocalesAsLangTags").returns("en-US");
as._updateDynamicPrefs();
as._updateDynamicPrefs();
assert.isFalse(PREFS_CONFIG.get("feeds.section.topstories").value);
});
});
describe("_updateDynamicPrefs topstories delayed default value", () => {
@@ -219,17 +219,17 @@ describe("ActivityStream", () => {
as._updateDynamicPrefs();
clock.tick(1);
assert.isFalse(PREFS_CONFIG.get("feeds.section.topstories").value);
});
it("should set true with expected geo and locale", () => {
sandbox.stub(global.Services.prefs, "getStringPref").returns("US");
- sandbox.stub(global.Services.locale, "getRequestedLocale").returns("en-US");
+ sandbox.stub(global.Services.locale, "getAppLocalesAsLangTags").returns("en-US");
as._updateDynamicPrefs();
clock.tick(1);
assert.isTrue(PREFS_CONFIG.get("feeds.section.topstories").value);
});
});
describe("telemetry reporting on init failure", () => {
--- a/browser/extensions/activity-stream/test/unit/lib/TopStoriesFeed.test.js
+++ b/browser/extensions/activity-stream/test/unit/lib/TopStoriesFeed.test.js
@@ -29,17 +29,17 @@ describe("Top Stories Feed", () => {
"provider_icon": "provider-icon",
"provider_description": "provider_desc"
};
beforeEach(() => {
FakePrefs.prototype.prefs.apiKeyPref = "test-api-key";
globals = new GlobalOverrider();
- globals.set("Services", {locale: {getRequestedLocale: () => "en-CA"}, obs: {addObserver: () => {}, removeObserver: () => {}}});
+ globals.set("Services", {locale: {getAppLocalesAsLangTags: () => ["en-CA"]}, obs: {addObserver: () => {}, removeObserver: () => {}}});
globals.set("PlacesUtils", {history: {}});
clock = sinon.useFakeTimers();
shortURLStub = sinon.stub().callsFake(site => site.url);
sectionsManagerStub = {
onceInitialized: sinon.stub().callsFake(callback => callback()),
enableSection: sinon.spy(),
disableSection: sinon.spy(),
updateSection: sinon.spy(),
@@ -126,17 +126,17 @@ describe("Top Stories Feed", () => {
it("should report error for invalid configuration", () => {
globals.sandbox.spy(global.Components.utils, "reportError");
sectionsManagerStub.sections.set("topstories", {options: {api_key_pref: "invalid"}});
instance.init();
assert.called(Components.utils.reportError);
});
it("should report error for missing api key", () => {
- let fakeServices = {prefs: {getCharPref: sinon.spy()}, locale: {getRequestedLocale: sinon.spy()}};
+ let fakeServices = {prefs: {getCharPref: sinon.spy()}, locale: {getAppLocalesAsLangTags: sinon.spy()}};
globals.set("Services", fakeServices);
globals.sandbox.spy(global.Components.utils, "reportError");
sectionsManagerStub.sections.set("topstories", {
options: {
"stories_endpoint": "https://somedomain.org/stories?key=$apiKey",
"topics_endpoint": "https://somedomain.org/topics?key=$apiKey"
}
});
--- a/browser/extensions/activity-stream/test/unit/lib/UserDomainAffinityProvider.test.js
+++ b/browser/extensions/activity-stream/test/unit/lib/UserDomainAffinityProvider.test.js
@@ -32,17 +32,17 @@ const PARAMETER_SETS = {
describe("User Domain Affinity Provider", () => {
let UserDomainAffinityProvider;
let instance;
let globals;
beforeEach(() => {
globals = new GlobalOverrider();
- globals.set("Services", {locale: {getRequestedLocale: () => "en-CA"}, io: {newURI: u => ({host: "www.somedomain.org"})}});
+ globals.set("Services", {locale: {getAppLocalesAsLangTags: () => ["en-CA"]}, io: {newURI: u => ({host: "www.somedomain.org"})}});
globals.set("PlacesUtils", {
history: {
getNewQuery: () => ({"TIME_RELATIVE_NOW": 1}),
getNewQueryOptions: () => ({}),
executeQuery: () => ({root: {childCount: 1, getChild: index => ({uri: "www.somedomain.org", accessCount: 1})}})
}
});
global.Components.classes["@mozilla.org/browser/nav-history-service;1"] = {
--- a/browser/extensions/activity-stream/test/unit/unit-entry.js
+++ b/browser/extensions/activity-stream/test/unit/unit-entry.js
@@ -39,21 +39,22 @@ overrider.set({
ContentSearchUIController: function() {}, // NB: This is a function/constructor
dump() {},
fetch() {},
// eslint-disable-next-line object-shorthand
Image: function() {}, // NB: This is a function/constructor
Preferences: FakePrefs,
Services: {
locale: {
- getAppLocalesAsLangTags() {},
- getRequestedLocale() {
- return "en-US";
+ getAppLocalesAsLangTags() {
+ return ["en-US"];
},
- negotiateLanguages() {}
+ negotiateLanguages() {
+ return ["en-US"];
+ }
},
urlFormatter: {formatURL: str => str},
mm: {
addMessageListener: (msg, cb) => cb(),
removeMessageListener() {}
},
appShell: {hiddenDOMWindow: {performance: new FakePerformance()}},
obs: {
--- a/browser/extensions/formautofill/bootstrap.js
+++ b/browser/extensions/formautofill/bootstrap.js
@@ -52,17 +52,17 @@ function addUpgradeListener(instanceID)
});
}
function isAvailable() {
let availablePref = Services.prefs.getCharPref("extensions.formautofill.available");
if (availablePref == "on") {
return true;
} else if (availablePref == "detect") {
- let locale = Services.locale.getRequestedLocale();
+ let locale = Services.locale.getAppLocaleAsLangTag();
let region = Services.prefs.getCharPref("browser.search.region", "");
let supportedCountries = Services.prefs.getCharPref("extensions.formautofill.supportedCountries")
.split(",");
return locale == "en-US" && supportedCountries.includes(region);
}
return false;
}