Closes #17530: Update has open tabs metrics when tabs are opened or closed (#17557)

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

@ -104,6 +104,11 @@ class TelemetryMiddleware(
is TabListAction.RestoreAction -> { is TabListAction.RestoreAction -> {
// Update/Persist tabs count whenever it changes // Update/Persist tabs count whenever it changes
settings.openTabsCount = context.state.normalTabs.count() settings.openTabsCount = context.state.normalTabs.count()
if (context.state.normalTabs.count() > 0) {
metrics.track(Event.HaveOpenTabs)
} else {
metrics.track(Event.HaveNoOpenTabs)
}
} }
} }
} }

@ -197,6 +197,8 @@ sealed class Event {
object SyncedTabOpened : Event() object SyncedTabOpened : Event()
object RecentlyClosedTabsOpened : Event() object RecentlyClosedTabsOpened : Event()
object HaveOpenTabs : Event()
object HaveNoOpenTabs : Event()
object ContextMenuCopyTapped : Event() object ContextMenuCopyTapped : Event()
object ContextMenuSearchTapped : Event() object ContextMenuSearchTapped : Event()

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

@ -6,6 +6,8 @@ package org.mozilla.fenix
import io.mockk.mockk import io.mockk.mockk
import io.mockk.verify import io.mockk.verify
import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.test.TestCoroutineDispatcher
import mozilla.components.browser.state.action.ContentAction import mozilla.components.browser.state.action.ContentAction
import mozilla.components.browser.state.action.DownloadAction import mozilla.components.browser.state.action.DownloadAction
import mozilla.components.browser.state.action.TabListAction import mozilla.components.browser.state.action.TabListAction
@ -15,10 +17,12 @@ import mozilla.components.browser.state.store.BrowserStore
import mozilla.components.support.test.ext.joinBlocking import mozilla.components.support.test.ext.joinBlocking
import mozilla.components.support.test.mock import mozilla.components.support.test.mock
import mozilla.components.support.test.robolectric.testContext import mozilla.components.support.test.robolectric.testContext
import mozilla.components.support.test.rule.MainCoroutineRule
import org.junit.Assert.assertEquals import org.junit.Assert.assertEquals
import org.junit.Assert.assertNotNull import org.junit.Assert.assertNotNull
import org.junit.Assert.assertNull import org.junit.Assert.assertNull
import org.junit.Before import org.junit.Before
import org.junit.Rule
import org.junit.Test import org.junit.Test
import org.junit.runner.RunWith import org.junit.runner.RunWith
import org.mozilla.fenix.components.metrics.Event import org.mozilla.fenix.components.metrics.Event
@ -28,6 +32,7 @@ import org.mozilla.fenix.search.telemetry.ads.AdsTelemetry
import org.mozilla.fenix.utils.Settings import org.mozilla.fenix.utils.Settings
@RunWith(FenixRobolectricTestRunner::class) @RunWith(FenixRobolectricTestRunner::class)
@ExperimentalCoroutinesApi
class TelemetryMiddlewareTest { class TelemetryMiddlewareTest {
private lateinit var store: BrowserStore private lateinit var store: BrowserStore
@ -35,11 +40,15 @@ class TelemetryMiddlewareTest {
private lateinit var telemetryMiddleware: TelemetryMiddleware private lateinit var telemetryMiddleware: TelemetryMiddleware
private lateinit var metrics: MetricController private lateinit var metrics: MetricController
private lateinit var adsTelemetry: AdsTelemetry private lateinit var adsTelemetry: AdsTelemetry
private val testDispatcher = TestCoroutineDispatcher()
@get:Rule
val coroutinesTestRule = MainCoroutineRule(testDispatcher)
@Before @Before
fun setUp() { fun setUp() {
settings = Settings(testContext) settings = Settings(testContext)
metrics = mockk() metrics = mockk(relaxed = true)
adsTelemetry = mockk() adsTelemetry = mockk()
telemetryMiddleware = TelemetryMiddleware( telemetryMiddleware = TelemetryMiddleware(
settings, settings,
@ -55,6 +64,7 @@ class TelemetryMiddlewareTest {
store.dispatch(TabListAction.AddTabAction(createTab("https://mozilla.org"))).joinBlocking() store.dispatch(TabListAction.AddTabAction(createTab("https://mozilla.org"))).joinBlocking()
assertEquals(1, settings.openTabsCount) assertEquals(1, settings.openTabsCount)
verify(exactly = 1) { metrics.track(Event.HaveOpenTabs) }
} }
@Test @Test
@ -63,6 +73,7 @@ class TelemetryMiddlewareTest {
store.dispatch(TabListAction.AddTabAction(createTab("https://mozilla.org", private = true))).joinBlocking() store.dispatch(TabListAction.AddTabAction(createTab("https://mozilla.org", private = true))).joinBlocking()
assertEquals(0, settings.openTabsCount) assertEquals(0, settings.openTabsCount)
verify(exactly = 1) { metrics.track(Event.HaveNoOpenTabs) }
} }
@Test @Test
@ -76,6 +87,7 @@ class TelemetryMiddlewareTest {
).joinBlocking() ).joinBlocking()
assertEquals(2, settings.openTabsCount) assertEquals(2, settings.openTabsCount)
verify(exactly = 1) { metrics.track(Event.HaveOpenTabs) }
} }
@Test @Test
@ -87,9 +99,11 @@ class TelemetryMiddlewareTest {
) )
).joinBlocking() ).joinBlocking()
assertEquals(2, settings.openTabsCount) assertEquals(2, settings.openTabsCount)
verify(exactly = 1) { metrics.track(Event.HaveOpenTabs) }
store.dispatch(TabListAction.RemoveTabAction("1")).joinBlocking() store.dispatch(TabListAction.RemoveTabAction("1")).joinBlocking()
assertEquals(1, settings.openTabsCount) assertEquals(1, settings.openTabsCount)
verify(exactly = 2) { metrics.track(Event.HaveOpenTabs) }
} }
@Test @Test
@ -101,9 +115,11 @@ class TelemetryMiddlewareTest {
) )
).joinBlocking() ).joinBlocking()
assertEquals(2, settings.openTabsCount) assertEquals(2, settings.openTabsCount)
verify(exactly = 1) { metrics.track(Event.HaveOpenTabs) }
store.dispatch(TabListAction.RemoveAllTabsAction).joinBlocking() store.dispatch(TabListAction.RemoveAllTabsAction).joinBlocking()
assertEquals(0, settings.openTabsCount) assertEquals(0, settings.openTabsCount)
verify(exactly = 1) { metrics.track(Event.HaveNoOpenTabs) }
} }
@Test @Test
@ -116,9 +132,11 @@ class TelemetryMiddlewareTest {
) )
).joinBlocking() ).joinBlocking()
assertEquals(2, settings.openTabsCount) assertEquals(2, settings.openTabsCount)
verify(exactly = 1) { metrics.track(Event.HaveOpenTabs) }
store.dispatch(TabListAction.RemoveAllNormalTabsAction).joinBlocking() store.dispatch(TabListAction.RemoveAllNormalTabsAction).joinBlocking()
assertEquals(0, settings.openTabsCount) assertEquals(0, settings.openTabsCount)
verify(exactly = 1) { metrics.track(Event.HaveNoOpenTabs) }
} }
@Test @Test
@ -131,6 +149,7 @@ class TelemetryMiddlewareTest {
store.dispatch(TabListAction.RestoreAction(tabsToRestore)).joinBlocking() store.dispatch(TabListAction.RestoreAction(tabsToRestore)).joinBlocking()
assertEquals(2, settings.openTabsCount) assertEquals(2, settings.openTabsCount)
verify(exactly = 1) { metrics.track(Event.HaveOpenTabs) }
} }
@Test @Test

Loading…
Cancel
Save