summaryrefslogtreecommitdiffstats
path: root/browser/components/newtab/test/browser/browser_newtab_ping.js
diff options
context:
space:
mode:
Diffstat (limited to 'browser/components/newtab/test/browser/browser_newtab_ping.js')
-rw-r--r--browser/components/newtab/test/browser/browser_newtab_ping.js216
1 files changed, 216 insertions, 0 deletions
diff --git a/browser/components/newtab/test/browser/browser_newtab_ping.js b/browser/components/newtab/test/browser/browser_newtab_ping.js
new file mode 100644
index 0000000000..42ff22a57d
--- /dev/null
+++ b/browser/components/newtab/test/browser/browser_newtab_ping.js
@@ -0,0 +1,216 @@
+/* Any copyright is dedicated to the Public Domain.
+ http://creativecommons.org/publicdomain/zero/1.0/ */
+
+"use strict";
+
+const { AboutNewTab } = ChromeUtils.import(
+ "resource:///modules/AboutNewTab.jsm"
+);
+const { ASRouter } = ChromeUtils.import(
+ "resource://activity-stream/lib/ASRouter.jsm"
+);
+
+const { ExperimentFakes } = ChromeUtils.importESModule(
+ "resource://testing-common/NimbusTestUtils.sys.mjs"
+);
+
+let sendTriggerMessageSpy;
+
+add_setup(function () {
+ let sandbox = sinon.createSandbox();
+ sendTriggerMessageSpy = sandbox.spy(ASRouter, "sendTriggerMessage");
+
+ registerCleanupFunction(() => {
+ sandbox.restore();
+ });
+});
+
+add_task(async function test_newtab_tab_close_sends_ping() {
+ await SpecialPowers.pushPrefEnv({
+ set: [["browser.newtabpage.activity-stream.telemetry", true]],
+ });
+
+ Services.fog.testResetFOG();
+ sendTriggerMessageSpy.resetHistory();
+ let TelemetryFeed =
+ AboutNewTab.activityStream.store.feeds.get("feeds.telemetry");
+ TelemetryFeed.init(); // INIT action doesn't happen by default.
+ let tab = await BrowserTestUtils.openNewForegroundTab(
+ gBrowser,
+ "about:newtab",
+ false // waitForLoad; about:newtab is cached so this would never resolve
+ );
+
+ await BrowserTestUtils.waitForCondition(
+ () => sendTriggerMessageSpy.called,
+ "After about:newtab finishes loading"
+ );
+ sendTriggerMessageSpy.resetHistory();
+
+ await BrowserTestUtils.waitForCondition(
+ () => !!Glean.newtab.opened.testGetValue("newtab"),
+ "We expect the newtab open to be recorded"
+ );
+ let record = Glean.newtab.opened.testGetValue("newtab");
+ Assert.equal(record.length, 1, "Should only be one open");
+ const sessionId = record[0].extra.newtab_visit_id;
+ Assert.ok(!!sessionId, "newtab_visit_id must be present");
+
+ let pingSubmitted = false;
+ GleanPings.newtab.testBeforeNextSubmit(reason => {
+ pingSubmitted = true;
+ Assert.equal(reason, "newtab_session_end");
+ record = Glean.newtab.closed.testGetValue("newtab");
+ Assert.equal(record.length, 1, "Should only have one close");
+ Assert.equal(
+ record[0].extra.newtab_visit_id,
+ sessionId,
+ "Should've closed the session we opened"
+ );
+ Assert.ok(Glean.newtabSearch.enabled.testGetValue());
+ Assert.ok(Glean.topsites.enabled.testGetValue());
+ Assert.ok(Glean.topsites.sponsoredEnabled.testGetValue());
+ Assert.ok(Glean.pocket.enabled.testGetValue());
+ Assert.ok(Glean.pocket.sponsoredStoriesEnabled.testGetValue());
+ Assert.equal(false, Glean.pocket.isSignedIn.testGetValue());
+ });
+
+ BrowserTestUtils.removeTab(tab);
+ await BrowserTestUtils.waitForCondition(
+ () => pingSubmitted,
+ "We expect the ping to have submitted."
+ );
+ await SpecialPowers.popPrefEnv();
+});
+
+add_task(async function test_newtab_tab_nav_sends_ping() {
+ await SpecialPowers.pushPrefEnv({
+ set: [["browser.newtabpage.activity-stream.telemetry", true]],
+ });
+
+ Services.fog.testResetFOG();
+ sendTriggerMessageSpy.resetHistory();
+ let TelemetryFeed =
+ AboutNewTab.activityStream.store.feeds.get("feeds.telemetry");
+ TelemetryFeed.init(); // INIT action doesn't happen by default.
+ let tab = await BrowserTestUtils.openNewForegroundTab(
+ gBrowser,
+ "about:newtab",
+ false // waitForLoad; about:newtab is cached so this would never resolve
+ );
+
+ await BrowserTestUtils.waitForCondition(
+ () => sendTriggerMessageSpy.called,
+ "After about:newtab finishes loading"
+ );
+ sendTriggerMessageSpy.resetHistory();
+
+ await BrowserTestUtils.waitForCondition(
+ () => !!Glean.newtab.opened.testGetValue("newtab"),
+ "We expect the newtab open to be recorded"
+ );
+ let record = Glean.newtab.opened.testGetValue("newtab");
+ Assert.equal(record.length, 1, "Should only be one open");
+ const sessionId = record[0].extra.newtab_visit_id;
+ Assert.ok(!!sessionId, "newtab_visit_id must be present");
+
+ let pingSubmitted = false;
+ GleanPings.newtab.testBeforeNextSubmit(reason => {
+ pingSubmitted = true;
+ Assert.equal(reason, "newtab_session_end");
+ record = Glean.newtab.closed.testGetValue("newtab");
+ Assert.equal(record.length, 1, "Should only have one close");
+ Assert.equal(
+ record[0].extra.newtab_visit_id,
+ sessionId,
+ "Should've closed the session we opened"
+ );
+ Assert.ok(Glean.newtabSearch.enabled.testGetValue());
+ Assert.ok(Glean.topsites.enabled.testGetValue());
+ Assert.ok(Glean.topsites.sponsoredEnabled.testGetValue());
+ Assert.ok(Glean.pocket.enabled.testGetValue());
+ Assert.ok(Glean.pocket.sponsoredStoriesEnabled.testGetValue());
+ Assert.equal(false, Glean.pocket.isSignedIn.testGetValue());
+ });
+
+ BrowserTestUtils.loadURIString(tab.linkedBrowser, "about:mozilla");
+ await BrowserTestUtils.waitForCondition(
+ () => pingSubmitted,
+ "We expect the ping to have submitted."
+ );
+
+ BrowserTestUtils.removeTab(tab);
+ await SpecialPowers.popPrefEnv();
+});
+
+add_task(async function test_newtab_doesnt_send_nimbus() {
+ await SpecialPowers.pushPrefEnv({
+ set: [["browser.newtabpage.activity-stream.telemetry", true]],
+ });
+
+ let doEnrollmentCleanup = await ExperimentFakes.enrollWithFeatureConfig({
+ featureId: "glean",
+ value: { newtabPingEnabled: false },
+ });
+ Services.fog.testResetFOG();
+ let TelemetryFeed =
+ AboutNewTab.activityStream.store.feeds.get("feeds.telemetry");
+ TelemetryFeed.init(); // INIT action doesn't happen by default.
+ sendTriggerMessageSpy.resetHistory();
+ let tab = await BrowserTestUtils.openNewForegroundTab(
+ gBrowser,
+ "about:newtab",
+ false // waitForLoad; about:newtab is cached so this would never resolve
+ );
+
+ await BrowserTestUtils.waitForCondition(
+ () => sendTriggerMessageSpy.called,
+ "After about:newtab finishes loading"
+ );
+ sendTriggerMessageSpy.resetHistory();
+
+ await BrowserTestUtils.waitForCondition(
+ () => !!Glean.newtab.opened.testGetValue("newtab"),
+ "We expect the newtab open to be recorded"
+ );
+ let record = Glean.newtab.opened.testGetValue("newtab");
+ Assert.equal(record.length, 1, "Should only be one open");
+ const sessionId = record[0].extra.newtab_visit_id;
+ Assert.ok(!!sessionId, "newtab_visit_id must be present");
+
+ GleanPings.newtab.testBeforeNextSubmit(() => {
+ Assert.ok(false, "Must not submit ping!");
+ });
+ BrowserTestUtils.loadURIString(tab.linkedBrowser, "about:mozilla");
+ BrowserTestUtils.removeTab(tab);
+ await BrowserTestUtils.waitForCondition(() => {
+ let { sessions } =
+ AboutNewTab.activityStream.store.feeds.get("feeds.telemetry");
+ return !Array.from(sessions.entries()).filter(
+ ([k, v]) => v.session_id === sessionId
+ ).length;
+ }, "Waiting for sessions to clean up.");
+ // Session ended without a ping being sent. Success!
+ await doEnrollmentCleanup();
+ await SpecialPowers.popPrefEnv();
+});
+
+add_task(async function test_newtab_categorization_sends_ping() {
+ await SpecialPowers.pushPrefEnv({
+ set: [["browser.newtabpage.activity-stream.telemetry", true]],
+ });
+
+ Services.fog.testResetFOG();
+ sendTriggerMessageSpy.resetHistory();
+ let TelemetryFeed =
+ AboutNewTab.activityStream.store.feeds.get("feeds.telemetry");
+ let pingSent = false;
+ GleanPings.newtab.testBeforeNextSubmit(reason => {
+ pingSent = true;
+ Assert.equal(reason, "component_init");
+ });
+ await TelemetryFeed.sendPageTakeoverData();
+ Assert.ok(pingSent, "ping was sent");
+
+ await SpecialPowers.popPrefEnv();
+});