diff options
Diffstat (limited to 'toolkit/components/telemetry/tests/unit/test_TelemetrySession_activeTicks.js')
-rw-r--r-- | toolkit/components/telemetry/tests/unit/test_TelemetrySession_activeTicks.js | 126 |
1 files changed, 126 insertions, 0 deletions
diff --git a/toolkit/components/telemetry/tests/unit/test_TelemetrySession_activeTicks.js b/toolkit/components/telemetry/tests/unit/test_TelemetrySession_activeTicks.js new file mode 100644 index 0000000000..23e476a028 --- /dev/null +++ b/toolkit/components/telemetry/tests/unit/test_TelemetrySession_activeTicks.js @@ -0,0 +1,126 @@ +/* Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/ +*/ + +const { TelemetryController } = ChromeUtils.importESModule( + "resource://gre/modules/TelemetryController.sys.mjs" +); +const { TelemetrySession } = ChromeUtils.importESModule( + "resource://gre/modules/TelemetrySession.sys.mjs" +); + +function tick(aHowMany) { + for (let i = 0; i < aHowMany; i++) { + Services.obs.notifyObservers(null, "user-interaction-active"); + } +} + +function checkSessionTicks(aExpected) { + let payload = TelemetrySession.getPayload(); + Assert.equal( + payload.simpleMeasurements.activeTicks, + aExpected, + "Should record the expected number of active ticks for the session." + ); +} + +function checkSubsessionTicks(aExpected, aClearSubsession) { + let payload = TelemetrySession.getPayload("main", aClearSubsession); + Assert.equal( + payload.simpleMeasurements.activeTicks, + aExpected, + "Should record the expected number of active ticks for the subsession." + ); + if (aExpected > 0) { + Assert.equal( + payload.processes.parent.scalars["browser.engagement.active_ticks"], + aExpected, + "Should record the expected number of active ticks for the subsession, in a scalar." + ); + } +} + +add_task(async function test_setup() { + do_get_profile(); + // Make sure we don't generate unexpected pings due to pref changes. + await setEmptyPrefWatchlist(); + // Ensure FOG's init + Services.fog.initializeFOG(); +}); + +add_task(async function test_record_activeTicks() { + await TelemetryController.testSetup(); + + let checkActiveTicks = expected => { + // Scalars are only present in subsession payloads. + let payload = TelemetrySession.getPayload("main"); + Assert.equal( + payload.simpleMeasurements.activeTicks, + expected, + "TelemetrySession must record the expected number of active ticks (in simpleMeasurements)." + ); + // Subsessions are not yet supported on Android. + if (!gIsAndroid) { + Assert.equal( + payload.processes.parent.scalars["browser.engagement.active_ticks"], + expected, + "TelemetrySession must record the expected number of active ticks (in scalars)." + ); + } + Assert.equal(Glean.browserEngagement.activeTicks.testGetValue(), expected); + }; + + for (let i = 0; i < 3; i++) { + Services.obs.notifyObservers(null, "user-interaction-active"); + } + checkActiveTicks(3); + + // Now send inactive. This must not increment the active ticks. + Services.obs.notifyObservers(null, "user-interaction-inactive"); + checkActiveTicks(3); + + // If we send active again, this should be counted as inactive. + Services.obs.notifyObservers(null, "user-interaction-active"); + checkActiveTicks(3); + + // If we send active again, this should be counted as active. + Services.obs.notifyObservers(null, "user-interaction-active"); + checkActiveTicks(4); + + Services.obs.notifyObservers(null, "user-interaction-active"); + checkActiveTicks(5); + + await TelemetryController.testShutdown(); +}); + +add_task( + { + skip_if: () => gIsAndroid, + }, + async function test_subsession_activeTicks() { + await TelemetryController.testReset(); + Telemetry.clearScalars(); + + tick(5); + checkSessionTicks(5); + checkSubsessionTicks(5, true); + + // After clearing the subsession, subsession ticks should be 0 but session + // ticks should still be 5. + checkSubsessionTicks(0); + checkSessionTicks(5); + + tick(1); + checkSessionTicks(6); + checkSubsessionTicks(1, true); + + checkSubsessionTicks(0); + checkSessionTicks(6); + + tick(2); + checkSessionTicks(8); + checkSubsessionTicks(2); + + await TelemetryController.testShutdown(); + } +); |