Commit e17e8bbb authored by Meg Viar's avatar Meg Viar
Browse files

Bug 1741741 - Avoid showing Mozilla VPN in unsupported countries...

Bug 1741741 - Avoid showing Mozilla VPN in unsupported countries r=dmose,preferences-reviewers,pdahiya,Gijs

Differential Revision: https://phabricator.services.mozilla.com/D133903
parent 2ec3fdc3
Loading
Loading
Loading
Loading
+7 −0
Original line number Diff line number Diff line
@@ -1867,6 +1867,13 @@ pref("browser.contentblocking.report.proxy.enabled", false);
// Disable the mobile promotion by default.
pref("browser.contentblocking.report.show_mobile_app", true);

// Avoid advertising in certain regions. Comma separated string of two letter ISO 3166-1 country codes.
// We're currently blocking all of Ukraine (ua), but would prefer to block just Crimea (ua-43). Currently, the Mozilla Location Service APIs used by Region.jsm only exposes the country, not the subdivision.
pref("browser.vpn_promo.disallowed_regions", "ae,by,cn,cu,iq,ir,kp,om,ru,sd,sy,tm,tr,ua");

// Default to enabling VPN promo messages to be shown when specified and allowed
pref("browser.vpn_promo.enabled", true);

// Enable the vpn card by default.
pref("browser.contentblocking.report.vpn.enabled", true);
// Only show vpn card to certain regions. Comma separated string of two letter ISO 3166-1 country codes.
+1 −0
Original line number Diff line number Diff line
@@ -1606,6 +1606,7 @@ var Policies = {
        "app.update.channel",
        "app.update.lastUpdateTime",
        "app.update.migrated",
        "browser.vpn_promo.disallowed_regions",
      ];

      for (let preference in param) {
+19 −12
Original line number Diff line number Diff line
@@ -93,7 +93,10 @@ var gMoreFromMozillaPane = {
          },
        },
      },
      {
    ];

    if (BrowserUtils.shouldShowVPNPromo()) {
      const vpn = {
        id: "mozilla-vpn",
        title_string_id: "mozilla-vpn-title",
        description_string_id: "mozilla-vpn-description",
@@ -102,8 +105,11 @@ var gMoreFromMozillaPane = {
          label_string_id: "button-mozilla-vpn",
          actionURL: "https://www.mozilla.org/products/vpn/",
        },
      },
      {
      };
      products.push(vpn);
    }

    const rally = {
      id: "mozilla-rally",
      title_string_id: "mozilla-rally-title",
      description_string_id: "mozilla-rally-description",
@@ -112,8 +118,9 @@ var gMoreFromMozillaPane = {
        label_string_id: "button-mozilla-rally",
        actionURL: "https://rally.mozilla.org/",
      },
      },
    ];
    };
    products.push(rally);

    this._productsContainer = document.getElementById(
      "moreFromMozillaCategory"
    );
+1 −0
Original line number Diff line number Diff line
@@ -61,6 +61,7 @@ XPCOMUtils.defineLazyServiceGetters(this, {

XPCOMUtils.defineLazyModuleGetters(this, {
  AMTelemetry: "resource://gre/modules/AddonManager.jsm",
  BrowserUtils: "resource://gre/modules/BrowserUtils.jsm",
  CloudStorage: "resource://gre/modules/CloudStorage.jsm",
  ContextualIdentityService:
    "resource://gre/modules/ContextualIdentityService.jsm",
+151 −0
Original line number Diff line number Diff line
@@ -11,6 +11,21 @@ let { TelemetryTestUtils } = ChromeUtils.import(
  "resource://testing-common/TelemetryTestUtils.jsm"
);

let { RegionTestUtils } = ChromeUtils.import(
  "resource://testing-common/RegionTestUtils.jsm"
);

let { Region } = ChromeUtils.import("resource://gre/modules/Region.jsm");

const initialHomeRegion = Region._home;
const intialCurrentRegion = Region._current;

// Helper to run tests for specific regions
async function setupRegions(home, current) {
  Region._setHomeRegion(home || "");
  Region._setCurrentRegion(current || "");
}

/**
 * Test that we don't show moreFromMozilla pane when it's disabled.
 */
@@ -130,6 +145,7 @@ add_task(async function test_aboutpreferences_advanced_template() {
    set: [
      ["browser.preferences.moreFromMozilla", true],
      ["browser.preferences.moreFromMozilla.template", "advanced"],
      ["browser.vpn_promo.enabled", true],
    ],
  });
  await openPreferencesViaOpenPreferencesAPI("paneGeneral", {
@@ -254,3 +270,138 @@ add_task(async function test_aboutpreferences_search() {

  BrowserTestUtils.removeTab(tab);
});

add_task(async function test_VPN_promo_enabled() {
  await SpecialPowers.pushPrefEnv({
    set: [["browser.vpn_promo.enabled", true]],
  });

  await openPreferencesViaOpenPreferencesAPI("paneMoreFromMozilla", {
    leaveOpen: true,
  });

  let doc = gBrowser.contentDocument;
  let vpnPromoCard = doc.getElementById("mozilla-vpn");
  let mobileCard = doc.getElementById("firefox-mobile");
  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 SpecialPowers.pushPrefEnv({
    set: [["browser.vpn_promo.enabled", false]],
  });

  await openPreferencesViaOpenPreferencesAPI("paneMoreFromMozilla", {
    leaveOpen: true,
  });

  let doc = gBrowser.contentDocument;
  let vpnPromoCard = doc.getElementById("mozilla-vpn");
  let mobileCard = doc.getElementById("firefox-mobile");
  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() {
  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]],
  });

  await openPreferencesViaOpenPreferencesAPI("paneMoreFromMozilla", {
    leaveOpen: true,
  });

  let doc = gBrowser.contentDocument;
  let vpnPromoCard = doc.getElementById("mozilla-vpn");
  let mobileCard = doc.getElementById("firefox-mobile");
  ok(!vpnPromoCard, "The VPN promo is not visible");
  ok(mobileCard, "The Mobile promo is visible");

  setupRegions(initialHomeRegion, intialCurrentRegion); // revert changes to regions
  BrowserTestUtils.removeTab(gBrowser.selectedTab);
});

add_task(async function test_VPN_promo_in_illegal_home_region() {
  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"]],
  });

  await openPreferencesViaOpenPreferencesAPI("paneMoreFromMozilla", {
    leaveOpen: true,
  });

  let doc = gBrowser.contentDocument;
  let vpnPromoCard = doc.getElementById("mozilla-vpn");
  let mobileCard = doc.getElementById("firefox-mobile");
  ok(!vpnPromoCard, "The VPN promo is not visible");
  ok(mobileCard, "The Mobile promo is visible");

  setupRegions(initialHomeRegion, intialCurrentRegion); // revert changes to regions
  BrowserTestUtils.removeTab(gBrowser.selectedTab);
});

add_task(async function test_VPN_promo_in_disallowed_current_region() {
  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]],
  });

  await openPreferencesViaOpenPreferencesAPI("paneMoreFromMozilla", {
    leaveOpen: true,
  });

  let doc = gBrowser.contentDocument;
  let vpnPromoCard = doc.getElementById("mozilla-vpn");
  let mobileCard = doc.getElementById("firefox-mobile");
  ok(!vpnPromoCard, "The VPN promo is not visible");
  ok(mobileCard, "The Mobile promo is visible");

  setupRegions(initialHomeRegion, intialCurrentRegion); // revert changes to regions
  BrowserTestUtils.removeTab(gBrowser.selectedTab);
});

add_task(async function test_VPN_promo_in_illegal_current_region() {
  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"]],
  });

  await openPreferencesViaOpenPreferencesAPI("paneMoreFromMozilla", {
    leaveOpen: true,
  });

  let doc = gBrowser.contentDocument;
  let vpnPromoCard = doc.getElementById("mozilla-vpn");
  let mobileCard = doc.getElementById("firefox-mobile");
  ok(!vpnPromoCard, "The VPN promo is not visible");
  ok(mobileCard, "The Mobile promo is visible");

  setupRegions(initialHomeRegion, intialCurrentRegion); // revert changes to regions
  BrowserTestUtils.removeTab(gBrowser.selectedTab);
});
Loading