commit c56b4740e9eb9d676874cec2551c67681b5a0b56
parent 4efbc26de19e03e6907b9d96c9bc7e9a212f4f8f
Author: Drew Willcoxon <adw@mozilla.com>
Date: Mon, 13 Oct 2025 19:45:15 +0000
Bug 1992811 - Enable important-dates suggestions for en locales in DE, FR, and IT. r=daisuke
This enables Suggest and important-dates suggestions for `en` locales in the EU
countries. For these region-locales, Suggest itself will now be enabled, but
every feature of it will be disabled except for important dates. So, no AMP, no
Wikipedia, no settings UI, etc. IOW it will only be an implementation detail
that important dates are implemented using the Suggest platform.
I changed the default value of the `settingsUI` pref so that the settings UI
will be hidden by default. Right now, the default is to show the full UI. If I
didn't change the default, I would need to make more changes to how
`QuickSuggest` initializes default prefs (the `SUGGEST_PREFS` const) so that EU
countries would have branching logic for the `settingsUI` pref depending on the
locale, which is not currently possible.
Currently there isn't any data in remote settings for these region-locales, so
even with this patch, important dates won't be able to be triggered. I'll upload
some data later.
Depends on D268042
Differential Revision: https://phabricator.services.mozilla.com/D268044
Diffstat:
4 files changed, 163 insertions(+), 92 deletions(-)
diff --git a/browser/app/profile/firefox.js b/browser/app/profile/firefox.js
@@ -577,9 +577,9 @@ pref("browser.urlbar.quicksuggest.mlEnabled", false);
// backend.
pref("browser.urlbar.quicksuggest.mlInitDelaySeconds", 0);
-// Which Suggest settings to show in the settings UI. See
-// `QuickSuggest.SETTINGS_UI` for values.
-pref("browser.urlbar.quicksuggest.settingsUi", 0);
+// Which Suggest settings to show in the settings UI, when Suggest is enabled.
+// See `QuickSuggest.SETTINGS_UI` for values.
+pref("browser.urlbar.quicksuggest.settingsUi", 1);
// Whether unit conversion is enabled.
pref("browser.urlbar.unitConversion.enabled", true);
diff --git a/browser/components/urlbar/QuickSuggest.sys.mjs b/browser/components/urlbar/QuickSuggest.sys.mjs
@@ -68,10 +68,10 @@ const SUGGEST_PREFS = Object.freeze({
},
"quicksuggest.enabled": {
defaultValues: {
- DE: [["de"], true],
- FR: [["fr"], true],
+ DE: [["de", ...EN_LOCALES], true],
+ FR: [["fr", ...EN_LOCALES], true],
GB: [EN_LOCALES, true],
- IT: [["it"], true],
+ IT: [["it", ...EN_LOCALES], true],
US: [EN_LOCALES, true],
},
},
@@ -121,10 +121,10 @@ const SUGGEST_PREFS = Object.freeze({
},
"importantDates.featureGate": {
defaultValues: {
- DE: [["de"], true],
- FR: [["fr"], true],
+ DE: [["de", ...EN_LOCALES], true],
+ FR: [["fr", ...EN_LOCALES], true],
GB: [EN_LOCALES, true],
- IT: [["it"], true],
+ IT: [["it", ...EN_LOCALES], true],
US: [EN_LOCALES, true],
},
},
diff --git a/browser/components/urlbar/tests/quicksuggest/unit/test_quicksuggest_importantDatesSuggestions.js b/browser/components/urlbar/tests/quicksuggest/unit/test_quicksuggest_importantDatesSuggestions.js
@@ -61,6 +61,27 @@ const REMOTE_SETTINGS_RECORDS = [
],
},
+ // DE region, en-US locale
+ {
+ type: "dynamic-suggestions",
+ suggestion_type: "important_dates",
+ filter_expression: "env.country == 'DE' && env.locale == 'en-US'",
+ attachment: [
+ {
+ keywords: ["de en-us event"],
+ data: {
+ result: {
+ isImportantDate: true,
+ payload: {
+ dates: ["2026-01-02"],
+ name: "DE en-US Event",
+ },
+ },
+ },
+ },
+ ],
+ },
+
// other non-important-dates records
{
type: "dynamic-suggestions",
@@ -367,6 +388,21 @@ add_task(async function otherRegionsAndLocales() {
],
},
+ // DE region, en-US locale (should match)
+ {
+ region: "DE",
+ locale: "en-US",
+ matchingQuery: "de en-us event",
+ expectedResultData: {
+ date: "Friday, January 2, 2026",
+ description: "DE en-US Event",
+ },
+ nonMatchingQueries: [
+ "de de event", // DE region, de locale
+ "event 1", // US region, en-US locale
+ ],
+ },
+
// XX region, en-US locale (should not match)
{
region: "XX",
@@ -382,7 +418,7 @@ add_task(async function otherRegionsAndLocales() {
// US region, de locale (should not match)
{
region: "US",
- locale: "af",
+ locale: "de",
matchingQuery: null,
nonMatchingQueries: [
"de de event", // DE region, de locale
diff --git a/browser/components/urlbar/tests/quicksuggest/unit/test_quicksuggest_offlineDefault.js b/browser/components/urlbar/tests/quicksuggest/unit/test_quicksuggest_offlineDefault.js
@@ -12,7 +12,26 @@ ChromeUtils.defineESModuleGetters(this, {
Preferences: "resource://gre/modules/Preferences.sys.mjs",
});
-const EXPECTED_EU_PREFS = {
+const EN_LOCALES = ["en-CA", "en-GB", "en-US", "en-ZA"];
+
+// Expected prefs when Suggest is disabled.
+const EXPECTED_PREFS_SUGGEST_DISABLED = {
+ "quicksuggest.enabled": false,
+ "quicksuggest.dataCollection.enabled": false,
+ "quicksuggest.settingsUi": QuickSuggest.SETTINGS_UI.NONE,
+ "suggest.quicksuggest.nonsponsored": false,
+ "suggest.quicksuggest.sponsored": false,
+ "addons.featureGate": false,
+ "amp.featureGate": false,
+ "importantDates.featureGate": false,
+ "mdn.featureGate": false,
+ "weather.featureGate": false,
+ "wikipedia.featureGate": false,
+ "yelp.featureGate": false,
+};
+
+// Expected prefs for native locales in EU countries (e.g., `de` locale in Germany).
+const EXPECTED_PREFS_EU_NATIVE = {
"quicksuggest.enabled": true,
"quicksuggest.dataCollection.enabled": false,
"quicksuggest.settingsUi": QuickSuggest.SETTINGS_UI.OFFLINE_ONLY,
@@ -27,55 +46,72 @@ const EXPECTED_EU_PREFS = {
"yelp.featureGate": false,
};
-// All the prefs that are initialized when Suggest is enabled, per region.
-const EXPECTED_PREFS_BY_REGION = {
- DE: EXPECTED_EU_PREFS,
- FR: EXPECTED_EU_PREFS,
- GB: {
- "quicksuggest.enabled": true,
- "quicksuggest.dataCollection.enabled": false,
- "quicksuggest.settingsUi": QuickSuggest.SETTINGS_UI.OFFLINE_ONLY,
- "suggest.quicksuggest.nonsponsored": true,
- "suggest.quicksuggest.sponsored": true,
- "addons.featureGate": false,
- "amp.featureGate": true,
- "importantDates.featureGate": true,
- "mdn.featureGate": false,
- "weather.featureGate": true,
- "wikipedia.featureGate": true,
- "yelp.featureGate": false,
- },
- IT: EXPECTED_EU_PREFS,
- US: {
- "quicksuggest.enabled": true,
- "quicksuggest.dataCollection.enabled": false,
- "quicksuggest.settingsUi": QuickSuggest.SETTINGS_UI.OFFLINE_ONLY,
- "suggest.quicksuggest.nonsponsored": true,
- "suggest.quicksuggest.sponsored": true,
- "addons.featureGate": true,
- "amp.featureGate": true,
- "importantDates.featureGate": true,
- "mdn.featureGate": true,
- "weather.featureGate": true,
- "wikipedia.featureGate": true,
- "yelp.featureGate": true,
- },
+// Expected prefs for `en` locales in EU countries (e.g., `en-US` locale in
+// Germany).
+const EXPECTED_PREFS_EU_EN = {
+ ...EXPECTED_PREFS_SUGGEST_DISABLED,
+ "quicksuggest.enabled": true,
+ "importantDates.featureGate": true,
};
-// Expected prefs when Suggest is disabled.
-const EXPECTED_PREFS_DISABLED = {
- "quicksuggest.enabled": false,
- "quicksuggest.dataCollection.enabled": false,
- "quicksuggest.settingsUi": 0,
- "suggest.quicksuggest.nonsponsored": false,
- "suggest.quicksuggest.sponsored": false,
- "addons.featureGate": false,
- "amp.featureGate": false,
- "importantDates.featureGate": false,
- "mdn.featureGate": false,
- "weather.featureGate": false,
- "wikipedia.featureGate": false,
- "yelp.featureGate": false,
+// Region -> locale -> expected prefs when Suggest is enabled
+const EXPECTED_PREFS_BY_LOCALE_BY_REGION = {
+ DE: {
+ de: EXPECTED_PREFS_EU_NATIVE,
+ ...Object.fromEntries(
+ EN_LOCALES.map(locale => [locale, EXPECTED_PREFS_EU_EN])
+ ),
+ },
+ FR: {
+ fr: EXPECTED_PREFS_EU_NATIVE,
+ ...Object.fromEntries(
+ EN_LOCALES.map(locale => [locale, EXPECTED_PREFS_EU_EN])
+ ),
+ },
+ GB: Object.fromEntries(
+ EN_LOCALES.map(locale => [
+ locale,
+ {
+ "quicksuggest.enabled": true,
+ "quicksuggest.dataCollection.enabled": false,
+ "quicksuggest.settingsUi": QuickSuggest.SETTINGS_UI.OFFLINE_ONLY,
+ "suggest.quicksuggest.nonsponsored": true,
+ "suggest.quicksuggest.sponsored": true,
+ "addons.featureGate": false,
+ "amp.featureGate": true,
+ "importantDates.featureGate": true,
+ "mdn.featureGate": false,
+ "weather.featureGate": true,
+ "wikipedia.featureGate": true,
+ "yelp.featureGate": false,
+ },
+ ])
+ ),
+ IT: {
+ it: EXPECTED_PREFS_EU_NATIVE,
+ ...Object.fromEntries(
+ EN_LOCALES.map(locale => [locale, EXPECTED_PREFS_EU_EN])
+ ),
+ },
+ US: Object.fromEntries(
+ EN_LOCALES.map(locale => [
+ locale,
+ {
+ "quicksuggest.enabled": true,
+ "quicksuggest.dataCollection.enabled": false,
+ "quicksuggest.settingsUi": QuickSuggest.SETTINGS_UI.OFFLINE_ONLY,
+ "suggest.quicksuggest.nonsponsored": true,
+ "suggest.quicksuggest.sponsored": true,
+ "addons.featureGate": true,
+ "amp.featureGate": true,
+ "importantDates.featureGate": true,
+ "mdn.featureGate": true,
+ "weather.featureGate": true,
+ "wikipedia.featureGate": true,
+ "yelp.featureGate": true,
+ },
+ ])
+ ),
};
add_setup(async () => {
@@ -84,28 +120,36 @@ add_setup(async () => {
add_task(async function test() {
let tests = [
- // Suggest should be enabled
- { region: "DE", locale: "de", expectSuggestToBeEnabled: true },
- { region: "FR", locale: "fr", expectSuggestToBeEnabled: true },
- { region: "GB", locale: "en-US", expectSuggestToBeEnabled: true },
- { region: "GB", locale: "en-CA", expectSuggestToBeEnabled: true },
- { region: "GB", locale: "en-GB", expectSuggestToBeEnabled: true },
- { region: "IT", locale: "it", expectSuggestToBeEnabled: true },
- { region: "US", locale: "en-US", expectSuggestToBeEnabled: true },
- { region: "US", locale: "en-CA", expectSuggestToBeEnabled: true },
- { region: "US", locale: "en-GB", expectSuggestToBeEnabled: true },
-
- // Suggest should be disabled
- { region: "CA", locale: "en-US", expectSuggestToBeEnabled: false },
- { region: "CA", locale: "en-CA", expectSuggestToBeEnabled: false },
- { region: "DE", locale: "en-US", expectSuggestToBeEnabled: false },
- { region: "FR", locale: "en-US", expectSuggestToBeEnabled: false },
- { region: "GB", locale: "de", expectSuggestToBeEnabled: false },
- { region: "IT", locale: "en-US", expectSuggestToBeEnabled: false },
- { region: "US", locale: "de", expectSuggestToBeEnabled: false },
+ // Regions/locales where Suggest should be enabled to some extent
+ { region: "DE", locale: "de" },
+ { region: "DE", locale: "en-GB" },
+ { region: "DE", locale: "en-US" },
+
+ { region: "FR", locale: "fr" },
+ { region: "FR", locale: "en-GB" },
+ { region: "FR", locale: "en-US" },
+
+ { region: "GB", locale: "en-US" },
+ { region: "GB", locale: "en-CA" },
+ { region: "GB", locale: "en-GB" },
+
+ { region: "IT", locale: "it" },
+ { region: "IT", locale: "en-GB" },
+ { region: "IT", locale: "en-US" },
+
+ { region: "US", locale: "en-US" },
+ { region: "US", locale: "en-CA" },
+ { region: "US", locale: "en-GB" },
+
+ // Regions/locales where Suggest should be completely disabled
+ { region: "CA", locale: "en-US" },
+ { region: "CA", locale: "en-CA" },
+ { region: "GB", locale: "de" },
+ { region: "US", locale: "de" },
];
- for (let { locale, region, expectSuggestToBeEnabled } of tests) {
- await doTest({ locale, region, expectSuggestToBeEnabled });
+
+ for (let { locale, region } of tests) {
+ await doTest({ locale, region });
}
});
@@ -119,20 +163,11 @@ add_task(async function test() {
* The locale to simulate.
* @param {string} options.region
* The "home" region to simulate.
- * @param {boolean} options.expectSuggestToBeEnabled
- * Whether Suggest is expected to be enabled by default for the given locale
- * and region.
*/
-async function doTest({ locale, region, expectSuggestToBeEnabled }) {
- let expectedPrefs = EXPECTED_PREFS_DISABLED;
- if (expectSuggestToBeEnabled) {
- expectedPrefs = EXPECTED_PREFS_BY_REGION[region];
- Assert.ok(
- expectedPrefs,
- "EXPECTED_PREFS_BY_REGION should have an entry for region since expectSuggestToBeEnabled is true, region=" +
- region
- );
- }
+async function doTest({ locale, region }) {
+ let expectedPrefs =
+ EXPECTED_PREFS_BY_LOCALE_BY_REGION[region]?.[locale] ??
+ EXPECTED_PREFS_SUGGEST_DISABLED;
let defaults = new Preferences({
branch: "browser.urlbar.",