tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

commit b3a1260d5b2d73a7b9d4b17848168cf905e3605f
parent 90f81af2094d36448a389b2135739653c720842a
Author: t-p-white <towhite@mozilla.com>
Date:   Tue, 14 Oct 2025 12:35:00 +0000

Bug 1991769 - Part 1: Set Terms of Use accepted date and version metrics for users who accept the ToU during onboarding. r=android-reviewers,joberhauser,cpeterson

- Extracted the `Surface` enum to a separate file and added 'onboarding' as a surface type.
- Extracted the "version" to a separate file.
- Added the ToU accepted, version and date telemetry to the onboarding telemetry recorder.
- Added missing date and version telemetry to the ToU prompt.

Differential Revision: https://phabricator.services.mozilla.com/D267941

Diffstat:
Mmobile/android/fenix/app/src/main/java/org/mozilla/fenix/onboarding/OnboardingTelemetryRecorder.kt | 11+++++++++++
Amobile/android/fenix/app/src/main/java/org/mozilla/fenix/termsofuse/TermsOfUseVersion.kt | 7+++++++
Amobile/android/fenix/app/src/main/java/org/mozilla/fenix/termsofuse/store/Surface.kt | 20++++++++++++++++++++
Mmobile/android/fenix/app/src/main/java/org/mozilla/fenix/termsofuse/store/TermsOfUsePromptStore.kt | 11-----------
Mmobile/android/fenix/app/src/main/java/org/mozilla/fenix/termsofuse/store/TermsOfUsePromptTelemetryMiddleware.kt | 19+++++++++++--------
Mmobile/android/fenix/app/src/test/java/org/mozilla/fenix/termsofuse/store/TermsOfUsePromptTelemetryMiddlewareTest.kt | 6++++++
6 files changed, 55 insertions(+), 19 deletions(-)

diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/onboarding/OnboardingTelemetryRecorder.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/onboarding/OnboardingTelemetryRecorder.kt @@ -5,7 +5,10 @@ package org.mozilla.fenix.onboarding import org.mozilla.fenix.GleanMetrics.Onboarding +import org.mozilla.fenix.GleanMetrics.TermsOfUse import org.mozilla.fenix.onboarding.view.OnboardingPageUiData +import org.mozilla.fenix.termsofuse.TOU_VERSION +import org.mozilla.fenix.termsofuse.store.Surface /** * Abstraction responsible for recording telemetry events for Onboarding. @@ -340,6 +343,14 @@ class OnboardingTelemetryRecorder { */ fun onTermsOfServiceManagerAcceptTermsButtonClick() { Onboarding.termsOfServiceAccepted.record() + TermsOfUse.accepted.record( + TermsOfUse.AcceptedExtra( + surface = Surface.ONBOARDING.metricLabel, + touVersion = TOU_VERSION, + ), + ) + TermsOfUse.version.set(TOU_VERSION.toLong()) + TermsOfUse.date.set() } /** diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/termsofuse/TermsOfUseVersion.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/termsofuse/TermsOfUseVersion.kt @@ -0,0 +1,7 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +package org.mozilla.fenix.termsofuse + +const val TOU_VERSION = 5 diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/termsofuse/store/Surface.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/termsofuse/store/Surface.kt @@ -0,0 +1,20 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +package org.mozilla.fenix.termsofuse.store + +/** + * The 'surface' that the Terms of Use (ToU) was displayed on, + * e.g. during onboarding, on the homepage or within the browser. + * + * This may refer to the ToU onboarding page or an in-app prompt. + */ +enum class Surface { + ONBOARDING, + HOMEPAGE_NEW_TAB, + BROWSER, + ; + + val metricLabel = name.lowercase() +} diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/termsofuse/store/TermsOfUsePromptStore.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/termsofuse/store/TermsOfUsePromptStore.kt @@ -10,17 +10,6 @@ import mozilla.components.lib.state.State import mozilla.components.lib.state.Store /** - * The 'surface' that the prompt was displayed on, e.g. the homepage or the browser. - */ -enum class Surface { - HOMEPAGE_NEW_TAB, - BROWSER, - ; - - val metricLabel = name.lowercase() -} - -/** * [State] for the terms of use prompt. */ data object TermsOfUsePromptState : State diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/termsofuse/store/TermsOfUsePromptTelemetryMiddleware.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/termsofuse/store/TermsOfUsePromptTelemetryMiddleware.kt @@ -7,8 +7,7 @@ package org.mozilla.fenix.termsofuse.store import mozilla.components.lib.state.Middleware import mozilla.components.lib.state.MiddlewareContext import org.mozilla.fenix.GleanMetrics.TermsOfUse - -const val TOU_VERSION = 5 +import org.mozilla.fenix.termsofuse.TOU_VERSION internal class TermsOfUsePromptTelemetryMiddleware : Middleware<TermsOfUsePromptState, TermsOfUsePromptAction> { @@ -20,12 +19,16 @@ internal class TermsOfUsePromptTelemetryMiddleware : next(action) when (action) { - is TermsOfUsePromptAction.OnAcceptClicked -> TermsOfUse.accepted.record( - TermsOfUse.AcceptedExtra( - surface = action.surface.metricLabel, - touVersion = TOU_VERSION, - ), - ) + is TermsOfUsePromptAction.OnAcceptClicked -> { + TermsOfUse.accepted.record( + TermsOfUse.AcceptedExtra( + surface = action.surface.metricLabel, + touVersion = TOU_VERSION, + ), + ) + TermsOfUse.version.set(TOU_VERSION.toLong()) + TermsOfUse.date.set() + } is TermsOfUsePromptAction.OnRemindMeLaterClicked -> { TermsOfUse.remindMeLaterCount.add() diff --git a/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/termsofuse/store/TermsOfUsePromptTelemetryMiddlewareTest.kt b/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/termsofuse/store/TermsOfUsePromptTelemetryMiddlewareTest.kt @@ -27,11 +27,17 @@ class TermsOfUsePromptTelemetryMiddlewareTest { @Test fun `WHEN the OnAcceptClicked action THEN the expected telemetry is recorded`() { assertNull(TermsOfUse.accepted.testGetValue()) + assertNull(TermsOfUse.version.testGetValue()) + assertNull(TermsOfUse.date.testGetValue()) invokeMiddlewareWith(TermsOfUsePromptAction.OnAcceptClicked(Surface.HOMEPAGE_NEW_TAB)) assertNotNull(TermsOfUse.accepted.testGetValue()) assertEventExtraData(TermsOfUse.accepted.testGetValue()!!.last().extra!!) + assertNotNull(TermsOfUse.version.testGetValue()) + assertEquals(5L, TermsOfUse.version.testGetValue()) + // Glean SDK generates the date value so we can't compare date value directly. + assertNotNull(TermsOfUse.date.testGetValue()) } @Test