summaryrefslogtreecommitdiffstats
path: root/browser/components/privatebrowsing/test/browser/browser_privatebrowsing_about_nimbus_impressions.js
diff options
context:
space:
mode:
Diffstat (limited to 'browser/components/privatebrowsing/test/browser/browser_privatebrowsing_about_nimbus_impressions.js')
-rw-r--r--browser/components/privatebrowsing/test/browser/browser_privatebrowsing_about_nimbus_impressions.js126
1 files changed, 126 insertions, 0 deletions
diff --git a/browser/components/privatebrowsing/test/browser/browser_privatebrowsing_about_nimbus_impressions.js b/browser/components/privatebrowsing/test/browser/browser_privatebrowsing_about_nimbus_impressions.js
new file mode 100644
index 0000000000..ac42caa2dd
--- /dev/null
+++ b/browser/components/privatebrowsing/test/browser/browser_privatebrowsing_about_nimbus_impressions.js
@@ -0,0 +1,126 @@
+/* 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/. */
+
+/* Tests that use TelemetryTestUtils.assertEvents (at the very least, those with
+ * `{ process: "content" }`) seem to be super flaky and intermittent-prone when they
+ * share a file with other telemetry tests, so each one gets its own file.
+ */
+
+add_task(async function test_experiment_messaging_system_impressions() {
+ registerCleanupFunction(() => {
+ ASRouter.resetMessageState();
+ });
+ const LOCALE = Services.locale.appLocaleAsBCP47;
+ let experimentId = `pb_newtab_${Math.random()}`;
+
+ let doExperimentCleanup = await setupMSExperimentWithMessage({
+ id: experimentId,
+ template: "pb_newtab",
+ content: {
+ hideDefault: true,
+ promoEnabled: true,
+ infoEnabled: true,
+ infoBody: "fluent:about-private-browsing-info-title",
+ promoLinkText: "fluent:about-private-browsing-prominent-cta",
+ infoLinkUrl: "http://foo.example.com/%LOCALE%",
+ promoButton: {
+ action: {
+ data: {
+ args: "https://bar.example.com/%LOCALE%",
+ where: "tabshifted",
+ },
+ type: "OPEN_URL",
+ },
+ },
+ },
+ frequency: {
+ lifetime: 2,
+ },
+ // Priority ensures this message is picked over the one in
+ // OnboardingMessageProvider
+ priority: 5,
+ targeting: "true",
+ });
+
+ Services.telemetry.clearEvents();
+
+ let { win: win1, tab: tab1 } = await openTabAndWaitForRender();
+
+ await SpecialPowers.spawn(tab1, [LOCALE], async function (locale) {
+ is(
+ content.document
+ .querySelector(".promo button")
+ .classList.contains("primary"),
+ true,
+ "should render the promo button as a button"
+ );
+ });
+
+ let event = await waitForTelemetryEvent("normandy", experimentId);
+
+ ok(
+ event[1] == "normandy" &&
+ event[2] == "expose" &&
+ event[3] == "nimbus_experiment" &&
+ event[4].includes(experimentId) &&
+ event[5].featureId == "pbNewtab",
+ "recorded telemetry for expose"
+ );
+
+ Services.telemetry.clearEvents();
+
+ let { win: win2, tab: tab2 } = await openTabAndWaitForRender();
+
+ await SpecialPowers.spawn(tab2, [LOCALE], async function (locale) {
+ is(
+ content.document
+ .querySelector(".promo button")
+ .classList.contains("primary"),
+ true,
+ "should render the promo button as a button"
+ );
+ });
+
+ let event2 = await waitForTelemetryEvent("normandy", experimentId);
+
+ ok(
+ event2[1] == "normandy" &&
+ event2[2] == "expose" &&
+ event2[3] == "nimbus_experiment" &&
+ event2[4].includes(experimentId) &&
+ event2[5].featureId == "pbNewtab",
+ "recorded telemetry for expose"
+ );
+
+ Services.telemetry.clearEvents();
+
+ let { win: win3, tab: tab3 } = await openTabAndWaitForRender();
+
+ await SpecialPowers.spawn(tab3, [], async function () {
+ is(
+ content.document.querySelector(".promo button"),
+ null,
+ "should no longer render the experiment message after 2 impressions"
+ );
+ });
+
+ // Verify that the telemetry events array does not
+ // contain an expose event for pbNewtab
+ info("Should not have promo expose");
+ TelemetryTestUtils.assertEvents([], {
+ category: "normandy",
+ method: "expose",
+ object: "nimbus_experiment",
+ extra_keys: {
+ featureId: "pbNewtab",
+ },
+ });
+
+ Services.telemetry.clearEvents();
+
+ await BrowserTestUtils.closeWindow(win1);
+ await BrowserTestUtils.closeWindow(win2);
+ await BrowserTestUtils.closeWindow(win3);
+ await doExperimentCleanup();
+});