From 41452e945b20a1e223093eeb48c408fd63b6c9cf Mon Sep 17 00:00:00 2001 From: Tiger Oakes Date: Thu, 2 Jul 2020 14:57:22 -0700 Subject: [PATCH] Move SearchProviderModel extension to class --- .../main/java/org/mozilla/fenix/ext/Ads.kt | 29 --------- .../search/telemetry/SearchProviderModel.kt | 59 ++++++++++++++++--- .../search/telemetry/ads/AdsTelemetry.kt | 1 - .../SearchProviderModelTest.kt} | 4 +- 4 files changed, 54 insertions(+), 39 deletions(-) delete mode 100644 app/src/main/java/org/mozilla/fenix/ext/Ads.kt rename app/src/test/java/org/mozilla/fenix/{ext/AdsTest.kt => search/SearchProviderModelTest.kt} (95%) diff --git a/app/src/main/java/org/mozilla/fenix/ext/Ads.kt b/app/src/main/java/org/mozilla/fenix/ext/Ads.kt deleted file mode 100644 index 7bf818598..000000000 --- a/app/src/main/java/org/mozilla/fenix/ext/Ads.kt +++ /dev/null @@ -1,29 +0,0 @@ -/* 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 org.mozilla.fenix.search.telemetry.SearchProviderModel - -fun SearchProviderModel.containsAds(urlList: List): Boolean { - return urlList.containsAds(this.extraAdServersRegexps) -} - -private fun String.isAd(adRegexps: List): Boolean { - for (adsRegex in adRegexps) { - if (Regex(adsRegex).containsMatchIn(this)) { - return true - } - } - return false -} - -private fun List.containsAds(adRegexps: List): Boolean { - for (url in this) { - if (url.isAd(adRegexps)) { - return true - } - } - return false -} diff --git a/app/src/main/java/org/mozilla/fenix/search/telemetry/SearchProviderModel.kt b/app/src/main/java/org/mozilla/fenix/search/telemetry/SearchProviderModel.kt index a1894c98e..a0d4d21fa 100644 --- a/app/src/main/java/org/mozilla/fenix/search/telemetry/SearchProviderModel.kt +++ b/app/src/main/java/org/mozilla/fenix/search/telemetry/SearchProviderModel.kt @@ -6,11 +6,56 @@ package org.mozilla.fenix.search.telemetry data class SearchProviderModel( val name: String, - val regexp: String, + val regexp: Regex, val queryParam: String, - val codeParam: String = "", - val codePrefixes: List = ArrayList(), - val followOnParams: List = ArrayList(), - val extraAdServersRegexps: List = ArrayList(), - val followOnCookies: List = ArrayList() -) + val codeParam: String, + val codePrefixes: List, + val followOnParams: List, + val extraAdServersRegexps: List, + val followOnCookies: List +) { + + constructor( + name: String, + regexp: String, + queryParam: String, + codeParam: String = "", + codePrefixes: List = emptyList(), + followOnParams: List = emptyList(), + extraAdServersRegexps: List = emptyList(), + followOnCookies: List = emptyList() + ) : this( + name = name, + regexp = regexp.toRegex(), + queryParam = queryParam, + codeParam = codeParam, + codePrefixes = codePrefixes, + followOnParams = followOnParams, + extraAdServersRegexps = extraAdServersRegexps.map { it.toRegex() }, + followOnCookies = followOnCookies + ) + + /** + * Checks if any of the given URLs represent an ad from the search engine. + * Used to check if a clicked link was for an ad. + */ + fun containsAds(urlList: List) = urlList.containsAds(extraAdServersRegexps) + + private fun String.isAd(adRegexps: List): Boolean { + for (adsRegex in adRegexps) { + if (adsRegex.containsMatchIn(this)) { + return true + } + } + return false + } + + private fun List.containsAds(adRegexps: List): Boolean { + for (url in this) { + if (url.isAd(adRegexps)) { + return true + } + } + return false + } +} diff --git a/app/src/main/java/org/mozilla/fenix/search/telemetry/ads/AdsTelemetry.kt b/app/src/main/java/org/mozilla/fenix/search/telemetry/ads/AdsTelemetry.kt index 645efc10e..97dfcc56d 100644 --- a/app/src/main/java/org/mozilla/fenix/search/telemetry/ads/AdsTelemetry.kt +++ b/app/src/main/java/org/mozilla/fenix/search/telemetry/ads/AdsTelemetry.kt @@ -10,7 +10,6 @@ import mozilla.components.concept.engine.Engine import org.json.JSONObject import org.mozilla.fenix.components.metrics.Event import org.mozilla.fenix.components.metrics.MetricController -import org.mozilla.fenix.ext.containsAds import org.mozilla.fenix.search.telemetry.BaseSearchTelemetry import org.mozilla.fenix.search.telemetry.ExtensionInfo diff --git a/app/src/test/java/org/mozilla/fenix/ext/AdsTest.kt b/app/src/test/java/org/mozilla/fenix/search/SearchProviderModelTest.kt similarity index 95% rename from app/src/test/java/org/mozilla/fenix/ext/AdsTest.kt rename to app/src/test/java/org/mozilla/fenix/search/SearchProviderModelTest.kt index 76d89dacc..31879d39c 100644 --- a/app/src/test/java/org/mozilla/fenix/ext/AdsTest.kt +++ b/app/src/test/java/org/mozilla/fenix/search/SearchProviderModelTest.kt @@ -2,14 +2,14 @@ * 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 +package org.mozilla.fenix.search import org.junit.Assert.assertFalse import org.junit.Assert.assertTrue import org.junit.Test import org.mozilla.fenix.search.telemetry.SearchProviderModel -class AdsTest { +class SearchProviderModelTest { private val testSearchProvider = SearchProviderModel(