Closes #17531: Use top sites count fact for top sites telemetry (#17664)

upstream-sync
Roger Yang 3 years ago committed by GitHub
parent ac13f0dd46
commit 124c2baf30
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -205,6 +205,9 @@ sealed class Event {
object ContextMenuSelectAllTapped : Event()
object ContextMenuShareTapped : Event()
object HaveTopSites : Event()
object HaveNoTopSites : Event()
// Interaction events with extras
data class TopSiteSwipeCarousel(val page: Int) : Event() {

@ -726,6 +726,12 @@ private val Event.wrapper: EventWrapper<*>?
Event.HaveNoOpenTabs -> EventWrapper<NoExtraKeys>(
{ Metrics.hasOpenTabs.set(false) }
)
Event.HaveTopSites -> EventWrapper<NoExtraKeys>(
{ Metrics.hasTopSites.set(true) }
)
Event.HaveNoTopSites -> EventWrapper<NoExtraKeys>(
{ Metrics.hasTopSites.set(false) }
)
// Don't record other events in Glean:
is Event.AddBookmark -> null

@ -22,6 +22,7 @@ import mozilla.components.feature.findinpage.facts.FindInPageFacts
import mozilla.components.feature.media.facts.MediaFacts
import mozilla.components.feature.prompts.dialog.LoginDialogFacts
import mozilla.components.feature.pwa.ProgressiveWebAppFacts
import mozilla.components.feature.top.sites.facts.TopSitesFacts
import mozilla.components.support.base.Component
import mozilla.components.support.base.facts.Action
import mozilla.components.support.base.facts.Fact
@ -134,6 +135,13 @@ internal class ReleaseMetricController(
}
}
@VisibleForTesting
internal fun factToEvent(
fact: Fact
): Event? {
return fact.toEvent()
}
private fun isInitialized(type: MetricServiceType): Boolean = initialized.contains(type)
private fun isTelemetryEnabled(type: MetricServiceType): Boolean = when (type) {
@ -242,6 +250,23 @@ internal class ReleaseMetricController(
Component.FEATURE_PWA to ProgressiveWebAppFacts.Items.INSTALL_SHORTCUT -> {
Event.ProgressiveWebAppInstallAsShortcut
}
Component.FEATURE_TOP_SITES to TopSitesFacts.Items.COUNT -> {
value?.let {
var count = 0
try {
count = it.toInt()
} catch (e: NumberFormatException) {
// Do nothing
}
return if (count > 0) {
Event.HaveTopSites
} else {
Event.HaveNoTopSites
}
}
null
}
else -> null
}

@ -10,7 +10,12 @@ import io.mockk.impl.annotations.MockK
import io.mockk.mockk
import io.mockk.verify
import io.mockk.verifyAll
import mozilla.components.feature.top.sites.facts.TopSitesFacts
import mozilla.components.support.base.Component
import mozilla.components.support.base.facts.Action
import mozilla.components.support.base.facts.Fact
import mozilla.components.support.base.log.logger.Logger
import org.junit.Assert.assertEquals
import org.junit.Before
import org.junit.Test
@ -167,4 +172,59 @@ class MetricControllerTest {
controller.track(Event.TabMediaPause)
verify { marketingService1.track(Event.TabMediaPause) }
}
@Test
fun `topsites fact should convert to the right events`() {
var enabled = true
val controller = ReleaseMetricController(
services = listOf(dataService1),
isDataTelemetryEnabled = { enabled },
isMarketingDataTelemetryEnabled = { enabled }
)
var fact = Fact(
Component.FEATURE_TOP_SITES,
Action.INTERACTION,
TopSitesFacts.Items.COUNT,
"1"
)
assertEquals(controller.factToEvent(fact), Event.HaveTopSites)
fact = Fact(
Component.FEATURE_TOP_SITES,
Action.INTERACTION,
TopSitesFacts.Items.COUNT,
"0"
)
assertEquals(controller.factToEvent(fact), Event.HaveNoTopSites)
fact = Fact(
Component.FEATURE_TOP_SITES,
Action.INTERACTION,
TopSitesFacts.Items.COUNT,
"10"
)
assertEquals(controller.factToEvent(fact), Event.HaveTopSites)
fact = Fact(
Component.FEATURE_TOP_SITES,
Action.INTERACTION,
TopSitesFacts.Items.COUNT,
"-4"
)
assertEquals(controller.factToEvent(fact), Event.HaveNoTopSites)
fact = Fact(
Component.FEATURE_TOP_SITES,
Action.INTERACTION,
TopSitesFacts.Items.COUNT,
"test"
)
assertEquals(controller.factToEvent(fact), Event.HaveNoTopSites)
}
}

Loading…
Cancel
Save