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);