tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

browser_moreFromMozilla_locales.js (11866B)


      1 /* Any copyright is dedicated to the Public Domain.
      2 * http://creativecommons.org/publicdomain/zero/1.0/ */
      3 
      4 "use strict";
      5 
      6 const { EnterprisePolicyTesting } = ChromeUtils.importESModule(
      7  "resource://testing-common/EnterprisePolicyTesting.sys.mjs"
      8 );
      9 
     10 let { Region } = ChromeUtils.importESModule(
     11  "resource://gre/modules/Region.sys.mjs"
     12 );
     13 
     14 const initialHomeRegion = Region._home;
     15 const initialCurrentRegion = Region._current;
     16 
     17 // Helper to run tests for specific regions
     18 async function setupRegions(home, current) {
     19  Region._setHomeRegion(home || "");
     20  Region._setCurrentRegion(current || "");
     21 }
     22 
     23 function setLocale(language) {
     24  Services.locale.availableLocales = [language];
     25  Services.locale.requestedLocales = [language];
     26 }
     27 
     28 async function clearPolicies() {
     29  // Ensure no active policies are set
     30  await EnterprisePolicyTesting.setupPolicyEngineWithJson("");
     31 }
     32 
     33 async function getPromoCards() {
     34  await openPreferencesViaOpenPreferencesAPI("paneMoreFromMozilla", {
     35    leaveOpen: true,
     36  });
     37 
     38  let doc = gBrowser.contentDocument;
     39  let vpnPromoCard = doc.getElementById("mozilla-vpn");
     40  let monitorPromoCard = doc.getElementById("mozilla-monitor");
     41  let mobileCard = doc.getElementById("firefox-mobile");
     42  let relayPromoCard = doc.getElementById("firefox-relay");
     43 
     44  return {
     45    vpnPromoCard,
     46    monitorPromoCard,
     47    mobileCard,
     48    relayPromoCard,
     49  };
     50 }
     51 
     52 let mockFxA, unmockFxA;
     53 
     54 // The Relay promo is only shown if the default FxA instance is detected, and
     55 // tests override it to a dummy address, so we need to make the dummy address
     56 // appear like it's the default (using the actual default instance might cause a
     57 // remote connection, crashing the test harness).
     58 add_setup(async function () {
     59  let { mock, unmock } = await mockDefaultFxAInstance();
     60  mockFxA = mock;
     61  unmockFxA = unmock;
     62 });
     63 
     64 add_task(async function test_VPN_promo_enabled() {
     65  await clearPolicies();
     66  await SpecialPowers.pushPrefEnv({
     67    set: [
     68      ["browser.preferences.moreFromMozilla", true],
     69      ["browser.vpn_promo.enabled", true],
     70    ],
     71  });
     72 
     73  let { vpnPromoCard, mobileCard } = await getPromoCards();
     74 
     75  ok(vpnPromoCard, "The VPN promo is visible");
     76  ok(mobileCard, "The Mobile promo is visible");
     77 
     78  BrowserTestUtils.removeTab(gBrowser.selectedTab);
     79 });
     80 
     81 add_task(async function test_VPN_promo_disabled() {
     82  await clearPolicies();
     83  await SpecialPowers.pushPrefEnv({
     84    set: [["browser.vpn_promo.enabled", false]],
     85  });
     86 
     87  let { vpnPromoCard, mobileCard } = await getPromoCards();
     88 
     89  ok(!vpnPromoCard, "The VPN promo is not visible");
     90  ok(mobileCard, "The Mobile promo is visible");
     91 
     92  Services.prefs.clearUserPref("browser.vpn_promo.enabled");
     93  BrowserTestUtils.removeTab(gBrowser.selectedTab);
     94 });
     95 
     96 add_task(async function test_VPN_promo_in_disallowed_home_region() {
     97  await clearPolicies();
     98  const disallowedRegion = "SY";
     99 
    100  setupRegions(disallowedRegion);
    101 
    102  // Promo should not show in disallowed regions even when vpn_promo pref is enabled
    103  await SpecialPowers.pushPrefEnv({
    104    set: [["browser.vpn_promo.enabled", true]],
    105  });
    106 
    107  let { vpnPromoCard, mobileCard } = await getPromoCards();
    108 
    109  ok(!vpnPromoCard, "The VPN promo is not visible");
    110  ok(mobileCard, "The Mobile promo is visible");
    111 
    112  setupRegions(initialHomeRegion, initialCurrentRegion); // revert changes to regions
    113  BrowserTestUtils.removeTab(gBrowser.selectedTab);
    114 });
    115 
    116 add_task(async function test_VPN_promo_in_illegal_home_region() {
    117  await clearPolicies();
    118  const illegalRegion = "CN";
    119 
    120  setupRegions(illegalRegion);
    121 
    122  // Promo should not show in illegal regions even if the list of disallowed regions is somehow altered (though changing this preference is blocked)
    123  await SpecialPowers.pushPrefEnv({
    124    set: [["browser.vpn_promo.disallowedRegions", "SY, CU"]],
    125  });
    126 
    127  let { vpnPromoCard, mobileCard } = await getPromoCards();
    128 
    129  ok(!vpnPromoCard, "The VPN promo is not visible");
    130  ok(mobileCard, "The Mobile promo is visible");
    131 
    132  setupRegions(initialHomeRegion, initialCurrentRegion); // revert changes to regions
    133  BrowserTestUtils.removeTab(gBrowser.selectedTab);
    134 });
    135 
    136 add_task(async function test_VPN_promo_in_disallowed_current_region() {
    137  await clearPolicies();
    138  const allowedRegion = "US";
    139  const disallowedRegion = "SY";
    140 
    141  setupRegions(allowedRegion, disallowedRegion);
    142 
    143  // Promo should not show in disallowed regions even when vpn_promo pref is enabled
    144  await SpecialPowers.pushPrefEnv({
    145    set: [["browser.vpn_promo.enabled", true]],
    146  });
    147 
    148  let { vpnPromoCard, mobileCard } = await getPromoCards();
    149 
    150  ok(!vpnPromoCard, "The VPN promo is not visible");
    151  ok(mobileCard, "The Mobile promo is visible");
    152 
    153  setupRegions(initialHomeRegion, initialCurrentRegion); // revert changes to regions
    154  BrowserTestUtils.removeTab(gBrowser.selectedTab);
    155 });
    156 
    157 add_task(async function test_VPN_promo_in_illegal_current_region() {
    158  await clearPolicies();
    159  const allowedRegion = "US";
    160  const illegalRegion = "CN";
    161 
    162  setupRegions(allowedRegion, illegalRegion);
    163 
    164  // Promo should not show in illegal regions even if the list of disallowed regions is somehow altered (though changing this preference is blocked)
    165  await SpecialPowers.pushPrefEnv({
    166    set: [["browser.vpn_promo.disallowedRegions", "SY, CU"]],
    167  });
    168 
    169  let { vpnPromoCard, mobileCard } = await getPromoCards();
    170 
    171  ok(!vpnPromoCard, "The VPN promo is not visible");
    172  ok(mobileCard, "The Mobile promo is visible");
    173 
    174  setupRegions(initialHomeRegion, initialCurrentRegion); // revert changes to regions
    175  BrowserTestUtils.removeTab(gBrowser.selectedTab);
    176 });
    177 
    178 add_task(async function test_aboutpreferences_partnerCNRepack() {
    179  let defaultBranch = Services.prefs.getDefaultBranch(null);
    180  defaultBranch.setCharPref("distribution.id", "MozillaOnline");
    181 
    182  await SpecialPowers.pushPrefEnv({
    183    set: [
    184      ["browser.preferences.moreFromMozilla", true],
    185      ["browser.preferences.moreFromMozilla.template", "simple"],
    186    ],
    187  });
    188  await openPreferencesViaOpenPreferencesAPI("paneMoreFromMozilla", {
    189    leaveOpen: true,
    190  });
    191 
    192  let doc = gBrowser.contentDocument;
    193  let tab = gBrowser.selectedTab;
    194 
    195  let productCards = doc.querySelectorAll("vbox.simple");
    196  Assert.ok(productCards, "Simple template loaded");
    197 
    198  const expectedUrl = "https://www.firefox.com.cn/browsers/mobile/";
    199 
    200  let link = doc.getElementById("simple-fxMobile");
    201  Assert.ok(link.getAttribute("href").startsWith(expectedUrl));
    202 
    203  defaultBranch.setCharPref("distribution.id", "");
    204  BrowserTestUtils.removeTab(tab);
    205 });
    206 
    207 add_task(async function test_send_to_device_email_link_for_supported_locale() {
    208  // Email is supported for Brazilian Portuguese
    209  const supportedLocale = "pt-BR";
    210  const initialLocale = Services.locale.appLocaleAsBCP47;
    211  setLocale(supportedLocale);
    212 
    213  await SpecialPowers.pushPrefEnv({
    214    set: [["browser.preferences.moreFromMozilla.template", "simple"]],
    215  });
    216 
    217  await openPreferencesViaOpenPreferencesAPI("paneMoreFromMozilla", {
    218    leaveOpen: true,
    219  });
    220 
    221  let doc = gBrowser.contentDocument;
    222  let emailLink = doc.getElementById("simple-qr-code-send-email");
    223 
    224  ok(!BrowserTestUtils.isHidden(emailLink), "Email link should be visible");
    225 
    226  await SpecialPowers.popPrefEnv();
    227  BrowserTestUtils.removeTab(gBrowser.selectedTab);
    228  setLocale(initialLocale); // revert changes to language
    229 });
    230 
    231 add_task(
    232  async function test_send_to_device_email_link_for_unsupported_locale() {
    233    // Email is not supported for Afrikaans
    234    const unsupportedLocale = "af";
    235    const initialLocale = Services.locale.appLocaleAsBCP47;
    236    setLocale(unsupportedLocale);
    237 
    238    await SpecialPowers.pushPrefEnv({
    239      set: [["browser.preferences.moreFromMozilla.template", "simple"]],
    240    });
    241 
    242    await openPreferencesViaOpenPreferencesAPI("paneMoreFromMozilla", {
    243      leaveOpen: true,
    244    });
    245 
    246    let doc = gBrowser.contentDocument;
    247    let emailLink = doc.getElementById("simple-qr-code-send-email");
    248 
    249    ok(BrowserTestUtils.isHidden(emailLink), "Email link should be hidden");
    250 
    251    await SpecialPowers.popPrefEnv();
    252    BrowserTestUtils.removeTab(gBrowser.selectedTab);
    253    setLocale(initialLocale); // revert changes to language
    254  }
    255 );
    256 
    257 add_task(
    258  async function test_VPN_promo_in_unsupported_current_region_with_supported_home_region() {
    259    await clearPolicies();
    260    const supportedRegion = "US";
    261    const unsupportedRegion = "LY";
    262 
    263    setupRegions(supportedRegion, unsupportedRegion);
    264 
    265    let { vpnPromoCard, mobileCard } = await getPromoCards();
    266 
    267    ok(vpnPromoCard, "The VPN promo is visible");
    268    ok(mobileCard, "The Mobile promo is visible");
    269 
    270    setupRegions(initialHomeRegion, initialCurrentRegion); // revert changes to regions
    271    BrowserTestUtils.removeTab(gBrowser.selectedTab);
    272  }
    273 );
    274 
    275 add_task(
    276  async function test_VPN_promo_in_supported_current_region_with_unsupported_home_region() {
    277    await clearPolicies();
    278    const supportedRegion = "US";
    279    const unsupportedRegion = "LY";
    280 
    281    setupRegions(unsupportedRegion, supportedRegion);
    282 
    283    let { vpnPromoCard, mobileCard } = await getPromoCards();
    284 
    285    ok(vpnPromoCard, "The VPN promo is visible");
    286    ok(mobileCard, "The Mobile promo is visible");
    287 
    288    setupRegions(initialHomeRegion, initialCurrentRegion); // revert changes to regions
    289    BrowserTestUtils.removeTab(gBrowser.selectedTab);
    290  }
    291 );
    292 
    293 add_task(async function test_VPN_promo_with_active_enterprise_policy() {
    294  // set up an arbitrary enterprise policy
    295  await EnterprisePolicyTesting.setupPolicyEngineWithJson({
    296    policies: {
    297      EnableTrackingProtection: {
    298        Value: true,
    299      },
    300    },
    301  });
    302 
    303  let { vpnPromoCard, mobileCard } = await getPromoCards();
    304  ok(!vpnPromoCard, "The VPN promo is not visible");
    305  ok(mobileCard, "The Mobile promo is visible");
    306 
    307  setupRegions(initialHomeRegion, initialCurrentRegion); // revert changes to regions
    308  await clearPolicies();
    309  BrowserTestUtils.removeTab(gBrowser.selectedTab);
    310 });
    311 
    312 add_task(async function test_relay_promo_with_supported_fxa_server() {
    313  await clearPolicies();
    314 
    315  let { relayPromoCard } = await getPromoCards();
    316  ok(relayPromoCard, "The Relay promo is visible");
    317 
    318  BrowserTestUtils.removeTab(gBrowser.selectedTab);
    319 });
    320 
    321 add_task(async function test_relay_promo_with_unsupported_fxa_server() {
    322  await clearPolicies();
    323  // Set the default pref value to something other than the current value so it
    324  // will appear to be user-set and treated as invalid (actually setting the
    325  // pref would cause a remote connection and crash the test harness)
    326  unmockFxA();
    327 
    328  let { relayPromoCard } = await getPromoCards();
    329  ok(!relayPromoCard, "The Relay promo is not visible");
    330 
    331  BrowserTestUtils.removeTab(gBrowser.selectedTab);
    332  mockFxA();
    333 });
    334 
    335 add_task(async function test_Monitor_US_region_desc() {
    336  const supportedRegion = "US";
    337  setupRegions(supportedRegion);
    338 
    339  let { monitorPromoCard } = await getPromoCards();
    340  ok(monitorPromoCard, "The Monitor promo is visible");
    341 
    342  let monitorDescElement =
    343    monitorPromoCard.nextElementSibling.querySelector(".description");
    344  is(
    345    monitorDescElement.getAttribute("data-l10n-id"),
    346    "more-from-moz-mozilla-monitor-global-description",
    347    "US Region desc set"
    348  );
    349 
    350  setupRegions(initialHomeRegion, initialCurrentRegion); // revert changes to regions
    351  BrowserTestUtils.removeTab(gBrowser.selectedTab);
    352 });
    353 
    354 add_task(async function test_Monitor_global_region_desc() {
    355  const supportedRegion = "UK";
    356  setupRegions(supportedRegion);
    357 
    358  let { monitorPromoCard } = await getPromoCards();
    359  ok(monitorPromoCard, "The Monitor promo is visible");
    360 
    361  let monitorDescElement =
    362    monitorPromoCard.nextElementSibling.querySelector(".description");
    363  is(
    364    monitorDescElement.getAttribute("data-l10n-id"),
    365    "more-from-moz-mozilla-monitor-global-description",
    366    "Global Region desc set"
    367  );
    368 
    369  setupRegions(initialHomeRegion, initialCurrentRegion); // revert changes to regions
    370  BrowserTestUtils.removeTab(gBrowser.selectedTab);
    371 });