tor-browser

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

commit a57259e5dd631a9a5840f8f5a6ef05e046ec3926
parent 285ee6c3ec536ada363ccd6c8a0a28d399c29a61
Author: Andrey Zinovyev <azinovyev@mozilla.com>
Date:   Mon,  3 Nov 2025 20:26:09 +0000

Bug 1997167 - Let FenixBrowserUseCases decide the browsing mode r=android-reviewers,jonalmeida

Differential Revision: https://phabricator.services.mozilla.com/D270581

Diffstat:
Mmobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/UseCases.kt | 1+
Mmobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/usecases/FenixBrowserUseCases.kt | 9++++++---
Mmobile/android/fenix/app/src/test/java/org/mozilla/fenix/components/usecases/FenixBrowserUseCasesTest.kt | 70+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-
3 files changed, 76 insertions(+), 4 deletions(-)

diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/UseCases.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/UseCases.kt @@ -137,6 +137,7 @@ class UseCases( searchUseCases = searchUseCases, homepageTitle = context.getString(R.string.tab_tray_homepage_tab), profiler = engine.value.profiler, + appStore = appStore.value, ) } diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/usecases/FenixBrowserUseCases.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/usecases/FenixBrowserUseCases.kt @@ -15,10 +15,12 @@ import mozilla.components.feature.session.SessionUseCases import mozilla.components.feature.tabs.TabsUseCases import mozilla.components.support.ktx.kotlin.isUrl import mozilla.components.support.ktx.kotlin.toNormalizedUrl +import org.mozilla.fenix.components.AppStore /** * Use cases for handling loading a URL and performing a search. * + * @param appStore [AppStore] used to fetch the appstore * @param addNewTabUseCase [TabsUseCases.AddNewTabUseCase] used for adding new tabs. * @param loadUrlUseCase [SessionUseCases.DefaultLoadUrlUseCase] used for loading a URL. * @param searchUseCases [SearchUseCases] used for performing a search. @@ -26,6 +28,7 @@ import mozilla.components.support.ktx.kotlin.toNormalizedUrl * @param profiler [Profiler] used to add profiler markers. */ class FenixBrowserUseCases( + private val appStore: AppStore, private val addNewTabUseCase: TabsUseCases.AddNewTabUseCase, private val loadUrlUseCase: SessionUseCases.DefaultLoadUrlUseCase, private val searchUseCases: SearchUseCases, @@ -48,7 +51,7 @@ class FenixBrowserUseCases( fun loadUrlOrSearch( searchTermOrURL: String, newTab: Boolean, - private: Boolean, + private: Boolean = appStore.state.mode.isPrivate, forceSearch: Boolean = false, searchEngine: SearchEngine? = null, flags: EngineSession.LoadUrlFlags = EngineSession.LoadUrlFlags.none(), @@ -108,7 +111,7 @@ class FenixBrowserUseCases( profiler.addMarker( markerName = "FenixBrowserUseCases.loadUrlOrSearch", startTime = startTime, - text = "newTab: $newTab", + text = "newTab: $newTab, private: $private", ) } } @@ -119,7 +122,7 @@ class FenixBrowserUseCases( * @param private Whether or not the new homepage tab should be private. * @return The ID of the created tab. */ - fun addNewHomepageTab(private: Boolean): String { + fun addNewHomepageTab(private: Boolean = appStore.state.mode.isPrivate): String { return addNewTabUseCase.invoke( url = ABOUT_HOME_URL, title = homepageTitle, diff --git a/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/components/usecases/FenixBrowserUseCasesTest.kt b/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/components/usecases/FenixBrowserUseCasesTest.kt @@ -28,6 +28,9 @@ import org.junit.Before import org.junit.Test import org.junit.runner.RunWith import org.mozilla.fenix.R +import org.mozilla.fenix.browser.browsingmode.BrowsingMode +import org.mozilla.fenix.components.AppStore +import org.mozilla.fenix.components.appstate.AppState @RunWith(AndroidJUnit4::class) class FenixBrowserUseCasesTest { @@ -41,6 +44,7 @@ class FenixBrowserUseCasesTest { private lateinit var defaultSearchUseCase: SearchUseCases.DefaultSearchUseCase private lateinit var useCases: FenixBrowserUseCases private lateinit var homepageTitle: String + private lateinit var appStore: AppStore @Before fun setup() { @@ -80,12 +84,16 @@ class FenixBrowserUseCasesTest { every { searchUseCases.defaultSearch } returns defaultSearchUseCase homepageTitle = testContext.getString(R.string.tab_tray_homepage_tab) + + appStore = AppStore(AppState()) + useCases = FenixBrowserUseCases( addNewTabUseCase = addNewTabUseCase, loadUrlUseCase = loadUrlUseCase, searchUseCases = searchUseCases, homepageTitle = homepageTitle, profiler = profiler, + appStore = appStore, ) } @@ -305,7 +313,7 @@ class FenixBrowserUseCasesTest { profiler.addMarker( markerName = "FenixBrowserUseCases.loadUrlOrSearch", startTime = PROFILER_START_TIME, - text = "newTab: $newTab", + text = "newTab: $newTab, private: false", ) } } @@ -345,6 +353,66 @@ class FenixBrowserUseCasesTest { } } + @Test + fun `GIVEN store is normal WHEN normal omitted and loading URL in new tab THEN open new normal tab`() { + val url = "https://www.mozilla.org" + appStore = AppStore(initialState = AppState(mode = BrowsingMode.Normal)) + useCases = FenixBrowserUseCases( + appStore = appStore, + addNewTabUseCase = addNewTabUseCase, + loadUrlUseCase = loadUrlUseCase, + searchUseCases = searchUseCases, + homepageTitle = homepageTitle, + profiler = profiler, + ) + + useCases.loadUrlOrSearch( + searchTermOrURL = url, + newTab = true, + forceSearch = false, + searchEngine = null, + ) + + verify { + addNewTabUseCase.invoke( + url = url, + flags = EngineSession.LoadUrlFlags.none(), + private = false, + originalInput = url, + ) + } + } + + @Test + fun `GIVEN store is private WHEN private omitted and loading URL in new tab THEN open new private tab`() { + val url = "https://www.mozilla.org" + appStore = AppStore(initialState = AppState(mode = BrowsingMode.Private)) + useCases = FenixBrowserUseCases( + appStore = appStore, + addNewTabUseCase = addNewTabUseCase, + loadUrlUseCase = loadUrlUseCase, + searchUseCases = searchUseCases, + homepageTitle = homepageTitle, + profiler = profiler, + ) + + useCases.loadUrlOrSearch( + searchTermOrURL = url, + newTab = true, + forceSearch = false, + searchEngine = null, + ) + + verify { + addNewTabUseCase.invoke( + url = url, + flags = EngineSession.LoadUrlFlags.none(), + private = true, + originalInput = url, + ) + } + } + companion object { private const val PROFILER_START_TIME = Double.MAX_VALUE }