forked from mirrors/gecko-dev
282 lines
9 KiB
JavaScript
282 lines
9 KiB
JavaScript
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
|
|
|
"use strict";
|
|
|
|
const { AboutProtectionsParent } = ChromeUtils.importESModule(
|
|
"resource:///actors/AboutProtectionsParent.sys.mjs"
|
|
);
|
|
|
|
let { Region } = ChromeUtils.importESModule(
|
|
"resource://gre/modules/Region.sys.mjs"
|
|
);
|
|
|
|
const initialHomeRegion = Region._home;
|
|
const initialCurrentRegion = Region._current;
|
|
|
|
async function checkVPNCardVisibility(tab, shouldBeHidden, subscribed = false) {
|
|
await SpecialPowers.spawn(
|
|
tab.linkedBrowser,
|
|
[{ _shouldBeHidden: shouldBeHidden, _subscribed: subscribed }],
|
|
async function({ _shouldBeHidden, _subscribed }) {
|
|
await ContentTaskUtils.waitForCondition(() => {
|
|
const vpnCard = content.document.querySelector(".vpn-card");
|
|
const subscribedStateCorrect =
|
|
vpnCard.classList.contains("subscribed") == _subscribed;
|
|
return (
|
|
ContentTaskUtils.is_hidden(vpnCard) === _shouldBeHidden &&
|
|
subscribedStateCorrect
|
|
);
|
|
});
|
|
|
|
const visibilityState = _shouldBeHidden ? "hidden" : "shown";
|
|
ok(true, `VPN card is ${visibilityState}.`);
|
|
}
|
|
);
|
|
}
|
|
|
|
async function checkVPNPromoBannerVisibility(tab, shouldBeHidden) {
|
|
await SpecialPowers.spawn(
|
|
tab.linkedBrowser,
|
|
[{ _shouldBeHidden: shouldBeHidden }],
|
|
async function({ _shouldBeHidden }) {
|
|
await ContentTaskUtils.waitForCondition(() => {
|
|
const vpnBanner = content.document.querySelector(".vpn-banner");
|
|
return ContentTaskUtils.is_hidden(vpnBanner) === _shouldBeHidden;
|
|
});
|
|
|
|
const visibilityState = _shouldBeHidden ? "hidden" : "shown";
|
|
ok(true, `VPN banner is ${visibilityState}.`);
|
|
}
|
|
);
|
|
}
|
|
|
|
async function setCurrentRegion(region) {
|
|
Region._setCurrentRegion(region);
|
|
}
|
|
|
|
async function setHomeRegion(region) {
|
|
// _setHomeRegion sets a char pref to the value of region. A non-string value will result in an error, so default to an empty string when region is falsey.
|
|
Region._setHomeRegion(region || "");
|
|
}
|
|
|
|
async function revertRegions() {
|
|
setCurrentRegion(initialCurrentRegion);
|
|
setHomeRegion(initialHomeRegion);
|
|
}
|
|
|
|
add_setup(async function() {
|
|
await SpecialPowers.pushPrefEnv({
|
|
set: [
|
|
["browser.contentblocking.report.monitor.enabled", false],
|
|
["browser.contentblocking.report.lockwise.enabled", false],
|
|
["browser.vpn_promo.enabled", true],
|
|
],
|
|
});
|
|
AboutProtectionsParent.setTestOverride(getVPNOverrides(false));
|
|
setCurrentRegion("us");
|
|
const avLocales = Services.locale.availableLocales;
|
|
|
|
registerCleanupFunction(() => {
|
|
Services.locale.availableLocales = avLocales;
|
|
});
|
|
});
|
|
|
|
add_task(async function testVPNCardVisibility() {
|
|
AboutProtectionsParent.setTestOverride(getVPNOverrides(false));
|
|
await promiseSetHomeRegion("us");
|
|
setCurrentRegion("us");
|
|
|
|
let tab = await BrowserTestUtils.openNewForegroundTab({
|
|
url: "about:protections",
|
|
gBrowser,
|
|
});
|
|
|
|
info("Enable showing the VPN card");
|
|
await SpecialPowers.pushPrefEnv({
|
|
set: [
|
|
["browser.vpn_promo.enabled", true],
|
|
["browser.contentblocking.report.vpn_regions", "us,ca,nz,sg,my,gb"],
|
|
[
|
|
"browser.vpn_promo.disallowed_regions",
|
|
"ae,by,cn,cu,iq,ir,kp,om,ru,sd,sy,tm,tr,ua",
|
|
],
|
|
],
|
|
});
|
|
|
|
info(
|
|
"Check that vpn card is hidden if neither the user's home nor current location is on the regions list."
|
|
);
|
|
AboutProtectionsParent.setTestOverride(getVPNOverrides(false));
|
|
setCurrentRegion("ls");
|
|
await promiseSetHomeRegion("ls");
|
|
await BrowserTestUtils.reloadTab(tab);
|
|
await checkVPNCardVisibility(tab, true);
|
|
|
|
info(
|
|
"Check that vpn card is hidden if user's location is in the list of disallowed regions."
|
|
);
|
|
AboutProtectionsParent.setTestOverride(getVPNOverrides(false));
|
|
setCurrentRegion("sy");
|
|
await BrowserTestUtils.reloadTab(tab);
|
|
await checkVPNCardVisibility(tab, true);
|
|
|
|
info(
|
|
"Check that vpn card shows a different version if user has subscribed to Mozilla vpn."
|
|
);
|
|
AboutProtectionsParent.setTestOverride(getVPNOverrides(true));
|
|
setCurrentRegion("us");
|
|
await BrowserTestUtils.reloadTab(tab);
|
|
await checkVPNCardVisibility(tab, false, true);
|
|
|
|
info(
|
|
"VPN card should be hidden when vpn not enabled, though all other conditions are true"
|
|
);
|
|
await SpecialPowers.pushPrefEnv({
|
|
set: [["browser.vpn_promo.enabled", false]],
|
|
});
|
|
await BrowserTestUtils.reloadTab(tab);
|
|
await checkVPNCardVisibility(tab, true);
|
|
|
|
await BrowserTestUtils.removeTab(tab);
|
|
revertRegions();
|
|
});
|
|
|
|
add_task(async function testVPNPromoBanner() {
|
|
AboutProtectionsParent.setTestOverride(getVPNOverrides(false));
|
|
|
|
let tab = await BrowserTestUtils.openNewForegroundTab({
|
|
url: "about:protections",
|
|
gBrowser,
|
|
});
|
|
|
|
info("Enable showing the VPN card and banner");
|
|
await SpecialPowers.pushPrefEnv({
|
|
set: [
|
|
["browser.vpn_promo.enabled", true],
|
|
["browser.contentblocking.report.vpn_regions", "us,ca,nz,sg,my,gb"],
|
|
[
|
|
"browser.vpn_promo.disallowed_regions",
|
|
"ae,by,cn,cu,iq,ir,kp,om,ru,sd,sy,tm,tr,ua",
|
|
],
|
|
["browser.contentblocking.report.hide_vpn_banner", false],
|
|
],
|
|
});
|
|
|
|
info("Check that vpn banner is shown if user's region is supported");
|
|
setCurrentRegion("us");
|
|
await BrowserTestUtils.reloadTab(tab);
|
|
await checkVPNPromoBannerVisibility(tab, false);
|
|
|
|
is(
|
|
Services.prefs.getBoolPref(
|
|
"browser.contentblocking.report.hide_vpn_banner",
|
|
false
|
|
),
|
|
true,
|
|
"After showing the banner once, the pref to hide the VPN banner is flipped"
|
|
);
|
|
info("The banner does not show when the pref to hide it is flipped");
|
|
await BrowserTestUtils.reloadTab(tab);
|
|
await checkVPNPromoBannerVisibility(tab, true);
|
|
|
|
// VPN Banner flips this pref each time it shows, flip back between each instruction.
|
|
await SpecialPowers.pushPrefEnv({
|
|
set: [["browser.contentblocking.report.hide_vpn_banner", false]],
|
|
});
|
|
|
|
info(
|
|
"Check that VPN banner is hidden if user's location is not on the regions list."
|
|
);
|
|
AboutProtectionsParent.setTestOverride(getVPNOverrides(false));
|
|
setCurrentRegion("ls");
|
|
await setHomeRegion("ls'");
|
|
await BrowserTestUtils.reloadTab(tab);
|
|
await checkVPNPromoBannerVisibility(tab, true);
|
|
|
|
info(
|
|
"Check that VPN banner is hidden if user's location is in the disallowed regions list."
|
|
);
|
|
AboutProtectionsParent.setTestOverride(getVPNOverrides(false));
|
|
setCurrentRegion("sy");
|
|
await BrowserTestUtils.reloadTab(tab);
|
|
await checkVPNPromoBannerVisibility(tab, true);
|
|
|
|
info(
|
|
"VPN banner should be hidden when vpn not enabled, though all other conditions are true"
|
|
);
|
|
await SpecialPowers.pushPrefEnv({
|
|
set: [
|
|
["browser.vpn_promo.enabled", false],
|
|
["browser.contentblocking.report.hide_vpn_banner", false],
|
|
],
|
|
});
|
|
await BrowserTestUtils.reloadTab(tab);
|
|
await checkVPNPromoBannerVisibility(tab, true);
|
|
|
|
await SpecialPowers.pushPrefEnv({
|
|
set: [
|
|
["browser.vpn_promo.enabled", true],
|
|
["browser.contentblocking.report.hide_vpn_banner", false],
|
|
],
|
|
});
|
|
|
|
info("If user is subscribed to VPN already the promo banner should not show");
|
|
AboutProtectionsParent.setTestOverride(getVPNOverrides(true));
|
|
setCurrentRegion("us");
|
|
await BrowserTestUtils.reloadTab(tab);
|
|
await checkVPNPromoBannerVisibility(tab, true);
|
|
|
|
await BrowserTestUtils.removeTab(tab);
|
|
revertRegions();
|
|
});
|
|
|
|
// Expect the vpn card and banner to not show as we are expressly excluding China. Even when cn is in the supported region pref.
|
|
add_task(async function testVPNDoesNotShowChina() {
|
|
AboutProtectionsParent.setTestOverride(getVPNOverrides(false));
|
|
setCurrentRegion("us");
|
|
let tab = await BrowserTestUtils.openNewForegroundTab({
|
|
url: "about:protections",
|
|
gBrowser,
|
|
});
|
|
|
|
info("Enable showing the VPN card and banners");
|
|
await SpecialPowers.pushPrefEnv({
|
|
set: [
|
|
["browser.vpn_promo.enabled", true],
|
|
["browser.contentblocking.report.vpn_regions", "us,ca,nz,sg,my,gb,cn"],
|
|
[
|
|
"browser.vpn_promo.disallowed_regions",
|
|
"ae,by,cn,cu,iq,ir,kp,om,ru,sd,sy,tm,tr,ua",
|
|
],
|
|
["browser.contentblocking.report.hide_vpn_banner", false],
|
|
],
|
|
});
|
|
|
|
info(
|
|
"set home location to China, even though user is currently in the US, expect vpn card to be hidden"
|
|
);
|
|
await promiseSetHomeRegion("CN");
|
|
await BrowserTestUtils.reloadTab(tab);
|
|
await checkVPNPromoBannerVisibility(tab, true);
|
|
await BrowserTestUtils.reloadTab(tab);
|
|
await checkVPNCardVisibility(tab, true);
|
|
|
|
// VPN Banner flips this pref each time it shows, flip back between each instruction.
|
|
await SpecialPowers.pushPrefEnv({
|
|
set: [["browser.contentblocking.report.hide_vpn_banner", false]],
|
|
});
|
|
|
|
info("home region is US, but current location is China");
|
|
AboutProtectionsParent.setTestOverride(getVPNOverrides(false));
|
|
await promiseSetHomeRegion("US");
|
|
setCurrentRegion("CN");
|
|
await BrowserTestUtils.reloadTab(tab);
|
|
await checkVPNPromoBannerVisibility(tab, true);
|
|
await BrowserTestUtils.reloadTab(tab);
|
|
await checkVPNCardVisibility(tab, true);
|
|
|
|
await BrowserTestUtils.removeTab(tab);
|
|
revertRegions();
|
|
});
|