forked from mirrors/gecko-dev
483 lines
15 KiB
JavaScript
483 lines
15 KiB
JavaScript
/* Any copyright is dedicated to the Public Domain.
|
|
* http://creativecommons.org/publicdomain/zero/1.0/ */
|
|
|
|
"use strict";
|
|
|
|
const { ContentTaskUtils } = ChromeUtils.import(
|
|
"resource://testing-common/ContentTaskUtils.jsm"
|
|
);
|
|
|
|
let { TelemetryTestUtils } = ChromeUtils.import(
|
|
"resource://testing-common/TelemetryTestUtils.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.
|
|
*/
|
|
add_task(async function testwhenPrefDisabled() {
|
|
await SpecialPowers.pushPrefEnv({
|
|
set: [["browser.preferences.moreFromMozilla", false]],
|
|
});
|
|
|
|
await openPreferencesViaOpenPreferencesAPI("paneGeneral", {
|
|
leaveOpen: true,
|
|
});
|
|
let doc = gBrowser.contentDocument;
|
|
|
|
let moreFromMozillaCategory = doc.getElementById(
|
|
"category-more-from-mozilla"
|
|
);
|
|
ok(moreFromMozillaCategory, "The category exists");
|
|
ok(moreFromMozillaCategory.hidden, "The category is hidden");
|
|
|
|
BrowserTestUtils.removeTab(gBrowser.selectedTab);
|
|
});
|
|
|
|
add_task(async function testwhenPrefEnabledWithoutTemplatePref() {
|
|
await SpecialPowers.pushPrefEnv({
|
|
set: [["browser.preferences.moreFromMozilla", true]],
|
|
});
|
|
|
|
await openPreferencesViaOpenPreferencesAPI("paneGeneral", {
|
|
leaveOpen: true,
|
|
});
|
|
let doc = gBrowser.contentDocument;
|
|
|
|
let moreFromMozillaCategory = doc.getElementById(
|
|
"category-more-from-mozilla"
|
|
);
|
|
ok(moreFromMozillaCategory, "The category exists");
|
|
ok(!moreFromMozillaCategory.hidden, "The category is not hidden");
|
|
|
|
let productCard = doc.querySelector(".mozilla-product-item");
|
|
ok(productCard, "productCard found");
|
|
|
|
BrowserTestUtils.removeTab(gBrowser.selectedTab);
|
|
});
|
|
|
|
add_task(async function test_aboutpreferences_event_telemetry() {
|
|
Services.telemetry.clearEvents();
|
|
Services.telemetry.setEventRecordingEnabled("aboutpreferences", true);
|
|
|
|
await SpecialPowers.pushPrefEnv({
|
|
set: [["browser.preferences.moreFromMozilla", true]],
|
|
});
|
|
await openPreferencesViaOpenPreferencesAPI("paneGeneral", {
|
|
leaveOpen: true,
|
|
});
|
|
|
|
let doc = gBrowser.contentDocument;
|
|
let moreFromMozillaCategory = doc.getElementById(
|
|
"category-more-from-mozilla"
|
|
);
|
|
|
|
let clickedPromise = ContentTaskUtils.waitForEvent(
|
|
moreFromMozillaCategory,
|
|
"click"
|
|
);
|
|
moreFromMozillaCategory.click();
|
|
await clickedPromise;
|
|
|
|
TelemetryTestUtils.assertEvents(
|
|
[["aboutpreferences", "show", "initial", "paneGeneral"]],
|
|
{ category: "aboutpreferences", method: "show", object: "initial" },
|
|
{ clear: false }
|
|
);
|
|
TelemetryTestUtils.assertEvents(
|
|
[["aboutpreferences", "show", "click", "paneMoreFromMozilla"]],
|
|
{ category: "aboutpreferences", method: "show", object: "click" },
|
|
{ clear: false }
|
|
);
|
|
TelemetryTestUtils.assertNumberOfEvents(2);
|
|
BrowserTestUtils.removeTab(gBrowser.selectedTab);
|
|
});
|
|
|
|
add_task(async function test_aboutpreferences_simple_template() {
|
|
await SpecialPowers.pushPrefEnv({
|
|
set: [
|
|
["browser.preferences.moreFromMozilla", true],
|
|
["browser.preferences.moreFromMozilla.template", "simple"],
|
|
],
|
|
});
|
|
await openPreferencesViaOpenPreferencesAPI("paneGeneral", {
|
|
leaveOpen: true,
|
|
});
|
|
|
|
let doc = gBrowser.contentDocument;
|
|
let moreFromMozillaCategory = doc.getElementById(
|
|
"category-more-from-mozilla"
|
|
);
|
|
|
|
let clickedPromise = ContentTaskUtils.waitForEvent(
|
|
moreFromMozillaCategory,
|
|
"click"
|
|
);
|
|
moreFromMozillaCategory.click();
|
|
await clickedPromise;
|
|
|
|
let productCards = doc.querySelectorAll("div.simple");
|
|
Assert.ok(productCards, "The product cards from simple template found");
|
|
Assert.equal(productCards.length, 3, "3 product cards displayed");
|
|
|
|
let qrCodeButtons = doc.querySelectorAll('.qr-code-box[hidden="false"]');
|
|
Assert.equal(qrCodeButtons.length, 1, "1 qr-code box displayed");
|
|
|
|
BrowserTestUtils.removeTab(gBrowser.selectedTab);
|
|
});
|
|
|
|
add_task(async function test_aboutpreferences_advanced_template() {
|
|
await SpecialPowers.pushPrefEnv({
|
|
set: [
|
|
["browser.preferences.moreFromMozilla", true],
|
|
["browser.preferences.moreFromMozilla.template", "advanced"],
|
|
["browser.vpn_promo.enabled", true],
|
|
],
|
|
});
|
|
await openPreferencesViaOpenPreferencesAPI("paneGeneral", {
|
|
leaveOpen: true,
|
|
});
|
|
|
|
let doc = gBrowser.contentDocument;
|
|
let moreFromMozillaCategory = doc.getElementById(
|
|
"category-more-from-mozilla"
|
|
);
|
|
|
|
let clickedPromise = ContentTaskUtils.waitForEvent(
|
|
moreFromMozillaCategory,
|
|
"click"
|
|
);
|
|
moreFromMozillaCategory.click();
|
|
await clickedPromise;
|
|
|
|
let productCards = doc.querySelectorAll("vbox.advanced");
|
|
Assert.ok(productCards, "The product cards from advanced template found");
|
|
Assert.equal(productCards.length, 3, "3 product cards displayed");
|
|
Assert.deepEqual(
|
|
Array.from(productCards).map(
|
|
node => node.querySelector(".product-img")?.id
|
|
),
|
|
["firefox-mobile-image", "mozilla-vpn-image", "mozilla-rally-image"],
|
|
"Advanced template product marketing images"
|
|
);
|
|
|
|
let qrCodeButtons = doc.querySelectorAll('.qr-code-box[hidden="false"]');
|
|
Assert.equal(qrCodeButtons.length, 1, "1 qr-code box displayed");
|
|
|
|
BrowserTestUtils.removeTab(gBrowser.selectedTab);
|
|
});
|
|
|
|
add_task(async function test_aboutpreferences_clickBtnVPN() {
|
|
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.mozilla.org/products/vpn/";
|
|
let tabOpened = BrowserTestUtils.waitForNewTab(gBrowser, url =>
|
|
url.startsWith(expectedUrl)
|
|
);
|
|
let vpnButton = doc.getElementById("simple-mozillaVPN");
|
|
vpnButton.doCommand();
|
|
let openedTab = await tabOpened;
|
|
Assert.ok(gBrowser.selectedBrowser.documentURI.spec.startsWith(expectedUrl));
|
|
|
|
let searchParams = new URL(gBrowser.selectedBrowser.documentURI.spec)
|
|
.searchParams;
|
|
Assert.equal(
|
|
searchParams.get("utm_source"),
|
|
"about-prefs",
|
|
"expected utm_source sent"
|
|
);
|
|
Assert.equal(
|
|
searchParams.get("utm_campaign"),
|
|
"morefrommozilla",
|
|
"utm_campaign set"
|
|
);
|
|
Assert.equal(
|
|
searchParams.get("utm_medium"),
|
|
"firefox-desktop",
|
|
"utm_medium set"
|
|
);
|
|
Assert.equal(
|
|
searchParams.get("entrypoint_experiment"),
|
|
"morefrommozilla-experiment-1846",
|
|
"entrypoint_experiment set"
|
|
);
|
|
Assert.equal(
|
|
searchParams.get("utm_content"),
|
|
"fxvt-113-a-na",
|
|
"utm_content set"
|
|
);
|
|
Assert.equal(
|
|
searchParams.get("entrypoint_variation"),
|
|
"treatment-simple",
|
|
"entrypoint_variation set"
|
|
);
|
|
|
|
BrowserTestUtils.removeTab(openedTab);
|
|
BrowserTestUtils.removeTab(tab);
|
|
});
|
|
|
|
add_task(async function test_aboutpreferences_search() {
|
|
await SpecialPowers.pushPrefEnv({
|
|
set: [
|
|
["browser.preferences.moreFromMozilla", true],
|
|
["browser.preferences.moreFromMozilla.template", "advanced"],
|
|
],
|
|
});
|
|
|
|
await openPreferencesViaOpenPreferencesAPI(null, {
|
|
leaveOpen: true,
|
|
});
|
|
|
|
await runSearchInput("Rally");
|
|
|
|
let doc = gBrowser.contentDocument;
|
|
let tab = gBrowser.selectedTab;
|
|
|
|
let productCards = doc.querySelectorAll(".mozilla-product-item");
|
|
Assert.equal(productCards.length, 3, "All products in the group are found");
|
|
let [mobile, vpn, rally] = productCards;
|
|
Assert.ok(BrowserTestUtils.is_hidden(mobile), "Mobile hidden");
|
|
Assert.ok(BrowserTestUtils.is_hidden(vpn), "VPN hidden");
|
|
Assert.ok(BrowserTestUtils.is_visible(rally), "Rally shown");
|
|
|
|
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);
|
|
});
|
|
|
|
add_task(
|
|
async function test_rally_promo_with_approved_home_region_and_language() {
|
|
// Only show the Rally promo when US is the region and English is the langauge
|
|
setupRegions("US");
|
|
|
|
await openPreferencesViaOpenPreferencesAPI("paneMoreFromMozilla", {
|
|
leaveOpen: true,
|
|
});
|
|
|
|
let doc = gBrowser.contentDocument;
|
|
let rallyPromoCard = doc.getElementById("mozilla-rally");
|
|
let mobileCard = doc.getElementById("firefox-mobile");
|
|
ok(rallyPromoCard, "The Rally promo is visible");
|
|
ok(mobileCard, "The Mobile promo is visible");
|
|
|
|
setupRegions(initialHomeRegion, intialCurrentRegion); // revert changes to regions
|
|
BrowserTestUtils.removeTab(gBrowser.selectedTab);
|
|
}
|
|
);
|
|
|
|
add_task(async function test_rally_promo_with_unapproved_home_region() {
|
|
setupRegions("IS");
|
|
|
|
await openPreferencesViaOpenPreferencesAPI("paneMoreFromMozilla", {
|
|
leaveOpen: true,
|
|
});
|
|
|
|
let doc = gBrowser.contentDocument;
|
|
let rallyPromoCard = doc.getElementById("mozilla-rally");
|
|
let mobileCard = doc.getElementById("firefox-mobile");
|
|
ok(!rallyPromoCard, "The Rally 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_rally_promo_with_unapproved_current_region() {
|
|
setupRegions("US", "IS");
|
|
|
|
await openPreferencesViaOpenPreferencesAPI("paneMoreFromMozilla", {
|
|
leaveOpen: true,
|
|
});
|
|
|
|
let doc = gBrowser.contentDocument;
|
|
let rallyPromoCard = doc.getElementById("mozilla-rally");
|
|
let mobileCard = doc.getElementById("firefox-mobile");
|
|
ok(!rallyPromoCard, "The Rally 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_rally_promo_with_unapproved_language() {
|
|
function setLanguage(language) {
|
|
Services.locale.availableLocales = [language];
|
|
Services.locale.requestedLocales = [language];
|
|
}
|
|
// Rally promo should be hidden in the US for languages other than English
|
|
setupRegions("US");
|
|
const initialLanguage = Services.locale.appLocaleAsBCP47;
|
|
setLanguage("ko-KR");
|
|
|
|
await openPreferencesViaOpenPreferencesAPI("paneMoreFromMozilla", {
|
|
leaveOpen: true,
|
|
});
|
|
|
|
let doc = gBrowser.contentDocument;
|
|
let rallyPromoCard = doc.getElementById("mozilla-rally");
|
|
let mobileCard = doc.getElementById("firefox-mobile");
|
|
ok(!rallyPromoCard, "The Rally promo is not visible");
|
|
ok(mobileCard, "The Mobile promo is visible");
|
|
|
|
setupRegions(initialHomeRegion, intialCurrentRegion); // revert changes to regions
|
|
// revert changes to language
|
|
setLanguage(initialLanguage);
|
|
BrowserTestUtils.removeTab(gBrowser.selectedTab);
|
|
});
|