diff --git a/toolkit/components/glean/src/user_activity.rs b/toolkit/components/glean/src/user_activity.rs index e8ef8d973c273a03ffcf63d278a63c075f7ee2cc..6e03f0561cb0e0c9090a9917e0b7c4d0c2e04c0e 100644 --- a/toolkit/components/glean/src/user_activity.rs +++ b/toolkit/components/glean/src/user_activity.rs @@ -30,6 +30,10 @@ pub(crate) struct InitUserActivityObserver { #[allow(non_snake_case)] impl UserActivityObserver { pub(crate) unsafe fn begin_observing() -> Result<(), nsresult> { + // First and foremost, even if we can't get the ObserverService, + // init always means client activity. + glean::handle_client_active(); + let activity_obs = Self::allocate(InitUserActivityObserver { last_edge: RwLock::new(Instant::now()), was_active: AtomicBool::new(false), diff --git a/toolkit/components/telemetry/tests/marionette/tests/client/test_fog_user_activity.py b/toolkit/components/telemetry/tests/marionette/tests/client/test_fog_user_activity.py index 785e39804f3c3b14bb4591259c42b692bae132d4..fec71476320f9c4534c37d1b6649fd4e49276723 100644 --- a/toolkit/components/telemetry/tests/marionette/tests/client/test_fog_user_activity.py +++ b/toolkit/components/telemetry/tests/marionette/tests/client/test_fog_user_activity.py @@ -11,6 +11,12 @@ class TestClientActivity(FOGTestCase): def test_user_activity(self): + # First test that restarting the browser sends a "active" ping + ping0 = self.wait_for_ping( + self.restart_browser, FOG_BASELINE_PING, ping_server=self.fog_ping_server + ) + self.assertEqual("active", ping0["payload"]["ping_info"]["reason"]) + with self.marionette.using_context(self.marionette.CONTEXT_CHROME): zero_prefs_script = """\ Services.prefs.setIntPref("telemetry.fog.test.inactivity_limit", 0);