summaryrefslogtreecommitdiffstats
path: root/browser/components/privatebrowsing/test/browser/browser_privatebrowsing_about_nimbus.js
diff options
context:
space:
mode:
Diffstat (limited to 'browser/components/privatebrowsing/test/browser/browser_privatebrowsing_about_nimbus.js')
-rw-r--r--browser/components/privatebrowsing/test/browser/browser_privatebrowsing_about_nimbus.js461
1 files changed, 461 insertions, 0 deletions
diff --git a/browser/components/privatebrowsing/test/browser/browser_privatebrowsing_about_nimbus.js b/browser/components/privatebrowsing/test/browser/browser_privatebrowsing_about_nimbus.js
new file mode 100644
index 0000000000..8f6eb63699
--- /dev/null
+++ b/browser/components/privatebrowsing/test/browser/browser_privatebrowsing_about_nimbus.js
@@ -0,0 +1,461 @@
+/* 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/. */
+
+add_task(async function test_experiment_plain_text() {
+ const defaultMessageContent = (await PanelTestProvider.getMessages()).find(
+ m => m.template === "pb_newtab"
+ ).content;
+ let doExperimentCleanup = await setupMSExperimentWithMessage({
+ id: "PB_NEWTAB_MESSAGING_SYSTEM",
+ template: "pb_newtab",
+ content: {
+ ...defaultMessageContent,
+ infoTitle: "Hello world",
+ infoTitleEnabled: true,
+ infoBody: "This is some text",
+ infoLinkText: "This is a link",
+ infoIcon: "chrome://branding/content/about-logo.png",
+ promoTitle: "Promo title",
+ promoLinkText: "Promo link",
+ promoLinkType: "link",
+ promoButton: {
+ action: {
+ type: "OPEN_URL",
+ data: {
+ args: "https://example.com",
+ where: "tabshifted",
+ },
+ },
+ },
+ },
+ // Priority ensures this message is picked over the one in
+ // OnboardingMessageProvider
+ priority: 5,
+ targeting: "true",
+ });
+
+ let { win, tab } = await openTabAndWaitForRender();
+
+ await SpecialPowers.spawn(tab, [], async function () {
+ const infoContainer = content.document.querySelector(".info");
+ const infoTitle = content.document.getElementById("info-title");
+ const infoBody = content.document.getElementById("info-body");
+ const infoLink = content.document.getElementById("private-browsing-myths");
+ const promoText = content.document.getElementById(
+ "private-browsing-promo-text"
+ );
+ const promoLink = content.document.getElementById(
+ "private-browsing-promo-link"
+ );
+
+ // Check experiment values are rendered
+ ok(infoContainer, ".info container should exist");
+ ok(
+ infoContainer.style.backgroundImage.includes(
+ "chrome://branding/content/about-logo.png"
+ ),
+ "should render icon"
+ );
+ is(infoTitle.textContent, "Hello world", "should render infoTitle");
+ is(infoBody.textContent, "This is some text", "should render infoBody");
+ is(infoLink.textContent, "This is a link", "should render infoLink");
+ is(promoText.textContent, "Promo title", "should render promoTitle");
+ is(promoLink.textContent, "Promo link", "should render promoLinkText");
+ });
+
+ await BrowserTestUtils.closeWindow(win);
+ await doExperimentCleanup();
+});
+
+add_task(async function test_experiment_info_disabled() {
+ let doExperimentCleanup = await setupMSExperimentWithMessage({
+ id: "PB_NEWTAB_MESSAGING_SYSTEM",
+ template: "pb_newtab",
+ content: {
+ infoEnabled: false,
+ },
+ // Priority ensures this message is picked over the one in
+ // OnboardingMessageProvider
+ priority: 5,
+ targeting: "true",
+ });
+
+ let { win, tab } = await openTabAndWaitForRender();
+
+ await SpecialPowers.spawn(tab, [], async function () {
+ is(
+ content.document.querySelector(".info"),
+ undefined,
+ "should remove .info element"
+ );
+ });
+
+ await BrowserTestUtils.closeWindow(win);
+ await doExperimentCleanup();
+});
+
+add_task(async function test_experiment_promo_disabled() {
+ let doExperimentCleanup = await setupMSExperimentWithMessage({
+ id: "PB_NEWTAB_MESSAGING_SYSTEM",
+ template: "pb_newtab",
+ content: {
+ promoEnabled: false,
+ },
+ // Priority ensures this message is picked over the one in
+ // OnboardingMessageProvider
+ priority: 5,
+ targeting: "true",
+ });
+
+ let { win, tab } = await openTabAndWaitForRender();
+
+ await SpecialPowers.spawn(tab, [], async function () {
+ is(
+ content.document.querySelector(".promo"),
+ undefined,
+ "should remove .promo element"
+ );
+ });
+
+ await BrowserTestUtils.closeWindow(win);
+ await doExperimentCleanup();
+});
+
+add_task(async function test_experiment_format_urls() {
+ const LOCALE = Services.locale.appLocaleAsBCP47;
+ let doExperimentCleanup = await setupMSExperimentWithMessage({
+ id: "PB_NEWTAB_MESSAGING_SYSTEM",
+ template: "pb_newtab",
+ content: {
+ infoEnabled: true,
+ promoEnabled: true,
+ infoLinkUrl: "http://foo.mozilla.com/%LOCALE%",
+ promoButton: {
+ action: {
+ data: {
+ args: "http://bar.mozilla.com/%LOCALE%",
+ where: "tabshifted",
+ },
+ type: "OPEN_URL",
+ },
+ },
+ },
+ // Priority ensures this message is picked over the one in
+ // OnboardingMessageProvider
+ priority: 5,
+ targeting: "true",
+ });
+
+ let { win, tab } = await openTabAndWaitForRender();
+
+ await SpecialPowers.spawn(tab, [LOCALE], async function (locale) {
+ is(
+ content.document.querySelector(".info a").getAttribute("href"),
+ "http://foo.mozilla.com/" + locale,
+ "should format the infoLinkUrl url"
+ );
+
+ ok(
+ content.document.querySelector(".promo button"),
+ "should render promo button"
+ );
+ });
+
+ await BrowserTestUtils.closeWindow(win);
+ await doExperimentCleanup();
+});
+
+add_task(async function test_experiment_click_info_telemetry() {
+ let doExperimentCleanup = await setupMSExperimentWithMessage({
+ id: "PB_NEWTAB_MESSAGING_SYSTEM_CLICK_INFO_TELEM",
+ template: "pb_newtab",
+ content: {
+ infoEnabled: true,
+ infoLinkUrl: "http://example.com",
+ },
+ // Priority ensures this message is picked over the one in
+ // OnboardingMessageProvider
+ priority: 5,
+ targeting: "true",
+ });
+
+ // Required for `mach test --verify`
+ Services.telemetry.clearEvents();
+
+ let { win, tab } = await openTabAndWaitForRender();
+
+ await SpecialPowers.spawn(tab, [], () => {
+ const el = content.document.querySelector(".info a");
+ el.click();
+ });
+
+ let event = await waitForTelemetryEvent("aboutprivatebrowsing");
+
+ ok(
+ event[2] == "click" && event[3] == "info_link",
+ "recorded telemetry for info link"
+ );
+
+ await BrowserTestUtils.closeWindow(win);
+ await doExperimentCleanup();
+});
+
+add_task(async function test_experiment_click_promo_telemetry() {
+ let doExperimentCleanup = await setupMSExperimentWithMessage({
+ id: `PB_NEWTAB_MESSAGING_SYSTEM_PROMO_TELEM_${Math.random()}`,
+ template: "pb_newtab",
+ content: {
+ promoEnabled: true,
+ promoLinkType: "link",
+ promoButton: {
+ action: {
+ type: "OPEN_URL",
+ data: {
+ args: "https://example.com",
+ where: "tabshifted",
+ },
+ },
+ },
+ },
+ // Priority ensures this message is picked over the one in
+ // OnboardingMessageProvider
+ priority: 5,
+ targeting: "true",
+ });
+
+ let { win, tab } = await openTabAndWaitForRender();
+
+ Services.telemetry.clearEvents();
+
+ await SpecialPowers.spawn(tab, [], () => {
+ is(
+ content.document
+ .querySelector(".promo-cta button")
+ .classList.contains("promo-link"),
+ true,
+ "Should have a button styled as a link"
+ );
+
+ const el = content.document.querySelector(".promo button");
+ el.click();
+ });
+
+ let event = await waitForTelemetryEvent("aboutprivatebrowsing");
+
+ ok(
+ event[2] == "click" && event[3] == "promo_link",
+ "recorded telemetry for promo link"
+ );
+
+ await BrowserTestUtils.closeWindow(win);
+ await doExperimentCleanup();
+});
+
+add_task(async function test_experiment_bottom_promo() {
+ const defaultMessageContent = (await PanelTestProvider.getMessages()).find(
+ m => m.template === "pb_newtab"
+ ).content;
+
+ let doExperimentCleanup = await setupMSExperimentWithMessage({
+ id: "PB_NEWTAB_MESSAGING_SYSTEM",
+ template: "pb_newtab",
+ content: {
+ ...defaultMessageContent,
+ promoEnabled: true,
+ promoLinkType: "button",
+ promoSectionStyle: "bottom",
+ promoHeader: "Need more privacy?",
+ infoTitleEnabled: true,
+ promoTitleEnabled: false,
+ promoImageLarge: "",
+ promoImageSmall: "chrome://browser/content/assets/vpn-logo.svg",
+ promoButton: {
+ action: {
+ data: {
+ args: "http://bar.example.com/%LOCALE%",
+ where: "tabshifted",
+ },
+ type: "OPEN_URL",
+ },
+ },
+ },
+ // Priority ensures this message is picked over the one in
+ // OnboardingMessageProvider
+ priority: 5,
+ targeting: "true",
+ });
+
+ let { win, tab } = await openTabAndWaitForRender();
+
+ await SpecialPowers.spawn(tab, [], async function () {
+ is(
+ content.document
+ .querySelector(".promo-cta button")
+ .classList.contains("primary"),
+ true,
+ "Should have a button CTA"
+ );
+ is(
+ content.document.querySelector(".promo-image-small img").src,
+ "chrome://browser/content/assets/vpn-logo.svg",
+ "Should have logo image"
+ );
+ ok(
+ content.document.querySelector(".promo.bottom"),
+ "Should have .bottom for the promo section"
+ );
+ ok(
+ content.document.querySelector("#info-title"),
+ "Should render info title if infoTitleEnabled is true"
+ );
+ ok(
+ !content.document.querySelector("#private-browsing-promo-text"),
+ "Should not render promo title if promoTitleEnabled is false"
+ );
+ });
+
+ await BrowserTestUtils.closeWindow(win);
+ await doExperimentCleanup();
+});
+
+add_task(async function test_experiment_below_search_promo() {
+ const defaultMessageContent = (await PanelTestProvider.getMessages()).find(
+ m => m.template === "pb_newtab"
+ ).content;
+ let doExperimentCleanup = await setupMSExperimentWithMessage({
+ id: "PB_NEWTAB_MESSAGING_SYSTEM",
+ template: "pb_newtab",
+ content: {
+ ...defaultMessageContent,
+ promoEnabled: true,
+ promoLinkType: "button",
+ promoSectionStyle: "below-search",
+ promoHeader: "Need more privacy?",
+ promoTitle:
+ "Mozilla VPN. Security, reliability and speed — on every device, anywhere you go.",
+ promoImageLarge: "chrome://browser/content/assets/moz-vpn.svg",
+ promoImageSmall: "chrome://browser/content/assets/vpn-logo.svg",
+ infoTitleEnabled: false,
+ promoButton: {
+ action: {
+ data: {
+ args: "https://foo.example.com",
+ where: "tabshifted",
+ },
+ type: "OPEN_URL",
+ },
+ },
+ },
+ // Priority ensures this message is picked over the one in
+ // OnboardingMessageProvider
+ priority: 5,
+ targeting: "true",
+ });
+
+ let { win, tab } = await openTabAndWaitForRender();
+
+ await SpecialPowers.spawn(tab, [], async function () {
+ is(
+ content.document
+ .querySelector(".promo-cta button")
+ .classList.contains("primary"),
+ true,
+ "Should have a button CTA"
+ );
+ is(
+ content.document.querySelector(".promo-image-small img").src,
+ "chrome://browser/content/assets/vpn-logo.svg",
+ "Should have logo image"
+ );
+ is(
+ content.document.querySelector(".promo-image-large img").src,
+ "chrome://browser/content/assets/moz-vpn.svg",
+ "Should have a product image"
+ );
+ ok(
+ content.document.querySelector(".promo.below-search"),
+ "Should have .below-search for the promo section"
+ );
+ ok(
+ !content.document.querySelector("#info-title"),
+ "Should not render info title if infoTitleEnabled is false"
+ );
+ ok(
+ content.document.querySelector("#private-browsing-promo-text"),
+ "Should render promo title if promoTitleEnabled is true"
+ );
+ });
+
+ await BrowserTestUtils.closeWindow(win);
+ await doExperimentCleanup();
+});
+
+add_task(async function test_experiment_top_promo() {
+ const defaultMessageContent = (await PanelTestProvider.getMessages()).find(
+ m => m.template === "pb_newtab"
+ ).content;
+ let doExperimentCleanup = await setupMSExperimentWithMessage({
+ id: `PB_NEWTAB_MESSAGING_SYSTEM_DISMISS_${Math.random()}`,
+ template: "pb_newtab",
+ content: {
+ ...defaultMessageContent,
+ promoEnabled: true,
+ promoLinkType: "button",
+ promoSectionStyle: "top",
+ promoHeader: "Need more privacy?",
+ promoTitle:
+ "Mozilla VPN. Security, reliability and speed — on every device, anywhere you go.",
+ promoImageLarge: "chrome://browser/content/assets/moz-vpn.svg",
+ promoImageSmall: "chrome://browser/content/assets/vpn-logo.svg",
+ infoTitleEnabled: false,
+ promoButton: {
+ action: {
+ data: {
+ args: "https://foo.example.com",
+ where: "tabshifted",
+ },
+ type: "OPEN_URL",
+ },
+ },
+ },
+ // Priority ensures this message is picked over the one in
+ // OnboardingMessageProvider
+ priority: 5,
+ targeting: "true",
+ });
+
+ let { win, tab } = await openTabAndWaitForRender();
+
+ await SpecialPowers.spawn(tab, [], async function () {
+ ok(
+ !content.document.querySelector("#info-title"),
+ "Should remove the infoTitle element"
+ );
+ is(
+ content.document.querySelector(".promo-image-small img").src,
+ "chrome://browser/content/assets/vpn-logo.svg",
+ "Should have logo image"
+ );
+ is(
+ content.document.querySelector(".promo-image-large img").src,
+ "chrome://browser/content/assets/moz-vpn.svg",
+ "Should have a product image"
+ );
+ ok(
+ content.document.querySelector(".promo.top"),
+ "Should have .below-search for the promo section"
+ );
+ ok(
+ !content.document.querySelector("#info-title"),
+ "Should not render info title if infoTitleEnabled is false"
+ );
+ ok(
+ content.document.querySelector("#private-browsing-promo-text"),
+ "Should render promo title if promoTitleEnabled is true"
+ );
+ });
+
+ await BrowserTestUtils.closeWindow(win);
+ await doExperimentCleanup();
+});