For #26706 - Change TopSite.containsQueryParameters as Uri extension function

This commit is contained in:
Alexandru2909 2022-08-30 16:53:13 +03:00 committed by mergify[bot]
parent 2f1f6f3213
commit 070bf5ac24
7 changed files with 91 additions and 76 deletions

View File

@ -5,6 +5,7 @@
package org.mozilla.fenix
import android.annotation.SuppressLint
import android.net.Uri
import android.os.Build
import android.os.Build.VERSION.SDK_INT
import android.os.StrictMode
@ -44,7 +45,6 @@ import mozilla.components.service.fxa.manager.SyncEnginesStorage
import mozilla.components.service.glean.Glean
import mozilla.components.service.glean.config.Configuration
import mozilla.components.service.glean.net.ConceptFetchHttpUploader
import mozilla.components.support.rusterrors.initializeRustErrors
import mozilla.components.support.base.facts.register
import mozilla.components.support.base.log.Log
import mozilla.components.support.base.log.logger.Logger
@ -52,6 +52,7 @@ import mozilla.components.support.base.observer.Observable
import mozilla.components.support.ktx.android.content.isMainProcess
import mozilla.components.support.ktx.android.content.runOnlyInMainProcess
import mozilla.components.support.locale.LocaleAwareApplication
import mozilla.components.support.rusterrors.initializeRustErrors
import mozilla.components.support.rusthttp.RustHttpConfig
import mozilla.components.support.rustlog.RustLog
import mozilla.components.support.utils.logElapsedTime
@ -275,7 +276,10 @@ open class FenixApplication : LocaleAwareApplication(), Provider {
totalSites = components.settings.topSitesMaxLimit,
frecencyConfig = TopSitesFrecencyConfig(
FrecencyThresholdOption.SKIP_ONE_TIME_PAGES
) { !it.containsQueryParameters(components.settings.frecencyFilterQuery) },
) {
!Uri.parse(it.url)
.containsQueryParameters(components.settings.frecencyFilterQuery)
},
providerConfig = TopSitesProviderConfig(
showProviderTopSites = components.settings.showContileFeature,
maxThreshold = TOP_SITES_PROVIDER_MAX_THRESHOLD

View File

@ -4,7 +4,6 @@
package org.mozilla.fenix.ext
import android.net.Uri
import mozilla.components.feature.top.sites.TopSite
import org.mozilla.fenix.settings.SupportUtils
@ -36,31 +35,3 @@ fun List<TopSite>.sort(): List<TopSite> {
result
}
}
/**
* Returns true if the url contains any query parameters specified by the [searchParameters].
*
* @param searchParameters [String] of the following forms:
* - "" (empty) - Don't search for any params
* - "key" - Search param named "key" with any or no value
* - "key=" - Search param named "key" with no value
* - "key=value" - Search param named "key" with value "value"
*/
fun TopSite.containsQueryParameters(searchParameters: String): Boolean {
if (searchParameters.isBlank()) {
return false
}
val params = searchParameters.split("=")
val uri = Uri.parse(url)
return when (params.size) {
1 -> {
uri.queryParameterNames.contains(params.first()) &&
uri.getQueryParameter(params.first()).isNullOrBlank()
}
2 -> {
uri.queryParameterNames.contains(params.first()) &&
uri.getQueryParameter(params.first()) == params.last()
}
else -> false
}
}

View File

@ -0,0 +1,34 @@
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
package org.mozilla.fenix.ext
import android.net.Uri
/**
* Returns true if the url contains any query parameters specified by the [searchParameters].
*
* @param searchParameters [String] of the following forms:
* - "" (empty) - Don't search for any params
* - "key" - Search param named "key" with any or no value
* - "key=" - Search param named "key" with no value
* - "key=value" - Search param named "key" with value "value"
*/
fun Uri.containsQueryParameters(searchParameters: String): Boolean {
if (searchParameters.isBlank()) {
return false
}
val params = searchParameters.split("=")
return when (params.size) {
1 -> {
this.queryParameterNames.contains(params.first()) &&
this.getQueryParameter(params.first()).isNullOrBlank()
}
2 -> {
this.queryParameterNames.contains(params.first()) &&
this.getQueryParameter(params.first()) == params.last()
}
else -> false
}
}

View File

@ -8,6 +8,7 @@ import android.annotation.SuppressLint
import android.content.res.Configuration
import android.graphics.drawable.BitmapDrawable
import android.graphics.drawable.ColorDrawable
import android.net.Uri
import android.os.Bundle
import android.os.StrictMode
import android.view.Gravity
@ -432,7 +433,7 @@ class HomeFragment : Fragment() {
totalSites = settings.topSitesMaxLimit,
frecencyConfig = TopSitesFrecencyConfig(
FrecencyThresholdOption.SKIP_ONE_TIME_PAGES
) { !it.containsQueryParameters(settings.frecencyFilterQuery) },
) { !Uri.parse(it.url).containsQueryParameters(settings.frecencyFilterQuery) },
providerConfig = TopSitesProviderConfig(
showProviderTopSites = settings.showContileFeature,
maxThreshold = TOP_SITES_PROVIDER_MAX_THRESHOLD,

View File

@ -1128,8 +1128,8 @@ class Settings(private val appContext: Context) : PreferencesHolder {
default = ""
)
/**
* URLs from the user's history that contain this search param will be hidden
* from the top sites. The value is a string with one of the following forms:
* URLs from the user's history that contain this search param will be hidden.
* The value is a string with one of the following forms:
* - "" (empty) - Disable this feature
* - "key" - Search param named "key" with any or no value
* - "key=" - Search param named "key" with no value
@ -1137,7 +1137,7 @@ class Settings(private val appContext: Context) : PreferencesHolder {
*/
val frecencyFilterQuery by stringPreference(
appContext.getPreferenceKey(R.string.pref_key_frecency_filter_query),
default = "mfadid=adm"
default = "mfadid=adm" // Parameter provided by adM
)
/**

View File

@ -6,8 +6,6 @@ package org.mozilla.fenix.ext
import mozilla.components.feature.top.sites.TopSite
import org.junit.Assert.assertEquals
import org.junit.Assert.assertFalse
import org.junit.Assert.assertTrue
import org.junit.Test
import org.junit.runner.RunWith
import org.mozilla.fenix.helpers.FenixRobolectricTestRunner
@ -116,43 +114,4 @@ class TopSiteTest {
assertEquals(topSites.sort(), expected)
}
@Test
fun `WHEN containsQueryParameters is invoked THEN the result should be true only if the url contains the search parameters`() {
var searchParameters = ""
val querySite = TopSite.Frecent(
id = 1L,
title = "Search",
url = "test.com/?q=value",
createdAt = 0
)
val blankQuerySite = TopSite.Frecent(
id = 1L,
title = "BlankSearch",
url = "test.com/?q=",
createdAt = 0
)
assertFalse(defaultGoogleTopSite.containsQueryParameters(searchParameters))
assertFalse(querySite.containsQueryParameters(searchParameters))
assertFalse(blankQuerySite.containsQueryParameters(searchParameters))
searchParameters = "q"
assertFalse(defaultGoogleTopSite.containsQueryParameters(searchParameters))
assertFalse(querySite.containsQueryParameters(searchParameters))
assertTrue(blankQuerySite.containsQueryParameters(searchParameters))
searchParameters = "q="
assertFalse(defaultGoogleTopSite.containsQueryParameters(searchParameters))
assertFalse(querySite.containsQueryParameters(searchParameters))
assertTrue(blankQuerySite.containsQueryParameters(searchParameters))
searchParameters = "q=value"
assertFalse(defaultGoogleTopSite.containsQueryParameters(searchParameters))
assertTrue(querySite.containsQueryParameters(searchParameters))
assertFalse(blankQuerySite.containsQueryParameters(searchParameters))
}
}

View File

@ -0,0 +1,46 @@
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
package org.mozilla.fenix.ext
import android.net.Uri
import org.junit.Assert.assertFalse
import org.junit.Assert.assertTrue
import org.junit.Test
import org.junit.runner.RunWith
import org.mozilla.fenix.helpers.FenixRobolectricTestRunner
import org.mozilla.fenix.settings.SupportUtils
@RunWith(FenixRobolectricTestRunner::class)
class UriTest {
@Test
fun `WHEN urlContainsQueryParameters is invoked THEN the result should be true only if the url contains the search parameters`() {
var searchParameters = ""
val googleSite = Uri.parse(SupportUtils.GOOGLE_URL)
val querySite = Uri.parse("test.com/?q=value")
val blankQuerySite = Uri.parse("test.com/?q=")
assertFalse(googleSite.containsQueryParameters(searchParameters))
assertFalse(querySite.containsQueryParameters(searchParameters))
assertFalse(blankQuerySite.containsQueryParameters(searchParameters))
searchParameters = "q"
assertFalse(googleSite.containsQueryParameters(searchParameters))
assertFalse(querySite.containsQueryParameters(searchParameters))
assertTrue(blankQuerySite.containsQueryParameters(searchParameters))
searchParameters = "q="
assertFalse(googleSite.containsQueryParameters(searchParameters))
assertFalse(querySite.containsQueryParameters(searchParameters))
assertTrue(blankQuerySite.containsQueryParameters(searchParameters))
searchParameters = "q=value"
assertFalse(googleSite.containsQueryParameters(searchParameters))
assertTrue(querySite.containsQueryParameters(searchParameters))
assertFalse(blankQuerySite.containsQueryParameters(searchParameters))
}
}