diff --git a/app/src/main/java/org/mozilla/fenix/settings/deletebrowsingdata/DeleteAndQuit.kt b/app/src/main/java/org/mozilla/fenix/settings/deletebrowsingdata/DeleteAndQuit.kt index 0aac06e0a..b4cf23018 100644 --- a/app/src/main/java/org/mozilla/fenix/settings/deletebrowsingdata/DeleteAndQuit.kt +++ b/app/src/main/java/org/mozilla/fenix/settings/deletebrowsingdata/DeleteAndQuit.kt @@ -13,6 +13,7 @@ import kotlinx.coroutines.launch import kotlinx.coroutines.withContext import org.mozilla.fenix.R import org.mozilla.fenix.components.FenixSnackbar +import org.mozilla.fenix.ext.components import org.mozilla.fenix.ext.settings /** @@ -21,7 +22,13 @@ import org.mozilla.fenix.ext.settings fun deleteAndQuit(activity: Activity, coroutineScope: CoroutineScope, snackbar: FenixSnackbar?) { coroutineScope.launch { val settings = activity.settings() - val controller = DefaultDeleteBrowsingDataController(activity, coroutineContext) + val controller = DefaultDeleteBrowsingDataController( + activity.components.useCases.tabsUseCases.removeAllTabs, + activity.components.core.historyStorage, + activity.components.core.permissionStorage, + activity.components.core.engine, + coroutineContext + ) snackbar?.apply { setText(activity.getString(R.string.deleting_browsing_data_in_progress)) diff --git a/app/src/main/java/org/mozilla/fenix/settings/deletebrowsingdata/DeleteBrowsingDataController.kt b/app/src/main/java/org/mozilla/fenix/settings/deletebrowsingdata/DeleteBrowsingDataController.kt index 442929ca6..b8894cc49 100644 --- a/app/src/main/java/org/mozilla/fenix/settings/deletebrowsingdata/DeleteBrowsingDataController.kt +++ b/app/src/main/java/org/mozilla/fenix/settings/deletebrowsingdata/DeleteBrowsingDataController.kt @@ -4,11 +4,12 @@ package org.mozilla.fenix.settings.deletebrowsingdata -import android.content.Context import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.withContext import mozilla.components.concept.engine.Engine -import org.mozilla.fenix.ext.components +import mozilla.components.concept.storage.HistoryStorage +import mozilla.components.feature.tabs.TabsUseCases +import org.mozilla.fenix.components.PermissionStorage import kotlin.coroutines.CoroutineContext interface DeleteBrowsingDataController { @@ -21,13 +22,16 @@ interface DeleteBrowsingDataController { } class DefaultDeleteBrowsingDataController( - val context: Context, - val coroutineContext: CoroutineContext = Dispatchers.Main + private val removeAllTabs: TabsUseCases.RemoveAllTabsUseCase, + private val historyStorage: HistoryStorage, + private val permissionStorage: PermissionStorage, + private val engine: Engine, + private val coroutineContext: CoroutineContext = Dispatchers.Main ) : DeleteBrowsingDataController { override suspend fun deleteTabs() { withContext(coroutineContext) { - context.components.useCases.tabsUseCases.removeAllTabs.invoke() + removeAllTabs.invoke() } } @@ -37,14 +41,14 @@ class DefaultDeleteBrowsingDataController( override suspend fun deleteHistoryAndDOMStorages() { withContext(coroutineContext) { - context.components.core.engine.clearData(Engine.BrowsingData.select(Engine.BrowsingData.DOM_STORAGES)) + engine.clearData(Engine.BrowsingData.select(Engine.BrowsingData.DOM_STORAGES)) } - context.components.core.historyStorage.deleteEverything() + historyStorage.deleteEverything() } override suspend fun deleteCookies() { withContext(coroutineContext) { - context.components.core.engine.clearData( + engine.clearData( Engine.BrowsingData.select( Engine.BrowsingData.COOKIES, Engine.BrowsingData.AUTH_SESSIONS @@ -55,7 +59,7 @@ class DefaultDeleteBrowsingDataController( override suspend fun deleteCachedFiles() { withContext(coroutineContext) { - context.components.core.engine.clearData( + engine.clearData( Engine.BrowsingData.select(Engine.BrowsingData.ALL_CACHES) ) } @@ -63,10 +67,10 @@ class DefaultDeleteBrowsingDataController( override suspend fun deleteSitePermissions() { withContext(coroutineContext) { - context.components.core.engine.clearData( + engine.clearData( Engine.BrowsingData.select(Engine.BrowsingData.ALL_SITE_SETTINGS) ) } - context.components.core.permissionStorage.deleteAllSitePermissions() + permissionStorage.deleteAllSitePermissions() } } diff --git a/app/src/main/java/org/mozilla/fenix/settings/deletebrowsingdata/DeleteBrowsingDataFragment.kt b/app/src/main/java/org/mozilla/fenix/settings/deletebrowsingdata/DeleteBrowsingDataFragment.kt index 73963a161..551341144 100644 --- a/app/src/main/java/org/mozilla/fenix/settings/deletebrowsingdata/DeleteBrowsingDataFragment.kt +++ b/app/src/main/java/org/mozilla/fenix/settings/deletebrowsingdata/DeleteBrowsingDataFragment.kt @@ -25,6 +25,7 @@ import mozilla.components.support.ktx.kotlinx.coroutines.flow.ifChanged import org.mozilla.fenix.R import org.mozilla.fenix.components.FenixSnackbar import org.mozilla.fenix.components.metrics.Event +import org.mozilla.fenix.ext.components import org.mozilla.fenix.ext.requireComponents import org.mozilla.fenix.ext.settings import org.mozilla.fenix.ext.showToolbar @@ -40,7 +41,12 @@ class DeleteBrowsingDataFragment : Fragment(R.layout.fragment_delete_browsing_da override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) - controller = DefaultDeleteBrowsingDataController(requireContext()) + controller = DefaultDeleteBrowsingDataController( + requireContext().components.useCases.tabsUseCases.removeAllTabs, + requireContext().components.core.historyStorage, + requireContext().components.core.permissionStorage, + requireContext().components.core.engine + ) settings = requireContext().settings() getCheckboxes().forEach { diff --git a/app/src/test/java/org/mozilla/fenix/settings/deletebrowsingdata/DefaultDeleteBrowsingDataControllerTest.kt b/app/src/test/java/org/mozilla/fenix/settings/deletebrowsingdata/DefaultDeleteBrowsingDataControllerTest.kt index 118edc67c..50be4f470 100644 --- a/app/src/test/java/org/mozilla/fenix/settings/deletebrowsingdata/DefaultDeleteBrowsingDataControllerTest.kt +++ b/app/src/test/java/org/mozilla/fenix/settings/deletebrowsingdata/DefaultDeleteBrowsingDataControllerTest.kt @@ -4,21 +4,21 @@ package org.mozilla.fenix.settings.deletebrowsingdata -import android.content.Context -import io.mockk.Runs -import io.mockk.every -import io.mockk.just import io.mockk.mockk import io.mockk.verify import kotlinx.coroutines.ExperimentalCoroutinesApi +import kotlinx.coroutines.GlobalScope.coroutineContext +import kotlinx.coroutines.launch import kotlinx.coroutines.test.TestCoroutineDispatcher import kotlinx.coroutines.test.runBlockingTest import mozilla.components.concept.engine.Engine +import mozilla.components.concept.storage.HistoryStorage +import mozilla.components.feature.tabs.TabsUseCases import mozilla.components.support.test.rule.MainCoroutineRule import org.junit.Before import org.junit.Rule import org.junit.Test -import org.mozilla.fenix.ext.components +import org.mozilla.fenix.components.PermissionStorage @OptIn(ExperimentalCoroutinesApi::class) class DefaultDeleteBrowsingDataControllerTest { @@ -26,47 +26,49 @@ class DefaultDeleteBrowsingDataControllerTest { @get:Rule val coroutinesTestRule = MainCoroutineRule(TestCoroutineDispatcher()) - private val context: Context = mockk(relaxed = true) + private var removeAllTabs: TabsUseCases.RemoveAllTabsUseCase = mockk(relaxed = true) + private var historyStorage: HistoryStorage = mockk(relaxed = true) + private var permissionStorage: PermissionStorage = mockk(relaxed = true) + private val engine: Engine = mockk(relaxed = true) private lateinit var controller: DefaultDeleteBrowsingDataController @Before fun setup() { - every { context.components.core.engine.clearData(any()) } just Runs + controller = DefaultDeleteBrowsingDataController( + removeAllTabs = removeAllTabs, + historyStorage = historyStorage, + permissionStorage = permissionStorage, + engine = engine, + coroutineContext = coroutineContext + ) } @Test fun deleteTabs() = runBlockingTest { - controller = DefaultDeleteBrowsingDataController(context, coroutineContext) - every { context.components.useCases.tabsUseCases.removeAllTabs.invoke() } just Runs controller.deleteTabs() verify { - context.components.useCases.tabsUseCases.removeAllTabs.invoke() + removeAllTabs.invoke() } } @Test fun deleteBrowsingData() = runBlockingTest { - controller = DefaultDeleteBrowsingDataController(context, coroutineContext) - every { context.components.core.historyStorage } returns mockk(relaxed = true) - controller.deleteBrowsingData() verify { - context.components.core.engine.clearData(Engine.BrowsingData.select(Engine.BrowsingData.DOM_STORAGES)) - context.components.core.historyStorage + engine.clearData(Engine.BrowsingData.select(Engine.BrowsingData.DOM_STORAGES)) } + verify { launch { historyStorage.deleteEverything() } } } @Test fun deleteCookies() = runBlockingTest { - controller = DefaultDeleteBrowsingDataController(context, coroutineContext) - controller.deleteCookies() verify { - context.components.core.engine.clearData( + engine.clearData( Engine.BrowsingData.select( Engine.BrowsingData.COOKIES, Engine.BrowsingData.AUTH_SESSIONS @@ -77,25 +79,21 @@ class DefaultDeleteBrowsingDataControllerTest { @Test fun deleteCachedFiles() = runBlockingTest { - controller = DefaultDeleteBrowsingDataController(context, coroutineContext) controller.deleteCachedFiles() verify { - context.components.core.engine.clearData(Engine.BrowsingData.select(Engine.BrowsingData.ALL_CACHES)) + engine.clearData(Engine.BrowsingData.select(Engine.BrowsingData.ALL_CACHES)) } } @Test fun deleteSitePermissions() = runBlockingTest { - controller = DefaultDeleteBrowsingDataController(context, coroutineContext) - every { context.components.core.permissionStorage.deleteAllSitePermissions() } just Runs - controller.deleteSitePermissions() verify { - context.components.core.engine.clearData(Engine.BrowsingData.select(Engine.BrowsingData.ALL_SITE_SETTINGS)) - context.components.core.permissionStorage.deleteAllSitePermissions() + engine.clearData(Engine.BrowsingData.select(Engine.BrowsingData.ALL_SITE_SETTINGS)) + permissionStorage.deleteAllSitePermissions() } } }