diff options
Diffstat (limited to 'browser/base/content/test/notificationbox/browser_notificationbar_telemetry.js')
-rw-r--r-- | browser/base/content/test/notificationbox/browser_notificationbar_telemetry.js | 219 |
1 files changed, 219 insertions, 0 deletions
diff --git a/browser/base/content/test/notificationbox/browser_notificationbar_telemetry.js b/browser/base/content/test/notificationbox/browser_notificationbar_telemetry.js new file mode 100644 index 0000000000..7810d4022d --- /dev/null +++ b/browser/base/content/test/notificationbox/browser_notificationbar_telemetry.js @@ -0,0 +1,219 @@ +const TELEMETRY_BASE = "notificationbar."; + +ChromeUtils.defineESModuleGetters(this, { + TelemetryTestUtils: "resource://testing-common/TelemetryTestUtils.sys.mjs", +}); + +add_task(async function showNotification() { + Services.telemetry.clearScalars(); + + let tab1 = await BrowserTestUtils.openNewForegroundTab( + gBrowser, + "https://example.com/" + ); + + ok(!gBrowser.readNotificationBox(), "no notificationbox created yet"); + + let box1 = gBrowser.getNotificationBox(); + + ok(gBrowser.readNotificationBox(), "notificationbox was created"); + + let tab2 = await BrowserTestUtils.openNewForegroundTab( + gBrowser, + "https://example.org/" + ); + + let tab3 = await BrowserTestUtils.openNewForegroundTab( + gBrowser, + "data:text/html,<body>Hello</body>" + ); + let box3 = gBrowser.getNotificationBox(); + + verifyTelemetry("initial", 0, 0, 0, 0, 0, 0); + + let notif3 = box3.appendNotification("infobar-testtwo-value", { + label: "Message for tab 3", + priority: box3.PRIORITY_INFO_HIGH, + telemetry: TELEMETRY_BASE + "testtwo", + }); + + verifyTelemetry("first notification", 0, 0, 0, 0, 0, 1); + + let notif1 = box1.appendNotification( + "infobar-testone-value", + { + label: "Message for tab 1", + priority: box1.PRIORITY_INFO_HIGH, + telemetry: TELEMETRY_BASE + "testone", + }, + [ + { + label: "Button1", + telemetry: "button1-pressed", + }, + { + label: "Button2", + telemetry: "button2-pressed", + }, + { + label: "Button3", + }, + ] + ); + verifyTelemetry("second notification", 0, 0, 0, 0, 0, 1); + + await BrowserTestUtils.switchTab(gBrowser, tab1); + verifyTelemetry("switch to first tab", 1, 0, 0, 0, 0, 1); + + await BrowserTestUtils.switchTab(gBrowser, tab2); + verifyTelemetry("switch to second tab", 1, 0, 0, 0, 0, 1); + + await BrowserTestUtils.switchTab(gBrowser, tab3); + verifyTelemetry("switch to third tab", 1, 0, 0, 0, 0, 1); + + await BrowserTestUtils.switchTab(gBrowser, tab1); + verifyTelemetry("switch to first tab again", 1, 0, 0, 0, 0, 1); + + notif1.buttonContainer.lastElementChild.click(); + verifyTelemetry("press third button", 1, 1, 0, 0, 0, 1); + + notif1.buttonContainer.lastElementChild.previousElementSibling.click(); + verifyTelemetry("press second button", 1, 1, 0, 1, 0, 1); + + notif1.buttonContainer.lastElementChild.previousElementSibling.previousElementSibling.click(); + verifyTelemetry("press first button", 1, 1, 1, 1, 0, 1); + + notif1.dismiss(); + verifyTelemetry("dismiss notification for box 1", 1, 1, 1, 1, 1, 1); + + notif3.dismiss(); + verifyTelemetry("dismiss notification for box 3", 1, 1, 1, 1, 1, 1, 1); + + let notif4 = box1.appendNotification( + "infobar-testtwo-value", + { + label: "Additional message for tab 1", + priority: box1.PRIORITY_INFO_HIGH, + telemetry: TELEMETRY_BASE + "testone", + telemetryFilter: ["shown"], + }, + [ + { + label: "Button1", + }, + ] + ); + verifyTelemetry("show first filtered notification", 2, 1, 1, 1, 1, 1, 1); + + notif4.buttonContainer.lastElementChild.click(); + notif4.dismiss(); + verifyTelemetry("dismiss first filtered notification", 2, 1, 1, 1, 1, 1, 1); + + let notif5 = box1.appendNotification( + "infobar-testtwo-value", + { + label: "Dimissed additional message for tab 1", + priority: box1.PRIORITY_INFO_HIGH, + telemetry: TELEMETRY_BASE + "testone", + telemetryFilter: ["dismissed"], + }, + [ + { + label: "Button1", + }, + ] + ); + verifyTelemetry("show second filtered notification", 2, 1, 1, 1, 1, 1, 1); + + notif5.buttonContainer.lastElementChild.click(); + notif5.dismiss(); + verifyTelemetry("dismiss second filtered notification", 2, 1, 1, 1, 2, 1, 1); + + let notif6 = box1.appendNotification( + "infobar-testtwo-value", + { + label: "Dimissed additional message for tab 1", + priority: box1.PRIORITY_INFO_HIGH, + telemetry: TELEMETRY_BASE + "testone", + telemetryFilter: ["button1-pressed", "dismissed"], + }, + [ + { + label: "Button1", + telemetry: "button1-pressed", + }, + ] + ); + verifyTelemetry("show third filtered notification", 2, 1, 1, 1, 2, 1, 1); + + notif6.buttonContainer.lastElementChild.click(); + verifyTelemetry( + "click button in third filtered notification", + 2, + 1, + 2, + 1, + 2, + 1, + 1 + ); + notif6.dismiss(); + verifyTelemetry("dismiss third filtered notification", 2, 1, 2, 1, 3, 1, 1); + + BrowserTestUtils.removeTab(tab1); + BrowserTestUtils.removeTab(tab2); + BrowserTestUtils.removeTab(tab3); +}); + +function verify(scalars, scalar, key, expected, exists) { + scalar = TELEMETRY_BASE + scalar; + + if (expected > 0) { + TelemetryTestUtils.assertKeyedScalar(scalars, scalar, key, expected); + return; + } + + Assert.equal( + scalar in scalars, + exists, + `expected ${scalar} to be ${exists ? "present" : "unset"}` + ); + + if (exists) { + Assert.ok( + !(key in scalars[scalar]), + "expected key " + key + " to be unset" + ); + } +} + +function verifyTelemetry( + desc, + box1shown, + box1action, + box1button1, + box1button2, + box1dismissed, + box3shown, + box3dismissed = 0 +) { + let scalars = TelemetryTestUtils.getProcessScalars("parent", true, false); + + info(desc); + let n1exists = + box1shown || box1action || box1button1 || box1button2 || box1dismissed; + + verify(scalars, "testone", "shown", box1shown, n1exists); + verify(scalars, "testone", "action", box1action, n1exists); + verify(scalars, "testone", "button1-pressed", box1button1, n1exists); + verify(scalars, "testone", "button2-pressed", box1button2, n1exists); + verify(scalars, "testone", "dismissed", box1dismissed, n1exists); + verify(scalars, "testtwo", "shown", box3shown, box3shown || box3dismissed); + verify( + scalars, + "testtwo", + "dismissed", + box3dismissed, + box3shown || box3dismissed + ); +} |