tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

commit ce0b92f50a2c6bf85af54b752e8c9ae62d1389ec
parent 7f6a43a0feb20808d34e5c73546363bec720112e
Author: clairehurst <clairehurst@torproject.org>
Date:   Tue, 19 Sep 2023 16:58:32 -0600

TB 42089: [android] Remove ability to submit site support requests

Diffstat:
Mmobile/android/android-components/components/browser/engine-gecko/src/main/java/mozilla/components/browser/engine/gecko/cookiebanners/GeckoCookieBannersStorage.kt | 16++++++++--------
Mmobile/android/android-components/components/browser/engine-gecko/src/main/java/mozilla/components/browser/engine/gecko/cookiebanners/ReportSiteDomainsRepository.kt | 110++++++++++++++++++++++++++++++++++++++++----------------------------------------
Mmobile/android/android-components/components/browser/engine-gecko/src/test/java/mozilla/components/browser/engine/gecko/cookiebanners/GeckoCookieBannersStorageTest.kt | 264++++++++++++++++++++++++++++++++++++++++----------------------------------------
Mmobile/android/android-components/components/browser/engine-gecko/src/test/java/mozilla/components/browser/engine/gecko/cookiebanners/ReportSiteDomainsRepositoryTest.kt | 96++++++++++++++++++++++++++++++++++++++++----------------------------------------
Mmobile/android/android-components/components/concept/engine/src/main/java/mozilla/components/concept/engine/cookiehandling/CookieBannersStorage.kt | 4++--
Mmobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/Core.kt | 13+++++++------
Mmobile/android/fenix/app/src/main/java/org/mozilla/fenix/settings/quicksettings/protections/cookiebanners/CookieBannerDetailsController.kt | 64++++++++++++++++++++++++++++++++--------------------------------
Mmobile/android/fenix/app/src/main/java/org/mozilla/fenix/settings/quicksettings/protections/cookiebanners/CookieBannerDetailsInteractor.kt | 8++++----
Mmobile/android/fenix/app/src/main/java/org/mozilla/fenix/settings/quicksettings/protections/cookiebanners/CookieBannerHandlingDetailsView.kt | 28++++++++++++++--------------
Mmobile/android/fenix/app/src/main/java/org/mozilla/fenix/settings/quicksettings/protections/cookiebanners/CookieBannersStorageExt.kt | 16++++++++--------
Mmobile/android/fenix/app/src/main/java/org/mozilla/fenix/trackingprotection/ProtectionsStore.kt | 20++++++++++----------
Mmobile/android/fenix/app/src/main/res/layout/component_cookie_banner_details_panel.xml | 8++++----
Mmobile/android/fenix/app/src/test/java/org/mozilla/fenix/settings/quicksettings/protections/cookiebanners/CookieBannerHandlingDetailsViewTest.kt | 46+++++++++++++++++++++++-----------------------
Mmobile/android/fenix/app/src/test/java/org/mozilla/fenix/trackingprotection/ProtectionsStoreTest.kt | 32++++++++++++++++----------------
14 files changed, 363 insertions(+), 362 deletions(-)

diff --git a/mobile/android/android-components/components/browser/engine-gecko/src/main/java/mozilla/components/browser/engine/gecko/cookiebanners/GeckoCookieBannersStorage.kt b/mobile/android/android-components/components/browser/engine-gecko/src/main/java/mozilla/components/browser/engine/gecko/cookiebanners/GeckoCookieBannersStorage.kt @@ -21,7 +21,7 @@ import org.mozilla.geckoview.StorageController */ class GeckoCookieBannersStorage( runtime: GeckoRuntime, - private val reportSiteDomainsRepository: ReportSiteDomainsRepository, +// private val reportSiteDomainsRepository: ReportSiteDomainsRepository, ) : CookieBannersStorage { private val geckoStorage: StorageController = runtime.storageController @@ -34,13 +34,13 @@ class GeckoCookieBannersStorage( setGeckoException(uri, DISABLED, privateBrowsing) } - override suspend fun isSiteDomainReported(siteDomain: String): Boolean { - return reportSiteDomainsRepository.isSiteDomainReported(siteDomain) - } - - override suspend fun saveSiteDomain(siteDomain: String) { - reportSiteDomainsRepository.saveSiteDomain(siteDomain) - } +// override suspend fun isSiteDomainReported(siteDomain: String): Boolean { +// return reportSiteDomainsRepository.isSiteDomainReported(siteDomain) +// } +// +// override suspend fun saveSiteDomain(siteDomain: String) { +// reportSiteDomainsRepository.saveSiteDomain(siteDomain) +// } override suspend fun addPersistentExceptionInPrivateMode(uri: String) { setPersistentPrivateGeckoException(uri, DISABLED) diff --git a/mobile/android/android-components/components/browser/engine-gecko/src/main/java/mozilla/components/browser/engine/gecko/cookiebanners/ReportSiteDomainsRepository.kt b/mobile/android/android-components/components/browser/engine-gecko/src/main/java/mozilla/components/browser/engine/gecko/cookiebanners/ReportSiteDomainsRepository.kt @@ -12,64 +12,64 @@ import androidx.datastore.preferences.core.stringPreferencesKey import kotlinx.coroutines.flow.catch import kotlinx.coroutines.flow.first import kotlinx.coroutines.flow.map -import mozilla.components.browser.engine.gecko.cookiebanners.ReportSiteDomainsRepository.PreferencesKeys.REPORT_SITE_DOMAINS +//import mozilla.components.browser.engine.gecko.cookiebanners.ReportSiteDomainsRepository.PreferencesKeys.REPORT_SITE_DOMAINS import mozilla.components.support.base.log.logger.Logger import java.io.IOException /** * A repository to save reported site domains with the datastore API. */ -class ReportSiteDomainsRepository( - private val dataStore: DataStore<Preferences>, -) { - - companion object { - const val SEPARATOR = "@<;>@" - const val REPORT_SITE_DOMAINS_REPOSITORY_NAME = "report_site_domains_preferences" - const val PREFERENCE_KEY_NAME = "report_site_domains" - } - - private object PreferencesKeys { - val REPORT_SITE_DOMAINS = stringPreferencesKey(PREFERENCE_KEY_NAME) - } - - /** - * Check if the given site's domain url is saved locally. - * @param siteDomain the [siteDomain] that will be checked. - */ - suspend fun isSiteDomainReported(siteDomain: String): Boolean { - return dataStore.data - .catch { exception -> - if (exception is IOException) { - Logger.error("Error reading preferences.", exception) - emit(emptyPreferences()) - } else { - throw exception - } - }.map { preferences -> - val reportSiteDomainsString = preferences[REPORT_SITE_DOMAINS] ?: "" - val reportSiteDomainsList = - reportSiteDomainsString.split(SEPARATOR).filter { it.isNotEmpty() } - reportSiteDomainsList.contains(siteDomain) - }.first() - } - - /** - * Save the given site's domain url in datastore to keep it persistent locally. - * This method gets called after the site domain was reported with Nimbus. - * @param siteDomain the [siteDomain] that will be saved. - */ - suspend fun saveSiteDomain(siteDomain: String) { - dataStore.edit { preferences -> - val siteDomainsPreferences = preferences[REPORT_SITE_DOMAINS] ?: "" - val siteDomainsList = siteDomainsPreferences.split(SEPARATOR).filter { it.isNotEmpty() } - if (siteDomainsList.contains(siteDomain)) { - return@edit - } - val domains = mutableListOf<String>() - domains.addAll(siteDomainsList) - domains.add(siteDomain) - preferences[REPORT_SITE_DOMAINS] = domains.joinToString(SEPARATOR) - } - } -} +//class ReportSiteDomainsRepository( +// private val dataStore: DataStore<Preferences>, +//) { +// +// companion object { +// const val SEPARATOR = "@<;>@" +// const val REPORT_SITE_DOMAINS_REPOSITORY_NAME = "report_site_domains_preferences" +// const val PREFERENCE_KEY_NAME = "report_site_domains" +// } +// +// private object PreferencesKeys { +// val REPORT_SITE_DOMAINS = stringPreferencesKey(PREFERENCE_KEY_NAME) +// } +// +// /** +// * Check if the given site's domain url is saved locally. +// * @param siteDomain the [siteDomain] that will be checked. +// */ +// suspend fun isSiteDomainReported(siteDomain: String): Boolean { +// return dataStore.data +// .catch { exception -> +// if (exception is IOException) { +// Logger.error("Error reading preferences.", exception) +// emit(emptyPreferences()) +// } else { +// throw exception +// } +// }.map { preferences -> +// val reportSiteDomainsString = preferences[REPORT_SITE_DOMAINS] ?: "" +// val reportSiteDomainsList = +// reportSiteDomainsString.split(SEPARATOR).filter { it.isNotEmpty() } +// reportSiteDomainsList.contains(siteDomain) +// }.first() +// } +// +// /** +// * Save the given site's domain url in datastore to keep it persistent locally. +// * This method gets called after the site domain was reported with Nimbus. +// * @param siteDomain the [siteDomain] that will be saved. +// */ +// suspend fun saveSiteDomain(siteDomain: String) { +// dataStore.edit { preferences -> +// val siteDomainsPreferences = preferences[REPORT_SITE_DOMAINS] ?: "" +// val siteDomainsList = siteDomainsPreferences.split(SEPARATOR).filter { it.isNotEmpty() } +// if (siteDomainsList.contains(siteDomain)) { +// return@edit +// } +// val domains = mutableListOf<String>() +// domains.addAll(siteDomainsList) +// domains.add(siteDomain) +// preferences[REPORT_SITE_DOMAINS] = domains.joinToString(SEPARATOR) +// } +// } +//} diff --git a/mobile/android/android-components/components/browser/engine-gecko/src/test/java/mozilla/components/browser/engine/gecko/cookiebanners/GeckoCookieBannersStorageTest.kt b/mobile/android/android-components/components/browser/engine-gecko/src/test/java/mozilla/components/browser/engine/gecko/cookiebanners/GeckoCookieBannersStorageTest.kt @@ -24,136 +24,136 @@ import org.mozilla.geckoview.GeckoRuntime import org.mozilla.geckoview.StorageController class GeckoCookieBannersStorageTest { - private lateinit var runtime: GeckoRuntime - private lateinit var geckoStorage: GeckoCookieBannersStorage - private lateinit var storageController: StorageController - private lateinit var reportSiteDomainsRepository: ReportSiteDomainsRepository - - @Before - fun setup() { - storageController = mock() - runtime = mock() - reportSiteDomainsRepository = mock() - - whenever(runtime.storageController).thenReturn(storageController) - - geckoStorage = spy(GeckoCookieBannersStorage(runtime, reportSiteDomainsRepository)) - } - - @Test - fun `GIVEN a cookie banner mode WHEN adding an exception THEN add an exception for the given uri and browsing mode`() = - runTest { - val uri = "https://www.mozilla.org" - - doNothing().`when`(geckoStorage) - .setGeckoException(uri = uri, mode = DISABLED, privateBrowsing = false) - - geckoStorage.addException(uri = uri, privateBrowsing = false) - - verify(geckoStorage).setGeckoException(uri, DISABLED, false) - } - - @Test - fun `GIVEN uri and browsing mode WHEN removing an exception THEN remove the exception`() = - runTest { - val uri = "https://www.mozilla.org" - - doNothing().`when`(geckoStorage).removeGeckoException(uri, false) - - geckoStorage.removeException(uri = uri, privateBrowsing = false) - - verify(geckoStorage).removeGeckoException(uri, false) - } - - @Test - fun `GIVEN uri and browsing mode WHEN querying an exception THEN return the matching exception`() = - runTest { - val uri = "https://www.mozilla.org" - - doReturn(REJECT_OR_ACCEPT_ALL).`when`(geckoStorage) - .queryExceptionInGecko(uri = uri, privateBrowsing = false) - - val result = geckoStorage.findExceptionFor(uri = uri, privateBrowsing = false) - assertEquals(REJECT_OR_ACCEPT_ALL, result) - } - - @Test - fun `GIVEN error WHEN querying an exception THEN return null`() = - runTest { - val uri = "https://www.mozilla.org" - - doReturn(null).`when`(geckoStorage) - .queryExceptionInGecko(uri = uri, privateBrowsing = false) - - val result = geckoStorage.findExceptionFor(uri = uri, privateBrowsing = false) - assertNull(result) - } - - @Test - fun `GIVEN uri and browsing mode WHEN checking for an exception THEN indicate if it has exceptions`() = - runTest { - val uri = "https://www.mozilla.org" - - doReturn(REJECT_OR_ACCEPT_ALL).`when`(geckoStorage) - .queryExceptionInGecko(uri = uri, privateBrowsing = false) - - var result = geckoStorage.hasException(uri = uri, privateBrowsing = false) - - assertFalse(result!!) - - Mockito.reset(geckoStorage) - - doReturn(DISABLED).`when`(geckoStorage) - .queryExceptionInGecko(uri = uri, privateBrowsing = false) - - result = geckoStorage.hasException(uri = uri, privateBrowsing = false) - - assertTrue(result!!) - } - - @Test - fun `GIVEN an error WHEN checking for an exception THEN indicate if that an error happened`() = - runTest { - val uri = "https://www.mozilla.org" - - doReturn(null).`when`(geckoStorage) - .queryExceptionInGecko(uri = uri, privateBrowsing = false) - - val result = geckoStorage.hasException(uri = uri, privateBrowsing = false) - - assertNull(result) - } - - @Test - fun `GIVEN a cookie banner mode WHEN adding a persistent exception in private mode THEN add a persistent exception for the given uri in private browsing mode`() = - runTest { - val uri = "https://www.mozilla.org" - - doNothing().`when`(geckoStorage) - .setPersistentPrivateGeckoException(uri = uri, mode = DISABLED) - - geckoStorage.addPersistentExceptionInPrivateMode(uri = uri) - - verify(geckoStorage).setPersistentPrivateGeckoException(uri, DISABLED) - } - - @Test - fun `GIVEN site domain url WHEN checking if site domain is reported THEN the report site domain repository gets called`() = - runTest { - val reportSiteDomainUrl = "mozilla.org" - - geckoStorage.isSiteDomainReported(reportSiteDomainUrl) - - verify(reportSiteDomainsRepository).isSiteDomainReported(reportSiteDomainUrl) - } - - @Test - fun `GIVEN site domain url WHEN saving a site domain THEN the save method from repository should get called`() = - runTest { - val reportSiteDomainUrl = "mozilla.org" - - geckoStorage.saveSiteDomain(reportSiteDomainUrl) - - verify(reportSiteDomainsRepository).saveSiteDomain(reportSiteDomainUrl) - } +// private lateinit var runtime: GeckoRuntime +// private lateinit var geckoStorage: GeckoCookieBannersStorage +// private lateinit var storageController: StorageController +// private lateinit var reportSiteDomainsRepository: ReportSiteDomainsRepository +// +// @Before +// fun setup() { +// storageController = mock() +// runtime = mock() +// reportSiteDomainsRepository = mock() +// +// whenever(runtime.storageController).thenReturn(storageController) +// +// geckoStorage = spy(GeckoCookieBannersStorage(runtime, reportSiteDomainsRepository)) +// } +// +// @Test +// fun `GIVEN a cookie banner mode WHEN adding an exception THEN add an exception for the given uri and browsing mode`() = +// runTest { +// val uri = "https://www.mozilla.org" +// +// doNothing().`when`(geckoStorage) +// .setGeckoException(uri = uri, mode = DISABLED, privateBrowsing = false) +// +// geckoStorage.addException(uri = uri, privateBrowsing = false) +// +// verify(geckoStorage).setGeckoException(uri, DISABLED, false) +// } +// +// @Test +// fun `GIVEN uri and browsing mode WHEN removing an exception THEN remove the exception`() = +// runTest { +// val uri = "https://www.mozilla.org" +// +// doNothing().`when`(geckoStorage).removeGeckoException(uri, false) +// +// geckoStorage.removeException(uri = uri, privateBrowsing = false) +// +// verify(geckoStorage).removeGeckoException(uri, false) +// } +// +// @Test +// fun `GIVEN uri and browsing mode WHEN querying an exception THEN return the matching exception`() = +// runTest { +// val uri = "https://www.mozilla.org" +// +// doReturn(REJECT_OR_ACCEPT_ALL).`when`(geckoStorage) +// .queryExceptionInGecko(uri = uri, privateBrowsing = false) +// +// val result = geckoStorage.findExceptionFor(uri = uri, privateBrowsing = false) +// assertEquals(REJECT_OR_ACCEPT_ALL, result) +// } +// +// @Test +// fun `GIVEN error WHEN querying an exception THEN return null`() = +// runTest { +// val uri = "https://www.mozilla.org" +// +// doReturn(null).`when`(geckoStorage) +// .queryExceptionInGecko(uri = uri, privateBrowsing = false) +// +// val result = geckoStorage.findExceptionFor(uri = uri, privateBrowsing = false) +// assertNull(result) +// } +// +// @Test +// fun `GIVEN uri and browsing mode WHEN checking for an exception THEN indicate if it has exceptions`() = +// runTest { +// val uri = "https://www.mozilla.org" +// +// doReturn(REJECT_OR_ACCEPT_ALL).`when`(geckoStorage) +// .queryExceptionInGecko(uri = uri, privateBrowsing = false) +// +// var result = geckoStorage.hasException(uri = uri, privateBrowsing = false) +// +// assertFalse(result!!) +// +// Mockito.reset(geckoStorage) +// +// doReturn(DISABLED).`when`(geckoStorage) +// .queryExceptionInGecko(uri = uri, privateBrowsing = false) +// +// result = geckoStorage.hasException(uri = uri, privateBrowsing = false) +// +// assertTrue(result!!) +// } +// +// @Test +// fun `GIVEN an error WHEN checking for an exception THEN indicate if that an error happened`() = +// runTest { +// val uri = "https://www.mozilla.org" +// +// doReturn(null).`when`(geckoStorage) +// .queryExceptionInGecko(uri = uri, privateBrowsing = false) +// +// val result = geckoStorage.hasException(uri = uri, privateBrowsing = false) +// +// assertNull(result) +// } +// +// @Test +// fun `GIVEN a cookie banner mode WHEN adding a persistent exception in private mode THEN add a persistent exception for the given uri in private browsing mode`() = +// runTest { +// val uri = "https://www.mozilla.org" +// +// doNothing().`when`(geckoStorage) +// .setPersistentPrivateGeckoException(uri = uri, mode = DISABLED) +// +// geckoStorage.addPersistentExceptionInPrivateMode(uri = uri) +// +// verify(geckoStorage).setPersistentPrivateGeckoException(uri, DISABLED) +// } +// +// @Test +// fun `GIVEN site domain url WHEN checking if site domain is reported THEN the report site domain repository gets called`() = +// runTest { +// val reportSiteDomainUrl = "mozilla.org" +// +// geckoStorage.isSiteDomainReported(reportSiteDomainUrl) +// +// verify(reportSiteDomainsRepository).isSiteDomainReported(reportSiteDomainUrl) +// } +// +// @Test +// fun `GIVEN site domain url WHEN saving a site domain THEN the save method from repository should get called`() = +// runTest { +// val reportSiteDomainUrl = "mozilla.org" +// +// geckoStorage.saveSiteDomain(reportSiteDomainUrl) +// +// verify(reportSiteDomainsRepository).saveSiteDomain(reportSiteDomainUrl) +// } } diff --git a/mobile/android/android-components/components/browser/engine-gecko/src/test/java/mozilla/components/browser/engine/gecko/cookiebanners/ReportSiteDomainsRepositoryTest.kt b/mobile/android/android-components/components/browser/engine-gecko/src/test/java/mozilla/components/browser/engine/gecko/cookiebanners/ReportSiteDomainsRepositoryTest.kt @@ -21,52 +21,52 @@ import org.junit.runner.RunWith @RunWith(AndroidJUnit4::class) class ReportSiteDomainsRepositoryTest { - - companion object { - const val TEST_DATASTORE_NAME = "test_data_store" - } - - private lateinit var testDataStore: DataStore<Preferences> - - private lateinit var reportSiteDomainsRepository: ReportSiteDomainsRepository - - @Before - fun setUp() { - testDataStore = PreferenceDataStoreFactory.create( - produceFile = { testContext.preferencesDataStoreFile(TEST_DATASTORE_NAME) }, - ) - reportSiteDomainsRepository = ReportSiteDomainsRepository(testDataStore) - } - - @After - fun cleanUp() = runTest { testDataStore.edit { it.clear() } } - - @Test - fun `GIVEN site domain url WHEN site domain url is not saved THEN is side domain reported return false`() = - runTest { - assertFalse(reportSiteDomainsRepository.isSiteDomainReported("mozilla.org")) - } - - @Test - fun `GIVEN site domain url WHEN site domain url is saved THEN is side domain reported return true`() = - runTest { - val siteDomainReported = "mozilla.org" - - reportSiteDomainsRepository.saveSiteDomain(siteDomainReported) - - assertTrue(reportSiteDomainsRepository.isSiteDomainReported(siteDomainReported)) - } - - @Test - fun `GIVEN site domain urls WHEN site domain urls are saved THEN is side domain reported return true for each one`() = - runTest { - val mozillaSiteDomainReported = "mozilla.org" - val youtubeSiteDomainReported = "youtube.com" - - reportSiteDomainsRepository.saveSiteDomain(mozillaSiteDomainReported) - reportSiteDomainsRepository.saveSiteDomain(youtubeSiteDomainReported) - - assertTrue(reportSiteDomainsRepository.isSiteDomainReported(mozillaSiteDomainReported)) - assertTrue(reportSiteDomainsRepository.isSiteDomainReported(youtubeSiteDomainReported)) - } +// +// companion object { +// const val TEST_DATASTORE_NAME = "test_data_store" +// } +// +// private lateinit var testDataStore: DataStore<Preferences> +// +// private lateinit var reportSiteDomainsRepository: ReportSiteDomainsRepository +// +// @Before +// fun setUp() { +// testDataStore = PreferenceDataStoreFactory.create( +// produceFile = { testContext.preferencesDataStoreFile(TEST_DATASTORE_NAME) }, +// ) +// reportSiteDomainsRepository = ReportSiteDomainsRepository(testDataStore) +// } +// +// @After +// fun cleanUp() = runTest { testDataStore.edit { it.clear() } } +// +// @Test +// fun `GIVEN site domain url WHEN site domain url is not saved THEN is side domain reported return false`() = +// runTest { +// assertFalse(reportSiteDomainsRepository.isSiteDomainReported("mozilla.org")) +// } +// +// @Test +// fun `GIVEN site domain url WHEN site domain url is saved THEN is side domain reported return true`() = +// runTest { +// val siteDomainReported = "mozilla.org" +// +// reportSiteDomainsRepository.saveSiteDomain(siteDomainReported) +// +// assertTrue(reportSiteDomainsRepository.isSiteDomainReported(siteDomainReported)) +// } +// +// @Test +// fun `GIVEN site domain urls WHEN site domain urls are saved THEN is side domain reported return true for each one`() = +// runTest { +// val mozillaSiteDomainReported = "mozilla.org" +// val youtubeSiteDomainReported = "youtube.com" +// +// reportSiteDomainsRepository.saveSiteDomain(mozillaSiteDomainReported) +// reportSiteDomainsRepository.saveSiteDomain(youtubeSiteDomainReported) +// +// assertTrue(reportSiteDomainsRepository.isSiteDomainReported(mozillaSiteDomainReported)) +// assertTrue(reportSiteDomainsRepository.isSiteDomainReported(youtubeSiteDomainReported)) +// } } diff --git a/mobile/android/android-components/components/concept/engine/src/main/java/mozilla/components/concept/engine/cookiehandling/CookieBannersStorage.kt b/mobile/android/android-components/components/concept/engine/src/main/java/mozilla/components/concept/engine/cookiehandling/CookieBannersStorage.kt @@ -24,14 +24,14 @@ interface CookieBannersStorage { * Check if the given site's domain url is saved locally. * @param siteDomain the [siteDomain] that will be checked. */ - suspend fun isSiteDomainReported(siteDomain: String): Boolean +// suspend fun isSiteDomainReported(siteDomain: String): Boolean /** * Save the given site's domain url in datastore to keep it persistent locally. * This method gets called after the site domain was reported with Nimbus. * @param siteDomain the [siteDomain] that will be saved. */ - suspend fun saveSiteDomain(siteDomain: String) +// suspend fun saveSiteDomain(siteDomain: String) /** * Set persistently the [CookieBannerHandlingMode.DISABLED] mode for the given [uri] in diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/Core.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/Core.kt @@ -17,7 +17,7 @@ import mozilla.components.browser.domains.autocomplete.BaseDomainAutocompletePro import mozilla.components.browser.domains.autocomplete.ShippedDomainsProvider import mozilla.components.browser.engine.gecko.GeckoEngine import mozilla.components.browser.engine.gecko.cookiebanners.GeckoCookieBannersStorage -import mozilla.components.browser.engine.gecko.cookiebanners.ReportSiteDomainsRepository +//import mozilla.components.browser.engine.gecko.cookiebanners.ReportSiteDomainsRepository import mozilla.components.browser.engine.gecko.fetch.GeckoViewFetchClient import mozilla.components.browser.engine.gecko.permission.GeckoSitePermissionsStorage import mozilla.components.browser.icons.BrowserIcons @@ -77,6 +77,7 @@ import mozilla.components.feature.sitepermissions.OnDiskSitePermissionsStorage import mozilla.components.feature.top.sites.DefaultTopSitesStorage import mozilla.components.feature.top.sites.PinnedSiteStorage import mozilla.components.feature.webnotifications.WebNotificationFeature +import mozilla.components.lib.crash.R as crashR import mozilla.components.lib.dataprotect.SecureAbove22Preferences import mozilla.components.service.digitalassetlinks.RelationChecker import mozilla.components.service.digitalassetlinks.local.StatementApi @@ -275,14 +276,14 @@ class Core( ) } - private val Context.dataStore by preferencesDataStore( - name = ReportSiteDomainsRepository.REPORT_SITE_DOMAINS_REPOSITORY_NAME, - ) +// private val Context.dataStore by preferencesDataStore( +// name = ReportSiteDomainsRepository.REPORT_SITE_DOMAINS_REPOSITORY_NAME, +// ) val cookieBannersStorage by lazyMonitored { GeckoCookieBannersStorage( geckoRuntime, - ReportSiteDomainsRepository(context.dataStore), +// ReportSiteDomainsRepository(context.dataStore), ) } @@ -413,7 +414,7 @@ class Core( context, engine, icons, - R.drawable.ic_status_logo, + crashR.drawable.mozac_lib_crash_notification, permissionStorage.permissionsStorage, IntentReceiverActivity::class.java, notificationsDelegate = context.components.notificationsDelegate, diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/settings/quicksettings/protections/cookiebanners/CookieBannerDetailsController.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/settings/quicksettings/protections/cookiebanners/CookieBannerDetailsController.kt @@ -57,7 +57,7 @@ interface CookieBannerDetailsController { /** * @see [CookieBannerDetailsInteractor.handleRequestSiteSupportPressed] */ - fun handleRequestSiteSupportPressed() +// fun handleRequestSiteSupportPressed() } /** @@ -148,37 +148,37 @@ class DefaultCookieBannerDetailsController( } } - override fun handleRequestSiteSupportPressed() { - val tab = requireNotNull(browserStore.state.findTabOrCustomTab(sessionId)) { - "A session is required to report site domain" - } - CookieBanners.reportDomainSiteButton.record(NoExtras()) - ioScope.launch { - val siteDomain = getTabDomain(tab) - siteDomain?.let { domain -> - withContext(Dispatchers.Main) { - protectionsStore.dispatch(ProtectionsAction.RequestReportSiteDomain(domain)) - CookieBanners.reportSiteDomain.set(domain) - Pings.cookieBannerReportSite.submit() - protectionsStore.dispatch( - ProtectionsAction.UpdateCookieBannerMode( - cookieBannerUIMode = CookieBannerUIMode.REQUEST_UNSUPPORTED_SITE_SUBMITTED, - ), - ) - fragment.activity?.getRootView()?.let { view -> - showSnackBar( - view, - context.getString(R.string.cookie_banner_handling_report_site_snack_bar_text_2), - SnackbarState.Duration.Preset.Long, - ) - } - withContext(Dispatchers.IO) { - cookieBannersStorage.saveSiteDomain(domain) - } - } - } - } - } + // override fun handleRequestSiteSupportPressed() { + // val tab = requireNotNull(browserStore.state.findTabOrCustomTab(sessionId)) { + // "A session is required to report site domain" + // } + // CookieBanners.reportDomainSiteButton.record(NoExtras()) + // ioScope.launch { + // val siteDomain = getTabDomain(tab) + // siteDomain?.let { domain -> + // withContext(Dispatchers.Main) { + // protectionsStore.dispatch(ProtectionsAction.RequestReportSiteDomain(domain)) + // CookieBanners.reportSiteDomain.set(domain) + // Pings.cookieBannerReportSite.submit() + // protectionsStore.dispatch( + // ProtectionsAction.UpdateCookieBannerMode( + // cookieBannerUIMode = CookieBannerUIMode.REQUEST_UNSUPPORTED_SITE_SUBMITTED, + // ), + // ) + // fragment.activity?.getRootView()?.let { view -> + // showSnackBar( + // view, + // context.getString(R.string.cookie_banner_handling_report_site_snack_bar_text_2), + // SnackbarState.Duration.Preset.Long, + // ) + // } + // withContext(Dispatchers.IO) { + // cookieBannersStorage.saveSiteDomain(domain) + // } + // } + // } + // } + // } @VisibleForTesting internal suspend fun clearSiteData(tab: SessionState) { diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/settings/quicksettings/protections/cookiebanners/CookieBannerDetailsInteractor.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/settings/quicksettings/protections/cookiebanners/CookieBannerDetailsInteractor.kt @@ -21,7 +21,7 @@ interface CookieBannerDetailsInteractor { /** * Called whenever the user press request support site domain. */ - fun handleRequestSiteSupportPressed() +// fun handleRequestSiteSupportPressed() } /** @@ -45,7 +45,7 @@ class DefaultCookieBannerDetailsInteractor( controller.handleTogglePressed(vale) } - override fun handleRequestSiteSupportPressed() { - controller.handleRequestSiteSupportPressed() - } +// override fun handleRequestSiteSupportPressed() { +// controller.handleRequestSiteSupportPressed() +// } } diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/settings/quicksettings/protections/cookiebanners/CookieBannerHandlingDetailsView.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/settings/quicksettings/protections/cookiebanners/CookieBannerHandlingDetailsView.kt @@ -60,7 +60,7 @@ class CookieBannerHandlingDetailsView( when (state.cookieBannerUIMode) { CookieBannerUIMode.ENABLE -> setUiForExceptionMode(state) CookieBannerUIMode.DISABLE -> setUiForExceptionMode(state) - CookieBannerUIMode.SITE_NOT_SUPPORTED -> setUiForReportSiteMode() +// CookieBannerUIMode.SITE_NOT_SUPPORTED -> setUiForReportSiteMode() else -> {} } } @@ -70,19 +70,19 @@ class CookieBannerHandlingDetailsView( bindSwitch(state.cookieBannerUIMode) } - private fun setUiForReportSiteMode() { - binding.cancelButton.visibility = View.VISIBLE - binding.requestSupport.visibility = View.VISIBLE - binding.cookieBannerSwitch.visibility = View.GONE - binding.requestSupport.setOnClickListener { - interactor.handleRequestSiteSupportPressed() - onDismiss.invoke() - } - binding.cancelButton.setOnClickListener { - CookieBanners.reportSiteCancelButton.record(NoExtras()) - interactor.onBackPressed() - } - } +// private fun setUiForReportSiteMode() { +// binding.cancelButton.visibility = View.VISIBLE +// binding.requestSupport.visibility = View.VISIBLE +// binding.cookieBannerSwitch.visibility = View.GONE +// binding.requestSupport.setOnClickListener { +// interactor.handleRequestSiteSupportPressed() +// onDismiss.invoke() +// } +// binding.cancelButton.setOnClickListener { +// CookieBanners.reportSiteCancelButton.record(NoExtras()) +// interactor.onBackPressed() +// } +// } @VisibleForTesting internal fun bindTitle(url: String, state: CookieBannerUIMode) { diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/settings/quicksettings/protections/cookiebanners/CookieBannersStorageExt.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/settings/quicksettings/protections/cookiebanners/CookieBannersStorageExt.kt @@ -27,15 +27,15 @@ suspend fun CookieBannersStorage.getCookieBannerUIMode( publicSuffixList: PublicSuffixList, ): CookieBannerUIMode { return if (isFeatureEnabledInPrivateMode) { - val isSiteDomainReported = withContext(Dispatchers.IO) { - val host = tab.content.url.toUri().host.orEmpty() - val siteDomain = publicSuffixList.getPublicSuffixPlusOne(host).await() - siteDomain?.let { isSiteDomainReported(it) } - } + // val isSiteDomainReported = withContext(Dispatchers.IO) { + // val host = tab.content.url.toUri().host.orEmpty() + // val siteDomain = publicSuffixList.getPublicSuffixPlusOne(host).await() + // siteDomain?.let { isSiteDomainReported(it) } + // } - if (isSiteDomainReported == true) { - return CookieBannerUIMode.REQUEST_UNSUPPORTED_SITE_SUBMITTED - } + // if (isSiteDomainReported == true) { + // return CookieBannerUIMode.REQUEST_UNSUPPORTED_SITE_SUBMITTED + // } val hasException = withContext(Dispatchers.IO) { hasException(tab.content.url, tab.content.private) diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/trackingprotection/ProtectionsStore.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/trackingprotection/ProtectionsStore.kt @@ -53,9 +53,9 @@ sealed class ProtectionsAction : Action { * * @property url to report. */ - data class RequestReportSiteDomain( - val url: String, - ) : ProtectionsAction() +// data class RequestReportSiteDomain( +// val url: String, +// ) : ProtectionsAction() /** * Indicates that cookie banner handling mode has been updated. @@ -168,10 +168,10 @@ enum class CookieBannerUIMode( * REQUEST_UNSUPPORTED_SITE_SUBMITTED - The user submitted a request * for adding support for cookie banner handling for the domain. */ - REQUEST_UNSUPPORTED_SITE_SUBMITTED( - R.string.reduce_cookie_banner_unsupported_site_request_submitted_2, - R.drawable.ic_cookies_disabled, - ), +// REQUEST_UNSUPPORTED_SITE_SUBMITTED( +// R.string.reduce_cookie_banner_unsupported_site_request_submitted_2, +// R.drawable.ic_cookies_disabled, +// ), /** HIDE - All the cookie banner handling in the tracking panel is hidden. @@ -256,9 +256,9 @@ fun protectionsStateReducer( is ProtectionsAction.ToggleCookieBannerHandlingProtectionEnabled -> state.copy( cookieBannerUIMode = action.cookieBannerUIMode, ) - is ProtectionsAction.RequestReportSiteDomain -> state.copy( - url = action.url, - ) +// is ProtectionsAction.RequestReportSiteDomain -> state.copy( +// url = action.url, +// ) is ProtectionsAction.UpdateCookieBannerMode -> state.copy( cookieBannerUIMode = action.cookieBannerUIMode, ) diff --git a/mobile/android/fenix/app/src/main/res/layout/component_cookie_banner_details_panel.xml b/mobile/android/fenix/app/src/main/res/layout/component_cookie_banner_details_panel.xml @@ -62,7 +62,7 @@ tools:text="Firefox will clear this site’s cookies and refresh the page. Clearing all cookies may sign you out or empty shopping carts." /> - <androidx.appcompat.widget.AppCompatButton + <!--<androidx.appcompat.widget.AppCompatButton android:id="@+id/cancel_button" android:layout_width="wrap_content" android:layout_height="wrap_content" @@ -78,9 +78,9 @@ android:textSize="14sp" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" - app:layout_constraintTop_toBottomOf="@id/details" /> + app:layout_constraintTop_toBottomOf="@id/details" />--> - <androidx.appcompat.widget.AppCompatButton + <!--<androidx.appcompat.widget.AppCompatButton android:id="@+id/request_support" android:layout_width="wrap_content" android:layout_height="wrap_content" @@ -97,5 +97,5 @@ app:layout_constraintEnd_toEndOf="parent" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintStart_toEndOf="@+id/cancel_button" - app:layout_constraintTop_toBottomOf="@id/details" /> + app:layout_constraintTop_toBottomOf="@id/details" />--> </androidx.constraintlayout.widget.ConstraintLayout> diff --git a/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/settings/quicksettings/protections/cookiebanners/CookieBannerHandlingDetailsViewTest.kt b/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/settings/quicksettings/protections/cookiebanners/CookieBannerHandlingDetailsViewTest.kt @@ -229,29 +229,29 @@ class CookieBannerHandlingDetailsViewTest { view.update(state) assertEquals(View.GONE, view.binding.cookieBannerSwitch.visibility) - assertEquals(View.VISIBLE, view.binding.cancelButton.visibility) - assertEquals(View.VISIBLE, view.binding.requestSupport.visibility) +// assertEquals(View.VISIBLE, view.binding.cancelButton.visibility) +// assertEquals(View.VISIBLE, view.binding.requestSupport.visibility) } - @Test - fun `WHEN clicking the request support button THEN view must delegate to the interactor#handleRequestSiteSupportPressed()`() { - val websiteUrl = "https://mozilla.org" - val state = ProtectionsState( - tab = createTab(url = websiteUrl), - url = websiteUrl, - isTrackingProtectionEnabled = true, - cookieBannerUIMode = CookieBannerUIMode.SITE_NOT_SUPPORTED, - listTrackers = listOf(), - mode = ProtectionsState.Mode.Normal, - lastAccessedCategory = "", - ) - - view.update(state) - - view.binding.requestSupport.performClick() - - verify { - interactor.handleRequestSiteSupportPressed() - } - } +// @Test +// fun `WHEN clicking the request support button THEN view must delegate to the interactor#handleRequestSiteSupportPressed()`() { +// val websiteUrl = "https://mozilla.org" +// val state = ProtectionsState( +// tab = createTab(url = websiteUrl), +// url = websiteUrl, +// isTrackingProtectionEnabled = true, +// cookieBannerUIMode = CookieBannerUIMode.SITE_NOT_SUPPORTED, +// listTrackers = listOf(), +// mode = ProtectionsState.Mode.Normal, +// lastAccessedCategory = "", +// ) +// +// view.update(state) +// +// view.binding.requestSupport.performClick() +// +// verify { +// interactor.handleRequestSiteSupportPressed() +// } +// } } diff --git a/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/trackingprotection/ProtectionsStoreTest.kt b/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/trackingprotection/ProtectionsStoreTest.kt @@ -134,22 +134,22 @@ class ProtectionsStoreTest { ) } - @Test - fun `ProtectionsAction - RequestReportSiteDomain`() = runTest { - val initialState = defaultState() - val store = ProtectionsStore(initialState) - - store.dispatch( - ProtectionsAction.RequestReportSiteDomain( - url = "youtube.com", - ), - ) - - assertEquals( - "youtube.com", - store.state.url, - ) - } +// @Test +// fun `ProtectionsAction - RequestReportSiteDomain`() = runTest { +// val initialState = defaultState() +// val store = ProtectionsStore(initialState) +// +// store.dispatch( +// ProtectionsAction.RequestReportSiteDomain( +// url = "youtube.com", +// ), +// ) +// +// assertEquals( +// "youtube.com", +// store.state.url, +// ) +// } @Test fun `ProtectionsAction - UpdateCookieBannerMode`() = runTest {