Backed out 2 changesets (bug 1908320) for causing wr failures on align-items-baseline...
[gecko.git] / browser / components / preferences / tests / browser_moreFromMozilla.js
blob6cb6d9e119f283a7ddfa4408bda74bb1d0cddc0f
1 /* Any copyright is dedicated to the Public Domain.
2  * http://creativecommons.org/publicdomain/zero/1.0/ */
4 "use strict";
6 const { EnterprisePolicyTesting } = ChromeUtils.importESModule(
7   "resource://testing-common/EnterprisePolicyTesting.sys.mjs"
8 );
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", {
30     leaveOpen: true,
31   });
32   let doc = gBrowser.contentDocument;
33   let tab = gBrowser.selectedTab;
35   let moreFromMozillaCategory = doc.getElementById(
36     "category-more-from-mozilla"
37   );
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");
45   Assert.equal(
46     productCards.length,
47     TOTAL_PROMO_CARDS_COUNT,
48     "All product cards displayed"
49   );
51   const expectedUrl = "https://www.mozilla.org/firefox/browsers/mobile/";
52   let tabOpened = BrowserTestUtils.waitForNewTab(gBrowser, url =>
53     url.startsWith(expectedUrl)
54   );
55   let mobileLink = doc.getElementById("default-fxMobile");
56   mobileLink.click();
57   let openedTab = await tabOpened;
58   Assert.ok(gBrowser.selectedBrowser.documentURI.spec.startsWith(expectedUrl));
60   let searchParams = new URL(gBrowser.selectedBrowser.documentURI.spec)
61     .searchParams;
62   Assert.equal(
63     searchParams.get("utm_source"),
64     "about-prefs",
65     "expected utm_source sent"
66   );
67   Assert.equal(
68     searchParams.get("utm_campaign"),
69     "morefrommozilla",
70     "utm_campaign set"
71   );
72   Assert.equal(
73     searchParams.get("utm_medium"),
74     "firefox-desktop",
75     "utm_medium set"
76   );
77   Assert.equal(
78     searchParams.get("utm_content"),
79     "default-global",
80     "default utm_content set"
81   );
82   Assert.ok(
83     !searchParams.has("entrypoint_variation"),
84     "entrypoint_variation should not be set"
85   );
86   Assert.ok(
87     !searchParams.has("entrypoint_experiment"),
88     "entrypoint_experiment should not be set"
89   );
90   BrowserTestUtils.removeTab(openedTab);
91   BrowserTestUtils.removeTab(tab);
92 });
94 add_task(async function testDefaulEmailClick() {
95   await clearPolicies();
96   await openPreferencesViaOpenPreferencesAPI("paneGeneral", {
97     leaveOpen: true,
98   });
99   let doc = gBrowser.contentDocument;
100   let tab = gBrowser.selectedTab;
102   let moreFromMozillaCategory = doc.getElementById(
103     "category-more-from-mozilla"
104   );
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");
110   Assert.ok(
111     sendEmailLink.href.startsWith(expectedUrl),
112     `Expected URL ${sendEmailLink.href}`
113   );
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.
122  */
123 add_task(async function testwhenPrefDisabled() {
124   await SpecialPowers.pushPrefEnv({
125     set: [["browser.preferences.moreFromMozilla", false]],
126   });
128   await openPreferencesViaOpenPreferencesAPI("paneGeneral", {
129     leaveOpen: true,
130   });
131   let doc = gBrowser.contentDocument;
133   let moreFromMozillaCategory = doc.getElementById(
134     "category-more-from-mozilla"
135   );
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]],
148   });
149   await openPreferencesViaOpenPreferencesAPI("paneGeneral", {
150     leaveOpen: true,
151   });
153   let doc = gBrowser.contentDocument;
154   let moreFromMozillaCategory = doc.getElementById(
155     "category-more-from-mozilla"
156   );
158   let clickedPromise = BrowserTestUtils.waitForEvent(
159     moreFromMozillaCategory,
160     "click"
161   );
162   moreFromMozillaCategory.click();
163   await clickedPromise;
165   TelemetryTestUtils.assertEvents(
166     [["aboutpreferences", "show", "initial", "paneGeneral"]],
167     { category: "aboutpreferences", method: "show", object: "initial" },
168     { clear: false }
169   );
170   TelemetryTestUtils.assertEvents(
171     [["aboutpreferences", "show", "click", "paneMoreFromMozilla"]],
172     { category: "aboutpreferences", method: "show", object: "click" },
173     { clear: false }
174   );
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({
182     set: [
183       ["browser.preferences.moreFromMozilla", true],
184       ["browser.preferences.moreFromMozilla.template", "simple"],
185     ],
186   });
187   await openPreferencesViaOpenPreferencesAPI("paneGeneral", {
188     leaveOpen: true,
189   });
191   let doc = gBrowser.contentDocument;
192   let moreFromMozillaCategory = doc.getElementById(
193     "category-more-from-mozilla"
194   );
196   moreFromMozillaCategory.click();
198   let productCards = doc.querySelectorAll(".mozilla-product-item");
199   Assert.ok(productCards, "The product cards from simple template found");
200   Assert.equal(
201     productCards.length,
202     TOTAL_PROMO_CARDS_COUNT,
203     "All product cards displayed"
204   );
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({
215     set: [
216       ["browser.preferences.moreFromMozilla", true],
217       ["browser.preferences.moreFromMozilla.template", "simple"],
218     ],
219   });
220   await openPreferencesViaOpenPreferencesAPI("paneMoreFromMozilla", {
221     leaveOpen: true,
222   });
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)
233   );
235   let vpnButton = doc.getElementById("simple-mozillaVPN");
236   vpnButton.click();
238   let openedTab = await tabOpened;
239   Assert.ok(gBrowser.selectedBrowser.documentURI.spec.startsWith(expectedUrl));
241   let searchParams = new URL(gBrowser.selectedBrowser.documentURI.spec)
242     .searchParams;
243   Assert.equal(
244     searchParams.get("utm_source"),
245     "about-prefs",
246     "expected utm_source sent"
247   );
248   Assert.equal(
249     searchParams.get("utm_campaign"),
250     "morefrommozilla",
251     "utm_campaign set"
252   );
253   Assert.equal(
254     searchParams.get("utm_medium"),
255     "firefox-desktop",
256     "utm_medium set"
257   );
258   Assert.equal(
259     searchParams.get("utm_content"),
260     "fxvt-113-a-global",
261     "utm_content set"
262   );
263   Assert.equal(
264     searchParams.get("entrypoint_experiment"),
265     "morefrommozilla-experiment-1846",
266     "entrypoint_experiment set"
267   );
268   Assert.equal(
269     searchParams.get("entrypoint_variation"),
270     "treatment-simple",
271     "entrypoint_variation set"
272   );
273   BrowserTestUtils.removeTab(openedTab);
274   BrowserTestUtils.removeTab(tab);
277 add_task(async function test_aboutpreferences_clickBtnMobile() {
278   await SpecialPowers.pushPrefEnv({
279     set: [
280       ["browser.preferences.moreFromMozilla", true],
281       ["browser.preferences.moreFromMozilla.template", "simple"],
282     ],
283   });
284   await openPreferencesViaOpenPreferencesAPI("paneMoreFromMozilla", {
285     leaveOpen: true,
286   });
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;
301   Assert.equal(
302     searchParams.get("utm_source"),
303     "about-prefs",
304     "expected utm_source sent"
305   );
306   Assert.equal(
307     searchParams.get("utm_campaign"),
308     "morefrommozilla",
309     "utm_campaign set"
310   );
311   Assert.equal(
312     searchParams.get("utm_medium"),
313     "firefox-desktop",
314     "utm_medium set"
315   );
316   Assert.equal(
317     searchParams.get("utm_content"),
318     "fxvt-113-a-global",
319     "default-global",
320     "utm_content set"
321   );
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]],
330   });
332   await openPreferencesViaOpenPreferencesAPI(null, {
333     leaveOpen: true,
334   });
336   await runSearchInput("Relay");
338   let doc = gBrowser.contentDocument;
339   let tab = gBrowser.selectedTab;
341   let productCards = doc.querySelectorAll(".mozilla-product-item");
342   Assert.equal(
343     productCards.length,
344     TOTAL_PROMO_CARDS_COUNT,
345     "All products in the group are found"
346   );
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]],
359   });
360   await openPreferencesViaOpenPreferencesAPI("paneMoreFromMozilla", {
361     leaveOpen: true,
362   });
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"
375   );
376   expectedUrl.searchParams.set("entrypoint_variation", "treatment-simple");
378   let tabOpened = BrowserTestUtils.waitForDocLoadAndStopIt(
379     expectedUrl.toString(),
380     gBrowser,
381     channel => {
382       Assert.equal(
383         channel.originalURI.spec,
384         expectedUrl.toString(),
385         "URL matched"
386       );
387       return true;
388     }
389   );
390   doc.getElementById("simple-firefoxRelay").click();
392   await tabOpened;
393   BrowserTestUtils.removeTab(gBrowser.selectedTab);
394   BrowserTestUtils.removeTab(tab);