Closes #17956: Add top site telemetry to available search engines (#18129)

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

@ -13,6 +13,7 @@ import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
import mozilla.components.browser.state.selector.getNormalOrPrivateTabs
import mozilla.components.browser.state.state.availableSearchEngines
import mozilla.components.browser.state.state.searchEngines
import mozilla.components.browser.state.state.selectedOrDefaultSearchEngine
import mozilla.components.browser.state.store.BrowserStore
@ -384,19 +385,18 @@ class DefaultSessionControlController(
metrics.track(Event.PocketTopSiteClicked)
}
if (SupportUtils.GOOGLE_URL.equals(url, true)) {
val availableEngines = getAvailableSearchEngines()
val availableEngines = getAvailableSearchEngines()
val searchAccessPoint = Event.PerformedSearch.SearchAccessPoint.TOPSITE
val event =
availableEngines.firstOrNull { engine -> engine.suggestUrl?.contains(url) == true }
?.let { searchEngine ->
searchAccessPoint.let { sap ->
MetricsUtils.createSearchEvent(searchEngine, store, sap)
}
}
event?.let { activity.metrics.track(it) }
}
val searchAccessPoint = Event.PerformedSearch.SearchAccessPoint.TOPSITE
val event =
availableEngines.firstOrNull {
engine -> engine.resultUrls.firstOrNull { it.contains(url) } != null
}?.let {
searchEngine -> searchAccessPoint.let { sap ->
MetricsUtils.createSearchEvent(searchEngine, store, sap)
}
}
event?.let { activity.metrics.track(it) }
addTabUseCase.invoke(
url = appendSearchAttributionToUrlIfNeeded(url),
@ -407,13 +407,9 @@ class DefaultSessionControlController(
}
@VisibleForTesting
internal fun getAvailableSearchEngines() = activity
.components
.core
.store
.state
.search
.searchEngines
internal fun getAvailableSearchEngines() =
activity.components.core.store.state.search.searchEngines +
activity.components.core.store.state.search.availableSearchEngines
/**
* Append a search attribution query to any provided search engine URL based on the

@ -101,6 +101,15 @@ class DefaultSessionControlControllerTest {
suggestUrl = "https://www.google.com/"
)
private val duckDuckGoSearchEngine = SearchEngine(
id = "ddgTest",
name = "DuckDuckGo Test Engine",
icon = mockk(relaxed = true),
type = SearchEngine.Type.BUNDLED,
resultUrls = listOf("https://duckduckgo.com/?q=%7BsearchTerms%7D&t=fpas"),
suggestUrl = "https://ac.duckduckgo.com/ac/?q=%7BsearchTerms%7D&type=list"
)
private lateinit var store: BrowserStore
private lateinit var controller: DefaultSessionControlController
@ -374,6 +383,7 @@ class DefaultSessionControlControllerTest {
@Test
fun handleSelectDefaultTopSite() {
val topSiteUrl = "mozilla.org"
every { controller.getAvailableSearchEngines() } returns listOf(searchEngine)
controller.handleSelectTopSite(topSiteUrl, TopSite.Type.DEFAULT)
verify { metrics.track(Event.TopSiteOpenInNewTab) }
@ -391,6 +401,7 @@ class DefaultSessionControlControllerTest {
@Test
fun handleSelectNonDefaultTopSite() {
val topSiteUrl = "mozilla.org"
every { controller.getAvailableSearchEngines() } returns listOf(searchEngine)
controller.handleSelectTopSite(topSiteUrl, TopSite.Type.FRECENT)
verify { metrics.track(Event.TopSiteOpenInNewTab) }
@ -466,6 +477,36 @@ class DefaultSessionControlControllerTest {
)
)
)
metrics.track(Event.TopSiteOpenGoogle)
metrics.track(Event.TopSiteOpenDefault)
}
} finally {
unmockkStatic("mozilla.components.browser.state.state.SearchStateKt")
}
}
@Test
fun handleSelectDuckDuckGoTopSite_EventPerformedSearchTopSite() {
val topSiteUrl = "https://duckduckgo.com"
val engineSource = EngineSource.Shortcut(duckDuckGoSearchEngine, false)
every { controller.getAvailableSearchEngines() } returns listOf(googleSearchEngine, duckDuckGoSearchEngine)
try {
mockkStatic("mozilla.components.browser.state.state.SearchStateKt")
every { any<SearchState>().selectedOrDefaultSearchEngine } returns googleSearchEngine
controller.handleSelectTopSite(topSiteUrl, TopSite.Type.PINNED)
verify {
metrics.track(
Event.PerformedSearch(
Event.PerformedSearch.EventSource.TopSite(
engineSource
)
)
)
metrics.track(Event.TopSiteOpenPinned)
}
} finally {
unmockkStatic("mozilla.components.browser.state.state.SearchStateKt")

Loading…
Cancel
Save