1 /* Any copyright is dedicated to the Public Domain.
2 * http://creativecommons.org/publicdomain/zero/1.0/ */
6 const { EnterprisePolicyTesting } = ChromeUtils.importESModule(
7 "resource://testing-common/EnterprisePolicyTesting.sys.mjs"
10 let { TelemetryTestUtils } = ChromeUtils.importESModule(
11 "resource://testing-common/TelemetryTestUtils.sys.mjs"
14 const TOTAL_PROMO_CARDS_COUNT = 4;
16 async function clearPolicies() {
17 // Ensure no active policies are set
18 await EnterprisePolicyTesting.setupPolicyEngineWithJson("");
21 // The Relay promo is only shown if the default FxA instance is detected, and
22 // tests override it to a dummy address, so we need to make the dummy address
23 // appear like it's the default (using the actual default instance might cause a
24 // remote connection, crashing the test harness).
25 add_setup(mockDefaultFxAInstance);
27 add_task(async function testDefaultUIWithoutTemplatePref() {
28 await clearPolicies();
29 await openPreferencesViaOpenPreferencesAPI("paneGeneral", {
32 let doc = gBrowser.contentDocument;
33 let tab = gBrowser.selectedTab;
35 let moreFromMozillaCategory = doc.getElementById(
36 "category-more-from-mozilla"
38 ok(moreFromMozillaCategory, "The category exists");
39 ok(!moreFromMozillaCategory.hidden, "The category is not hidden");
41 moreFromMozillaCategory.click();
43 let productCards = doc.querySelectorAll(".mozilla-product-item.simple");
44 Assert.ok(productCards, "Default UI uses simple template");
47 TOTAL_PROMO_CARDS_COUNT,
48 "All product cards displayed"
51 const expectedUrl = "https://www.mozilla.org/firefox/browsers/mobile/";
52 let tabOpened = BrowserTestUtils.waitForNewTab(gBrowser, url =>
53 url.startsWith(expectedUrl)
55 let mobileLink = doc.getElementById("default-fxMobile");
57 let openedTab = await tabOpened;
58 Assert.ok(gBrowser.selectedBrowser.documentURI.spec.startsWith(expectedUrl));
60 let searchParams = new URL(gBrowser.selectedBrowser.documentURI.spec)
63 searchParams.get("utm_source"),
65 "expected utm_source sent"
68 searchParams.get("utm_campaign"),
73 searchParams.get("utm_medium"),
78 searchParams.get("utm_content"),
80 "default utm_content set"
83 !searchParams.has("entrypoint_variation"),
84 "entrypoint_variation should not be set"
87 !searchParams.has("entrypoint_experiment"),
88 "entrypoint_experiment should not be set"
90 BrowserTestUtils.removeTab(openedTab);
91 BrowserTestUtils.removeTab(tab);
94 add_task(async function testDefaulEmailClick() {
95 await clearPolicies();
96 await openPreferencesViaOpenPreferencesAPI("paneGeneral", {
99 let doc = gBrowser.contentDocument;
100 let tab = gBrowser.selectedTab;
102 let moreFromMozillaCategory = doc.getElementById(
103 "category-more-from-mozilla"
105 moreFromMozillaCategory.click();
107 const expectedUrl = "https://www.mozilla.org/firefox/mobile/get-app/?v=mfm";
108 let sendEmailLink = doc.getElementById("default-qr-code-send-email");
111 sendEmailLink.href.startsWith(expectedUrl),
112 `Expected URL ${sendEmailLink.href}`
115 let searchParams = new URL(sendEmailLink.href).searchParams;
116 Assert.equal(searchParams.get("v"), "mfm", "expected send email param set");
117 BrowserTestUtils.removeTab(tab);
121 * Test that we don't show moreFromMozilla pane when it's disabled.
123 add_task(async function testwhenPrefDisabled() {
124 await SpecialPowers.pushPrefEnv({
125 set: [["browser.preferences.moreFromMozilla", false]],
128 await openPreferencesViaOpenPreferencesAPI("paneGeneral", {
131 let doc = gBrowser.contentDocument;
133 let moreFromMozillaCategory = doc.getElementById(
134 "category-more-from-mozilla"
136 ok(moreFromMozillaCategory, "The category exists");
137 ok(moreFromMozillaCategory.hidden, "The category is hidden");
139 BrowserTestUtils.removeTab(gBrowser.selectedTab);
142 add_task(async function test_aboutpreferences_event_telemetry() {
143 Services.telemetry.clearEvents();
144 Services.telemetry.setEventRecordingEnabled("aboutpreferences", true);
146 await SpecialPowers.pushPrefEnv({
147 set: [["browser.preferences.moreFromMozilla", true]],
149 await openPreferencesViaOpenPreferencesAPI("paneGeneral", {
153 let doc = gBrowser.contentDocument;
154 let moreFromMozillaCategory = doc.getElementById(
155 "category-more-from-mozilla"
158 let clickedPromise = BrowserTestUtils.waitForEvent(
159 moreFromMozillaCategory,
162 moreFromMozillaCategory.click();
163 await clickedPromise;
165 TelemetryTestUtils.assertEvents(
166 [["aboutpreferences", "show", "initial", "paneGeneral"]],
167 { category: "aboutpreferences", method: "show", object: "initial" },
170 TelemetryTestUtils.assertEvents(
171 [["aboutpreferences", "show", "click", "paneMoreFromMozilla"]],
172 { category: "aboutpreferences", method: "show", object: "click" },
175 TelemetryTestUtils.assertNumberOfEvents(2);
176 BrowserTestUtils.removeTab(gBrowser.selectedTab);
179 add_task(async function test_aboutpreferences_simple_template() {
180 await clearPolicies();
181 await SpecialPowers.pushPrefEnv({
183 ["browser.preferences.moreFromMozilla", true],
184 ["browser.preferences.moreFromMozilla.template", "simple"],
187 await openPreferencesViaOpenPreferencesAPI("paneGeneral", {
191 let doc = gBrowser.contentDocument;
192 let moreFromMozillaCategory = doc.getElementById(
193 "category-more-from-mozilla"
196 moreFromMozillaCategory.click();
198 let productCards = doc.querySelectorAll(".mozilla-product-item");
199 Assert.ok(productCards, "The product cards from simple template found");
202 TOTAL_PROMO_CARDS_COUNT,
203 "All product cards displayed"
206 let qrCodeButtons = doc.querySelectorAll('.qr-code-box[hidden="false"]');
207 Assert.equal(qrCodeButtons.length, 1, "1 qr-code box displayed");
209 BrowserTestUtils.removeTab(gBrowser.selectedTab);
212 add_task(async function test_aboutpreferences_clickBtnVPN() {
213 await clearPolicies();
214 await SpecialPowers.pushPrefEnv({
216 ["browser.preferences.moreFromMozilla", true],
217 ["browser.preferences.moreFromMozilla.template", "simple"],
220 await openPreferencesViaOpenPreferencesAPI("paneMoreFromMozilla", {
224 let doc = gBrowser.contentDocument;
225 let tab = gBrowser.selectedTab;
227 let productCards = doc.querySelectorAll(".mozilla-product-item.simple");
228 Assert.ok(productCards, "Simple template loaded");
230 const expectedUrl = "https://www.mozilla.org/products/vpn/";
231 let tabOpened = BrowserTestUtils.waitForNewTab(gBrowser, url =>
232 url.startsWith(expectedUrl)
235 let vpnButton = doc.getElementById("simple-mozillaVPN");
238 let openedTab = await tabOpened;
239 Assert.ok(gBrowser.selectedBrowser.documentURI.spec.startsWith(expectedUrl));
241 let searchParams = new URL(gBrowser.selectedBrowser.documentURI.spec)
244 searchParams.get("utm_source"),
246 "expected utm_source sent"
249 searchParams.get("utm_campaign"),
254 searchParams.get("utm_medium"),
259 searchParams.get("utm_content"),
264 searchParams.get("entrypoint_experiment"),
265 "morefrommozilla-experiment-1846",
266 "entrypoint_experiment set"
269 searchParams.get("entrypoint_variation"),
271 "entrypoint_variation set"
273 BrowserTestUtils.removeTab(openedTab);
274 BrowserTestUtils.removeTab(tab);
277 add_task(async function test_aboutpreferences_clickBtnMobile() {
278 await SpecialPowers.pushPrefEnv({
280 ["browser.preferences.moreFromMozilla", true],
281 ["browser.preferences.moreFromMozilla.template", "simple"],
284 await openPreferencesViaOpenPreferencesAPI("paneMoreFromMozilla", {
288 let doc = gBrowser.contentDocument;
289 let tab = gBrowser.selectedTab;
291 let productCards = doc.querySelectorAll("vbox.simple");
292 Assert.ok(productCards, "Simple template loaded");
294 const expectedUrl = "https://www.mozilla.org/firefox/browsers/mobile/";
296 let mobileUrl = new URL(doc.getElementById("simple-fxMobile").href);
298 Assert.ok(mobileUrl.href.startsWith(expectedUrl));
300 let searchParams = mobileUrl.searchParams;
302 searchParams.get("utm_source"),
304 "expected utm_source sent"
307 searchParams.get("utm_campaign"),
312 searchParams.get("utm_medium"),
317 searchParams.get("utm_content"),
323 BrowserTestUtils.removeTab(tab);
326 add_task(async function test_aboutpreferences_search() {
327 await clearPolicies();
328 await SpecialPowers.pushPrefEnv({
329 set: [["browser.preferences.moreFromMozilla", true]],
332 await openPreferencesViaOpenPreferencesAPI(null, {
336 await runSearchInput("Relay");
338 let doc = gBrowser.contentDocument;
339 let tab = gBrowser.selectedTab;
341 let productCards = doc.querySelectorAll(".mozilla-product-item");
344 TOTAL_PROMO_CARDS_COUNT,
345 "All products in the group are found"
347 let [mobile, monitor, vpn, relay] = productCards;
348 Assert.ok(BrowserTestUtils.isHidden(mobile), "Mobile hidden");
349 Assert.ok(BrowserTestUtils.isHidden(monitor), "Monitor hidden");
350 Assert.ok(BrowserTestUtils.isHidden(vpn), "VPN hidden");
351 Assert.ok(BrowserTestUtils.isVisible(relay), "Relay shown");
353 BrowserTestUtils.removeTab(tab);
356 add_task(async function test_aboutpreferences_clickBtnRelay() {
357 await SpecialPowers.pushPrefEnv({
358 set: [["browser.preferences.moreFromMozilla", true]],
360 await openPreferencesViaOpenPreferencesAPI("paneMoreFromMozilla", {
364 let doc = gBrowser.contentDocument;
365 let tab = gBrowser.selectedTab;
367 let expectedUrl = new URL("https://relay.firefox.com");
368 expectedUrl.searchParams.set("utm_source", "about-prefs");
369 expectedUrl.searchParams.set("utm_campaign", "morefrommozilla");
370 expectedUrl.searchParams.set("utm_medium", "firefox-desktop");
371 expectedUrl.searchParams.set("utm_content", "fxvt-113-a-global");
372 expectedUrl.searchParams.set(
373 "entrypoint_experiment",
374 "morefrommozilla-experiment-1846"
376 expectedUrl.searchParams.set("entrypoint_variation", "treatment-simple");
378 let tabOpened = BrowserTestUtils.waitForDocLoadAndStopIt(
379 expectedUrl.toString(),
383 channel.originalURI.spec,
384 expectedUrl.toString(),
390 doc.getElementById("simple-firefoxRelay").click();
393 BrowserTestUtils.removeTab(gBrowser.selectedTab);
394 BrowserTestUtils.removeTab(tab);