forked from mirrors/gecko-dev
		
	
		
			
				
	
	
		
			380 lines
		
	
	
	
		
			11 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			380 lines
		
	
	
	
		
			11 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
/* 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 { TelemetryTestUtils } = ChromeUtils.importESModule(
 | 
						|
  "resource://testing-common/TelemetryTestUtils.sys.mjs"
 | 
						|
);
 | 
						|
 | 
						|
async function clearPolicies() {
 | 
						|
  // Ensure no active policies are set
 | 
						|
  await EnterprisePolicyTesting.setupPolicyEngineWithJson("");
 | 
						|
}
 | 
						|
 | 
						|
// 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(mockDefaultFxAInstance);
 | 
						|
 | 
						|
add_task(async function testDefaultUIWithoutTemplatePref() {
 | 
						|
  await clearPolicies();
 | 
						|
  await openPreferencesViaOpenPreferencesAPI("paneGeneral", {
 | 
						|
    leaveOpen: true,
 | 
						|
  });
 | 
						|
  let doc = gBrowser.contentDocument;
 | 
						|
  let tab = gBrowser.selectedTab;
 | 
						|
 | 
						|
  let moreFromMozillaCategory = doc.getElementById(
 | 
						|
    "category-more-from-mozilla"
 | 
						|
  );
 | 
						|
  ok(moreFromMozillaCategory, "The category exists");
 | 
						|
  ok(!moreFromMozillaCategory.hidden, "The category is not hidden");
 | 
						|
 | 
						|
  moreFromMozillaCategory.click();
 | 
						|
 | 
						|
  let productCards = doc.querySelectorAll(".mozilla-product-item.simple");
 | 
						|
  Assert.ok(productCards, "Default UI uses simple template");
 | 
						|
  Assert.equal(productCards.length, 3, "3 product cards displayed");
 | 
						|
 | 
						|
  const expectedUrl = "https://www.mozilla.org/firefox/browsers/mobile/";
 | 
						|
  let tabOpened = BrowserTestUtils.waitForNewTab(gBrowser, url =>
 | 
						|
    url.startsWith(expectedUrl)
 | 
						|
  );
 | 
						|
  let mobileLink = doc.getElementById("default-fxMobile");
 | 
						|
  mobileLink.click();
 | 
						|
  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("utm_content"),
 | 
						|
    "default-global",
 | 
						|
    "default utm_content set"
 | 
						|
  );
 | 
						|
  Assert.ok(
 | 
						|
    !searchParams.has("entrypoint_variation"),
 | 
						|
    "entrypoint_variation should not be set"
 | 
						|
  );
 | 
						|
  Assert.ok(
 | 
						|
    !searchParams.has("entrypoint_experiment"),
 | 
						|
    "entrypoint_experiment should not be set"
 | 
						|
  );
 | 
						|
  BrowserTestUtils.removeTab(openedTab);
 | 
						|
  BrowserTestUtils.removeTab(tab);
 | 
						|
});
 | 
						|
 | 
						|
add_task(async function testDefaulEmailClick() {
 | 
						|
  await clearPolicies();
 | 
						|
  await openPreferencesViaOpenPreferencesAPI("paneGeneral", {
 | 
						|
    leaveOpen: true,
 | 
						|
  });
 | 
						|
  let doc = gBrowser.contentDocument;
 | 
						|
  let tab = gBrowser.selectedTab;
 | 
						|
 | 
						|
  let moreFromMozillaCategory = doc.getElementById(
 | 
						|
    "category-more-from-mozilla"
 | 
						|
  );
 | 
						|
  moreFromMozillaCategory.click();
 | 
						|
 | 
						|
  const expectedUrl = "https://www.mozilla.org/firefox/mobile/get-app/?v=mfm";
 | 
						|
  let sendEmailLink = doc.getElementById("default-qr-code-send-email");
 | 
						|
 | 
						|
  Assert.ok(
 | 
						|
    sendEmailLink.href.startsWith(expectedUrl),
 | 
						|
    `Expected URL ${sendEmailLink.href}`
 | 
						|
  );
 | 
						|
 | 
						|
  let searchParams = new URL(sendEmailLink.href).searchParams;
 | 
						|
  Assert.equal(searchParams.get("v"), "mfm", "expected send email param set");
 | 
						|
  BrowserTestUtils.removeTab(tab);
 | 
						|
});
 | 
						|
 | 
						|
/**
 | 
						|
 * 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 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 = BrowserTestUtils.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 clearPolicies();
 | 
						|
  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"
 | 
						|
  );
 | 
						|
 | 
						|
  moreFromMozillaCategory.click();
 | 
						|
 | 
						|
  let productCards = doc.querySelectorAll(".mozilla-product-item");
 | 
						|
  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_clickBtnVPN() {
 | 
						|
  await clearPolicies();
 | 
						|
  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(".mozilla-product-item.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.click();
 | 
						|
 | 
						|
  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("utm_content"),
 | 
						|
    "fxvt-113-a-global",
 | 
						|
    "utm_content set"
 | 
						|
  );
 | 
						|
  Assert.equal(
 | 
						|
    searchParams.get("entrypoint_experiment"),
 | 
						|
    "morefrommozilla-experiment-1846",
 | 
						|
    "entrypoint_experiment set"
 | 
						|
  );
 | 
						|
  Assert.equal(
 | 
						|
    searchParams.get("entrypoint_variation"),
 | 
						|
    "treatment-simple",
 | 
						|
    "entrypoint_variation set"
 | 
						|
  );
 | 
						|
  BrowserTestUtils.removeTab(openedTab);
 | 
						|
  BrowserTestUtils.removeTab(tab);
 | 
						|
});
 | 
						|
 | 
						|
add_task(async function test_aboutpreferences_clickBtnMobile() {
 | 
						|
  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/firefox/browsers/mobile/";
 | 
						|
 | 
						|
  let mobileUrl = new URL(doc.getElementById("simple-fxMobile").href);
 | 
						|
 | 
						|
  Assert.ok(mobileUrl.href.startsWith(expectedUrl));
 | 
						|
 | 
						|
  let searchParams = mobileUrl.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("utm_content"),
 | 
						|
    "fxvt-113-a-global",
 | 
						|
    "default-global",
 | 
						|
    "utm_content set"
 | 
						|
  );
 | 
						|
 | 
						|
  BrowserTestUtils.removeTab(tab);
 | 
						|
});
 | 
						|
 | 
						|
add_task(async function test_aboutpreferences_search() {
 | 
						|
  await clearPolicies();
 | 
						|
  await SpecialPowers.pushPrefEnv({
 | 
						|
    set: [["browser.preferences.moreFromMozilla", true]],
 | 
						|
  });
 | 
						|
 | 
						|
  await openPreferencesViaOpenPreferencesAPI(null, {
 | 
						|
    leaveOpen: true,
 | 
						|
  });
 | 
						|
 | 
						|
  await runSearchInput("Relay");
 | 
						|
 | 
						|
  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, relay] = productCards;
 | 
						|
  Assert.ok(BrowserTestUtils.is_hidden(mobile), "Mobile hidden");
 | 
						|
  Assert.ok(BrowserTestUtils.is_hidden(vpn), "VPN hidden");
 | 
						|
  Assert.ok(BrowserTestUtils.is_visible(relay), "Relay shown");
 | 
						|
 | 
						|
  BrowserTestUtils.removeTab(tab);
 | 
						|
});
 | 
						|
 | 
						|
add_task(async function test_aboutpreferences_clickBtnRelay() {
 | 
						|
  await SpecialPowers.pushPrefEnv({
 | 
						|
    set: [["browser.preferences.moreFromMozilla", true]],
 | 
						|
  });
 | 
						|
  await openPreferencesViaOpenPreferencesAPI("paneMoreFromMozilla", {
 | 
						|
    leaveOpen: true,
 | 
						|
  });
 | 
						|
 | 
						|
  let doc = gBrowser.contentDocument;
 | 
						|
  let tab = gBrowser.selectedTab;
 | 
						|
 | 
						|
  let expectedUrl = new URL("https://relay.firefox.com");
 | 
						|
  expectedUrl.searchParams.set("utm_source", "about-prefs");
 | 
						|
  expectedUrl.searchParams.set("utm_campaign", "morefrommozilla");
 | 
						|
  expectedUrl.searchParams.set("utm_medium", "firefox-desktop");
 | 
						|
  expectedUrl.searchParams.set("utm_content", "fxvt-113-a-global");
 | 
						|
  expectedUrl.searchParams.set(
 | 
						|
    "entrypoint_experiment",
 | 
						|
    "morefrommozilla-experiment-1846"
 | 
						|
  );
 | 
						|
  expectedUrl.searchParams.set("entrypoint_variation", "treatment-simple");
 | 
						|
 | 
						|
  let tabOpened = BrowserTestUtils.waitForDocLoadAndStopIt(
 | 
						|
    expectedUrl.toString(),
 | 
						|
    gBrowser,
 | 
						|
    channel => {
 | 
						|
      Assert.equal(
 | 
						|
        channel.originalURI.spec,
 | 
						|
        expectedUrl.toString(),
 | 
						|
        "URL matched"
 | 
						|
      );
 | 
						|
      return true;
 | 
						|
    }
 | 
						|
  );
 | 
						|
  doc.getElementById("simple-firefoxRelay").click();
 | 
						|
 | 
						|
  await tabOpened;
 | 
						|
  BrowserTestUtils.removeTab(gBrowser.selectedTab);
 | 
						|
  BrowserTestUtils.removeTab(tab);
 | 
						|
});
 |