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:
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
}