For #1607 - Passes "custom" as the search engine identifier for custom engines

staging
Jeff Boek 5 years ago
parent dfea877fb7
commit 45c6e3a784

@ -244,8 +244,16 @@ sealed class Event {
data class PerformedSearch(val eventSource: EventSource) : Event() { data class PerformedSearch(val eventSource: EventSource) : Event() {
sealed class EngineSource { sealed class EngineSource {
data class Default(val engine: SearchEngine) : EngineSource() abstract val engine: SearchEngine
data class Shortcut(val engine: SearchEngine) : EngineSource() abstract val isCustom: Boolean
data class Default(override val engine: SearchEngine, override val isCustom: Boolean) : EngineSource()
data class Shortcut(override val engine: SearchEngine, override val isCustom: Boolean) : EngineSource()
// https://github.com/mozilla-mobile/fenix/issues/1607
// Sanitize identifiers for custom search engines.
val identifier: String
get() = if (isCustom) "custom" else engine.identifier
val searchEngine: SearchEngine val searchEngine: SearchEngine
get() = when (this) { get() = when (this) {
@ -277,7 +285,7 @@ sealed class Event {
} }
val countLabel: String val countLabel: String
get() = "${source.searchEngine.identifier.toLowerCase(Locale.ROOT)}.$label" get() = "${source.identifier.toLowerCase(Locale.getDefault())}.$label"
val sourceLabel: String val sourceLabel: String
get() = "${source.descriptor}.$label" get() = "${source.descriptor}.$label"

@ -14,6 +14,7 @@ import org.mozilla.fenix.BrowserDirection
import org.mozilla.fenix.HomeActivity import org.mozilla.fenix.HomeActivity
import org.mozilla.fenix.R import org.mozilla.fenix.R
import org.mozilla.fenix.components.metrics.Event import org.mozilla.fenix.components.metrics.Event
import org.mozilla.fenix.components.searchengine.CustomSearchEngineStore
import org.mozilla.fenix.ext.metrics import org.mozilla.fenix.ext.metrics
import org.mozilla.fenix.ext.nav import org.mozilla.fenix.ext.nav
import org.mozilla.fenix.ext.settings import org.mozilla.fenix.ext.settings
@ -126,10 +127,11 @@ class DefaultSearchController(
isSuggestion: Boolean isSuggestion: Boolean
): Event.PerformedSearch { ): Event.PerformedSearch {
val isShortcut = engine != context.searchEngineManager.defaultSearchEngine val isShortcut = engine != context.searchEngineManager.defaultSearchEngine
val isCustom = CustomSearchEngineStore.isCustomSearchEngine(context, engine.identifier)
val engineSource = val engineSource =
if (isShortcut) Event.PerformedSearch.EngineSource.Shortcut(engine) if (isShortcut) Event.PerformedSearch.EngineSource.Shortcut(engine, isCustom)
else Event.PerformedSearch.EngineSource.Default(engine) else Event.PerformedSearch.EngineSource.Default(engine, isCustom)
val source = val source =
if (isSuggestion) Event.PerformedSearch.EventSource.Suggestion(engineSource) if (isSuggestion) Event.PerformedSearch.EventSource.Suggestion(engineSource)

@ -38,7 +38,7 @@ class PerformedSearchTest {
@Test @Test
fun testThatCountLabelIsValid() { fun testThatCountLabelIsValid() {
val labels = searchEngines.map { val labels = searchEngines.map {
PerformedSearch(EventSource.Action(EngineSource.Shortcut(it))).eventSource.countLabel PerformedSearch(EventSource.Action(EngineSource.Shortcut(it, false))).eventSource.countLabel
} }
labels.forEach { labels.forEach {

@ -38,11 +38,11 @@ import org.robolectric.annotation.Config
class SearchInteractorTest { class SearchInteractorTest {
@Test @Test
fun onUrlCommitted() { fun onUrlCommitted() {
val context: HomeActivity = mockk() val context: HomeActivity = mockk(relaxed = true)
val store: SearchFragmentStore = mockk() val store: SearchFragmentStore = mockk()
val state: SearchFragmentState = mockk() val state: SearchFragmentState = mockk()
val searchEngineManager: SearchEngineManager = mockk(relaxed = true) val searchEngineManager: SearchEngineManager = mockk(relaxed = true)
val searchEngine = SearchEngineSource.Default(mockk()) val searchEngine = SearchEngineSource.Default(mockk(relaxed = true))
every { context.metrics } returns mockk(relaxed = true) every { context.metrics } returns mockk(relaxed = true)
every { context.searchEngineManager } returns searchEngineManager every { context.searchEngineManager } returns searchEngineManager
@ -148,11 +148,11 @@ class SearchInteractorTest {
@Test @Test
fun onSearchTermsTapped() { fun onSearchTermsTapped() {
val context: HomeActivity = mockk() val context: HomeActivity = mockk(relaxed = true)
val store: SearchFragmentStore = mockk() val store: SearchFragmentStore = mockk()
val state: SearchFragmentState = mockk() val state: SearchFragmentState = mockk()
val searchEngineManager: SearchEngineManager = mockk(relaxed = true) val searchEngineManager: SearchEngineManager = mockk(relaxed = true)
val searchEngine = SearchEngineSource.Default(mockk()) val searchEngine = SearchEngineSource.Default(mockk(relaxed = true))
every { context.metrics } returns mockk(relaxed = true) every { context.metrics } returns mockk(relaxed = true)
every { context.searchEngineManager } returns searchEngineManager every { context.searchEngineManager } returns searchEngineManager

Loading…
Cancel
Save