For #24706 - Remove Event.wrapper for Autofill related telemetry

pull/543/head
Alexandru2909 2 years ago committed by mergify[bot]
parent eb82cfef78
commit cc893aa641

@ -64,16 +64,6 @@ sealed class Event {
// Recently visited/Recent searches
object RecentSearchesGroupDeleted : Event()
// Android Autofill
object AndroidAutofillUnlockSuccessful : Event()
object AndroidAutofillUnlockCanceled : Event()
object AndroidAutofillSearchDisplayed : Event()
object AndroidAutofillSearchItemSelected : Event()
object AndroidAutofillConfirmationSuccessful : Event()
object AndroidAutofillConfirmationCanceled : Event()
object AndroidAutofillRequestWithLogins : Event()
object AndroidAutofillRequestWithoutLogins : Event()
// Credit cards
object CreditCardSaved : Event()
object CreditCardDeleted : Event()

@ -8,7 +8,6 @@ import android.content.Context
import mozilla.components.service.glean.Glean
import mozilla.components.service.glean.private.NoExtraKeys
import mozilla.components.support.base.log.logger.Logger
import org.mozilla.fenix.GleanMetrics.AndroidAutofill
import org.mozilla.fenix.GleanMetrics.Autoplay
import org.mozilla.fenix.GleanMetrics.Awesomebar
import org.mozilla.fenix.GleanMetrics.BrowserSearch
@ -200,31 +199,6 @@ private val Event.wrapper: EventWrapper<*>?
is Event.RecentBookmarkCount -> EventWrapper<NoExtraKeys>(
{ RecentBookmarks.recentBookmarksCount.set(this.count.toLong()) },
)
is Event.AndroidAutofillRequestWithLogins -> EventWrapper<NoExtraKeys>(
{ AndroidAutofill.requestMatchingLogins.record(it) }
)
is Event.AndroidAutofillRequestWithoutLogins -> EventWrapper<NoExtraKeys>(
{ AndroidAutofill.requestNoMatchingLogins.record(it) }
)
is Event.AndroidAutofillSearchDisplayed -> EventWrapper<NoExtraKeys>(
{ AndroidAutofill.searchDisplayed.record(it) }
)
is Event.AndroidAutofillSearchItemSelected -> EventWrapper<NoExtraKeys>(
{ AndroidAutofill.searchItemSelected.record(it) }
)
is Event.AndroidAutofillUnlockCanceled -> EventWrapper<NoExtraKeys>(
{ AndroidAutofill.unlockCancelled.record(it) }
)
is Event.AndroidAutofillUnlockSuccessful -> EventWrapper<NoExtraKeys>(
{ AndroidAutofill.unlockSuccessful.record(it) }
)
is Event.AndroidAutofillConfirmationCanceled -> EventWrapper<NoExtraKeys>(
{ AndroidAutofill.confirmCancelled.record(it) }
)
is Event.AndroidAutofillConfirmationSuccessful -> EventWrapper<NoExtraKeys>(
{ AndroidAutofill.confirmSuccessful.record(it) }
)
is Event.CreditCardSaved -> EventWrapper<NoExtraKeys>(
{ CreditCards.saved.add() }
)

@ -37,6 +37,7 @@ import mozilla.telemetry.glean.private.NoExtras
import org.mozilla.fenix.BuildConfig
import org.mozilla.fenix.GleanMetrics.Addons
import org.mozilla.fenix.GleanMetrics.ContextMenu
import org.mozilla.fenix.GleanMetrics.AndroidAutofill
import org.mozilla.fenix.GleanMetrics.CustomTab
import org.mozilla.fenix.GleanMetrics.Events
import org.mozilla.fenix.GleanMetrics.LoginDialog
@ -107,6 +108,7 @@ internal class ReleaseMetricController(
}
@VisibleForTesting
@Suppress("LongMethod")
internal fun Fact.process(): Unit = when (component to item) {
Component.FEATURE_PROMPTS to LoginDialogFacts.Items.DISPLAY -> {
LoginDialog.displayed.record(NoExtras())
@ -162,6 +164,36 @@ internal class ReleaseMetricController(
Unit
}
Component.FEATURE_AUTOFILL to AutofillFacts.Items.AUTOFILL_REQUEST -> {
val hasMatchingLogins = metadata?.get(AutofillFacts.Metadata.HAS_MATCHING_LOGINS) as Boolean?
if (hasMatchingLogins == true) {
AndroidAutofill.requestMatchingLogins.record(NoExtras())
} else {
AndroidAutofill.requestNoMatchingLogins.record(NoExtras())
}
}
Component.FEATURE_AUTOFILL to AutofillFacts.Items.AUTOFILL_SEARCH -> {
if (action == Action.SELECT) {
AndroidAutofill.searchItemSelected.record(NoExtras())
} else {
AndroidAutofill.searchDisplayed.record(NoExtras())
}
}
Component.FEATURE_AUTOFILL to AutofillFacts.Items.AUTOFILL_CONFIRMATION -> {
if (action == Action.CONFIRM) {
AndroidAutofill.confirmSuccessful.record(NoExtras())
} else {
AndroidAutofill.confirmCancelled.record(NoExtras())
}
}
Component.FEATURE_AUTOFILL to AutofillFacts.Items.AUTOFILL_LOCK -> {
if (action == Action.CONFIRM) {
AndroidAutofill.unlockSuccessful.record(NoExtras())
} else {
AndroidAutofill.unlockCancelled.record(NoExtras())
}
}
else -> {
this.toEvent()?.also {
track(it)
@ -334,35 +366,6 @@ internal class ReleaseMetricController(
Component.FEATURE_SEARCH == component && InContentTelemetry.IN_CONTENT_SEARCH == item -> {
Event.SearchInContent(value!!)
}
Component.FEATURE_AUTOFILL == component && AutofillFacts.Items.AUTOFILL_REQUEST == item -> {
val hasMatchingLogins = metadata?.get(AutofillFacts.Metadata.HAS_MATCHING_LOGINS) as Boolean?
if (hasMatchingLogins == true) {
Event.AndroidAutofillRequestWithLogins
} else {
Event.AndroidAutofillRequestWithoutLogins
}
}
Component.FEATURE_AUTOFILL == component && AutofillFacts.Items.AUTOFILL_SEARCH == item -> {
if (action == Action.SELECT) {
Event.AndroidAutofillSearchItemSelected
} else {
Event.AndroidAutofillSearchDisplayed
}
}
Component.FEATURE_AUTOFILL == component && AutofillFacts.Items.AUTOFILL_LOCK == item -> {
if (action == Action.CONFIRM) {
Event.AndroidAutofillUnlockSuccessful
} else {
Event.AndroidAutofillUnlockCanceled
}
}
Component.FEATURE_AUTOFILL == component && AutofillFacts.Items.AUTOFILL_CONFIRMATION == item -> {
if (action == Action.CONFIRM) {
Event.AndroidAutofillConfirmationSuccessful
} else {
Event.AndroidAutofillConfirmationCanceled
}
}
else -> null
}

@ -11,6 +11,7 @@ import io.mockk.mockk
import io.mockk.verify
import io.mockk.verifyAll
import mozilla.components.browser.toolbar.facts.ToolbarFacts
import mozilla.components.feature.autofill.facts.AutofillFacts
import mozilla.components.feature.awesomebar.facts.AwesomeBarFacts
import mozilla.components.feature.customtabs.CustomTabsFacts
import mozilla.components.feature.media.facts.MediaFacts
@ -27,10 +28,13 @@ import mozilla.components.support.test.robolectric.testContext
import mozilla.components.support.webextensions.facts.WebExtensionFacts
import mozilla.telemetry.glean.testing.GleanTestRule
import org.junit.Assert.assertEquals
import org.junit.Assert.assertFalse
import org.junit.Assert.assertTrue
import org.junit.Before
import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
import org.mozilla.fenix.GleanMetrics.AndroidAutofill
import org.mozilla.fenix.GleanMetrics.CustomTab
import org.mozilla.fenix.GleanMetrics.LoginDialog
import org.mozilla.fenix.GleanMetrics.MediaNotification
@ -496,4 +500,72 @@ class MetricControllerTest {
verify { dataService1.track(Event.AverageTabsPerSearchTermGroup(2.5)) }
verify { dataService1.track(Event.JumpBackInGroupTapped) }
}
@Test
fun `WHEN processing a FEATURE_AUTOFILL fact THEN the right metric is recorded`() {
val controller = ReleaseMetricController(emptyList(), { true }, { true }, mockk())
var fact = Fact(
Component.FEATURE_AUTOFILL,
mockk(relaxed = true),
AutofillFacts.Items.AUTOFILL_REQUEST,
metadata = mapOf(AutofillFacts.Metadata.HAS_MATCHING_LOGINS to true)
)
with(controller) {
assertFalse(AndroidAutofill.requestMatchingLogins.testHasValue())
fact.process()
assertTrue(AndroidAutofill.requestMatchingLogins.testHasValue())
fact = fact.copy(metadata = mapOf(AutofillFacts.Metadata.HAS_MATCHING_LOGINS to false))
assertFalse(AndroidAutofill.requestNoMatchingLogins.testHasValue())
fact.process()
assertTrue(AndroidAutofill.requestNoMatchingLogins.testHasValue())
fact = fact.copy(item = AutofillFacts.Items.AUTOFILL_SEARCH, action = Action.DISPLAY, metadata = null)
assertFalse(AndroidAutofill.searchDisplayed.testHasValue())
fact.process()
assertTrue(AndroidAutofill.searchDisplayed.testHasValue())
fact = fact.copy(action = Action.SELECT)
assertFalse(AndroidAutofill.searchItemSelected.testHasValue())
fact.process()
assertTrue(AndroidAutofill.searchItemSelected.testHasValue())
fact = fact.copy(item = AutofillFacts.Items.AUTOFILL_CONFIRMATION, action = Action.CONFIRM)
assertFalse(AndroidAutofill.confirmSuccessful.testHasValue())
fact.process()
assertTrue(AndroidAutofill.confirmSuccessful.testHasValue())
fact = fact.copy(action = Action.DISPLAY)
assertFalse(AndroidAutofill.confirmCancelled.testHasValue())
fact.process()
assertTrue(AndroidAutofill.confirmCancelled.testHasValue())
fact = fact.copy(item = AutofillFacts.Items.AUTOFILL_LOCK, action = Action.CONFIRM)
assertFalse(AndroidAutofill.unlockSuccessful.testHasValue())
fact.process()
assertTrue(AndroidAutofill.unlockSuccessful.testHasValue())
fact = fact.copy(action = Action.DISPLAY)
assertFalse(AndroidAutofill.unlockCancelled.testHasValue())
fact.process()
assertTrue(AndroidAutofill.unlockCancelled.testHasValue())
}
}
}

Loading…
Cancel
Save