summaryrefslogtreecommitdiffstats
path: root/browser/components/preferences/tests/browser_moreFromMozilla_locales.js
diff options
context:
space:
mode:
Diffstat (limited to 'browser/components/preferences/tests/browser_moreFromMozilla_locales.js')
-rw-r--r--browser/components/preferences/tests/browser_moreFromMozilla_locales.js331
1 files changed, 331 insertions, 0 deletions
diff --git a/browser/components/preferences/tests/browser_moreFromMozilla_locales.js b/browser/components/preferences/tests/browser_moreFromMozilla_locales.js
new file mode 100644
index 0000000000..404e22b3ea
--- /dev/null
+++ b/browser/components/preferences/tests/browser_moreFromMozilla_locales.js
@@ -0,0 +1,331 @@
+/* Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/publicdomain/zero/1.0/ */
+
+"use strict";
+
+const { EnterprisePolicyTesting } = ChromeUtils.importESModule(
+ "resource://testing-common/EnterprisePolicyTesting.sys.mjs"
+);
+
+let { Region } = ChromeUtils.importESModule(
+ "resource://gre/modules/Region.sys.mjs"
+);
+
+const initialHomeRegion = Region._home;
+const initialCurrentRegion = Region._current;
+
+// Helper to run tests for specific regions
+async function setupRegions(home, current) {
+ Region._setHomeRegion(home || "");
+ Region._setCurrentRegion(current || "");
+}
+
+function setLocale(language) {
+ Services.locale.availableLocales = [language];
+ Services.locale.requestedLocales = [language];
+}
+
+async function clearPolicies() {
+ // Ensure no active policies are set
+ await EnterprisePolicyTesting.setupPolicyEngineWithJson("");
+}
+
+async function getPromoCards() {
+ await openPreferencesViaOpenPreferencesAPI("paneMoreFromMozilla", {
+ leaveOpen: true,
+ });
+
+ let doc = gBrowser.contentDocument;
+ let vpnPromoCard = doc.getElementById("mozilla-vpn");
+ let mobileCard = doc.getElementById("firefox-mobile");
+ let relayPromoCard = doc.getElementById("firefox-relay");
+
+ return {
+ vpnPromoCard,
+ mobileCard,
+ relayPromoCard,
+ };
+}
+
+let mockFxA, unmockFxA;
+
+// The Relay promo is only shown if the default FxA instance is detected, and
+// tests override it to a dummy address, so we need to make the dummy address
+// appear like it's the default (using the actual default instance might cause a
+// remote connection, crashing the test harness).
+add_setup(async function () {
+ let { mock, unmock } = await mockDefaultFxAInstance();
+ mockFxA = mock;
+ unmockFxA = unmock;
+});
+
+add_task(async function test_VPN_promo_enabled() {
+ await clearPolicies();
+ await SpecialPowers.pushPrefEnv({
+ set: [
+ ["browser.preferences.moreFromMozilla", true],
+ ["browser.vpn_promo.enabled", true],
+ ],
+ });
+
+ let { vpnPromoCard, mobileCard } = await getPromoCards();
+
+ ok(vpnPromoCard, "The VPN promo is visible");
+ ok(mobileCard, "The Mobile promo is visible");
+
+ BrowserTestUtils.removeTab(gBrowser.selectedTab);
+});
+
+add_task(async function test_VPN_promo_disabled() {
+ await clearPolicies();
+ await SpecialPowers.pushPrefEnv({
+ set: [["browser.vpn_promo.enabled", false]],
+ });
+
+ let { vpnPromoCard, mobileCard } = await getPromoCards();
+
+ ok(!vpnPromoCard, "The VPN promo is not visible");
+ ok(mobileCard, "The Mobile promo is visible");
+
+ Services.prefs.clearUserPref("browser.vpn_promo.enabled");
+ BrowserTestUtils.removeTab(gBrowser.selectedTab);
+});
+
+add_task(async function test_VPN_promo_in_disallowed_home_region() {
+ await clearPolicies();
+ const disallowedRegion = "SY";
+
+ setupRegions(disallowedRegion);
+
+ // Promo should not show in disallowed regions even when vpn_promo pref is enabled
+ await SpecialPowers.pushPrefEnv({
+ set: [["browser.vpn_promo.enabled", true]],
+ });
+
+ let { vpnPromoCard, mobileCard } = await getPromoCards();
+
+ ok(!vpnPromoCard, "The VPN promo is not visible");
+ ok(mobileCard, "The Mobile promo is visible");
+
+ setupRegions(initialHomeRegion, initialCurrentRegion); // revert changes to regions
+ BrowserTestUtils.removeTab(gBrowser.selectedTab);
+});
+
+add_task(async function test_VPN_promo_in_illegal_home_region() {
+ await clearPolicies();
+ const illegalRegion = "CN";
+
+ setupRegions(illegalRegion);
+
+ // Promo should not show in illegal regions even if the list of disallowed regions is somehow altered (though changing this preference is blocked)
+ await SpecialPowers.pushPrefEnv({
+ set: [["browser.vpn_promo.disallowedRegions", "SY, CU"]],
+ });
+
+ let { vpnPromoCard, mobileCard } = await getPromoCards();
+
+ ok(!vpnPromoCard, "The VPN promo is not visible");
+ ok(mobileCard, "The Mobile promo is visible");
+
+ setupRegions(initialHomeRegion, initialCurrentRegion); // revert changes to regions
+ BrowserTestUtils.removeTab(gBrowser.selectedTab);
+});
+
+add_task(async function test_VPN_promo_in_disallowed_current_region() {
+ await clearPolicies();
+ const allowedRegion = "US";
+ const disallowedRegion = "SY";
+
+ setupRegions(allowedRegion, disallowedRegion);
+
+ // Promo should not show in disallowed regions even when vpn_promo pref is enabled
+ await SpecialPowers.pushPrefEnv({
+ set: [["browser.vpn_promo.enabled", true]],
+ });
+
+ let { vpnPromoCard, mobileCard } = await getPromoCards();
+
+ ok(!vpnPromoCard, "The VPN promo is not visible");
+ ok(mobileCard, "The Mobile promo is visible");
+
+ setupRegions(initialHomeRegion, initialCurrentRegion); // revert changes to regions
+ BrowserTestUtils.removeTab(gBrowser.selectedTab);
+});
+
+add_task(async function test_VPN_promo_in_illegal_current_region() {
+ await clearPolicies();
+ const allowedRegion = "US";
+ const illegalRegion = "CN";
+
+ setupRegions(allowedRegion, illegalRegion);
+
+ // Promo should not show in illegal regions even if the list of disallowed regions is somehow altered (though changing this preference is blocked)
+ await SpecialPowers.pushPrefEnv({
+ set: [["browser.vpn_promo.disallowedRegions", "SY, CU"]],
+ });
+
+ let { vpnPromoCard, mobileCard } = await getPromoCards();
+
+ ok(!vpnPromoCard, "The VPN promo is not visible");
+ ok(mobileCard, "The Mobile promo is visible");
+
+ setupRegions(initialHomeRegion, initialCurrentRegion); // revert changes to regions
+ BrowserTestUtils.removeTab(gBrowser.selectedTab);
+});
+
+add_task(async function test_aboutpreferences_partnerCNRepack() {
+ let defaultBranch = Services.prefs.getDefaultBranch(null);
+ defaultBranch.setCharPref("distribution.id", "MozillaOnline");
+
+ await SpecialPowers.pushPrefEnv({
+ set: [
+ ["browser.preferences.moreFromMozilla", true],
+ ["browser.preferences.moreFromMozilla.template", "simple"],
+ ],
+ });
+ await openPreferencesViaOpenPreferencesAPI("paneMoreFromMozilla", {
+ leaveOpen: true,
+ });
+
+ let doc = gBrowser.contentDocument;
+ let tab = gBrowser.selectedTab;
+
+ let productCards = doc.querySelectorAll("vbox.simple");
+ Assert.ok(productCards, "Simple template loaded");
+
+ const expectedUrl = "https://www.firefox.com.cn/browsers/mobile/";
+
+ let link = doc.getElementById("simple-fxMobile");
+ Assert.ok(link.getAttribute("href").startsWith(expectedUrl));
+
+ defaultBranch.setCharPref("distribution.id", "");
+ BrowserTestUtils.removeTab(tab);
+});
+
+add_task(async function test_send_to_device_email_link_for_supported_locale() {
+ // Email is supported for Brazilian Portuguese
+ const supportedLocale = "pt-BR";
+ const initialLocale = Services.locale.appLocaleAsBCP47;
+ setLocale(supportedLocale);
+
+ await SpecialPowers.pushPrefEnv({
+ set: [["browser.preferences.moreFromMozilla.template", "simple"]],
+ });
+
+ await openPreferencesViaOpenPreferencesAPI("paneMoreFromMozilla", {
+ leaveOpen: true,
+ });
+
+ let doc = gBrowser.contentDocument;
+ let emailLink = doc.getElementById("simple-qr-code-send-email");
+
+ ok(!BrowserTestUtils.is_hidden(emailLink), "Email link should be visible");
+
+ await SpecialPowers.popPrefEnv();
+ BrowserTestUtils.removeTab(gBrowser.selectedTab);
+ setLocale(initialLocale); // revert changes to language
+});
+
+add_task(
+ async function test_send_to_device_email_link_for_unsupported_locale() {
+ // Email is not supported for Afrikaans
+ const unsupportedLocale = "af";
+ const initialLocale = Services.locale.appLocaleAsBCP47;
+ setLocale(unsupportedLocale);
+
+ await SpecialPowers.pushPrefEnv({
+ set: [["browser.preferences.moreFromMozilla.template", "simple"]],
+ });
+
+ await openPreferencesViaOpenPreferencesAPI("paneMoreFromMozilla", {
+ leaveOpen: true,
+ });
+
+ let doc = gBrowser.contentDocument;
+ let emailLink = doc.getElementById("simple-qr-code-send-email");
+
+ ok(BrowserTestUtils.is_hidden(emailLink), "Email link should be hidden");
+
+ await SpecialPowers.popPrefEnv();
+ BrowserTestUtils.removeTab(gBrowser.selectedTab);
+ setLocale(initialLocale); // revert changes to language
+ }
+);
+
+add_task(
+ async function test_VPN_promo_in_unsupported_current_region_with_supported_home_region() {
+ await clearPolicies();
+ const supportedRegion = "US";
+ const unsupportedRegion = "LY";
+
+ setupRegions(supportedRegion, unsupportedRegion);
+
+ let { vpnPromoCard, mobileCard } = await getPromoCards();
+
+ ok(vpnPromoCard, "The VPN promo is visible");
+ ok(mobileCard, "The Mobile promo is visible");
+
+ setupRegions(initialHomeRegion, initialCurrentRegion); // revert changes to regions
+ BrowserTestUtils.removeTab(gBrowser.selectedTab);
+ }
+);
+
+add_task(
+ async function test_VPN_promo_in_supported_current_region_with_unsupported_home_region() {
+ await clearPolicies();
+ const supportedRegion = "US";
+ const unsupportedRegion = "LY";
+
+ setupRegions(unsupportedRegion, supportedRegion);
+
+ let { vpnPromoCard, mobileCard } = await getPromoCards();
+
+ ok(vpnPromoCard, "The VPN promo is visible");
+ ok(mobileCard, "The Mobile promo is visible");
+
+ setupRegions(initialHomeRegion, initialCurrentRegion); // revert changes to regions
+ BrowserTestUtils.removeTab(gBrowser.selectedTab);
+ }
+);
+
+add_task(async function test_VPN_promo_with_active_enterprise_policy() {
+ // set up an arbitrary enterprise policy
+ await EnterprisePolicyTesting.setupPolicyEngineWithJson({
+ policies: {
+ EnableTrackingProtection: {
+ Value: true,
+ },
+ },
+ });
+
+ let { vpnPromoCard, mobileCard } = await getPromoCards();
+ ok(!vpnPromoCard, "The VPN promo is not visible");
+ ok(mobileCard, "The Mobile promo is visible");
+
+ setupRegions(initialHomeRegion, initialCurrentRegion); // revert changes to regions
+ await clearPolicies();
+ BrowserTestUtils.removeTab(gBrowser.selectedTab);
+});
+
+add_task(async function test_relay_promo_with_supported_fxa_server() {
+ await clearPolicies();
+
+ let { relayPromoCard } = await getPromoCards();
+ ok(relayPromoCard, "The Relay promo is visible");
+
+ BrowserTestUtils.removeTab(gBrowser.selectedTab);
+});
+
+add_task(async function test_relay_promo_with_unsupported_fxa_server() {
+ await clearPolicies();
+ // Set the default pref value to something other than the current value so it
+ // will appear to be user-set and treated as invalid (actually setting the
+ // pref would cause a remote connection and crash the test harness)
+ unmockFxA();
+
+ let { relayPromoCard } = await getPromoCards();
+ ok(!relayPromoCard, "The Relay promo is not visible");
+
+ BrowserTestUtils.removeTab(gBrowser.selectedTab);
+ mockFxA();
+});