summaryrefslogtreecommitdiffstats
path: root/mobile/android/android-components/components/feature/session
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-06-12 05:43:14 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-06-12 05:43:14 +0000
commit8dd16259287f58f9273002717ec4d27e97127719 (patch)
tree3863e62a53829a84037444beab3abd4ed9dfc7d0 /mobile/android/android-components/components/feature/session
parentReleasing progress-linux version 126.0.1-1~progress7.99u1. (diff)
downloadfirefox-8dd16259287f58f9273002717ec4d27e97127719.tar.xz
firefox-8dd16259287f58f9273002717ec4d27e97127719.zip
Merging upstream version 127.0.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'mobile/android/android-components/components/feature/session')
-rw-r--r--mobile/android/android-components/components/feature/session/src/main/java/mozilla/components/feature/session/SessionFeature.kt17
-rw-r--r--mobile/android/android-components/components/feature/session/src/main/java/mozilla/components/feature/session/SessionUseCases.kt6
-rw-r--r--mobile/android/android-components/components/feature/session/src/test/java/mozilla/components/feature/session/SessionFeatureTest.kt74
-rw-r--r--mobile/android/android-components/components/feature/session/src/test/java/mozilla/components/feature/session/SessionUseCasesTest.kt1
4 files changed, 75 insertions, 23 deletions
diff --git a/mobile/android/android-components/components/feature/session/src/main/java/mozilla/components/feature/session/SessionFeature.kt b/mobile/android/android-components/components/feature/session/src/main/java/mozilla/components/feature/session/SessionFeature.kt
index 9dae8d3aac..521c5c7b64 100644
--- a/mobile/android/android-components/components/feature/session/src/main/java/mozilla/components/feature/session/SessionFeature.kt
+++ b/mobile/android/android-components/components/feature/session/src/main/java/mozilla/components/feature/session/SessionFeature.kt
@@ -17,6 +17,7 @@ import mozilla.components.support.base.feature.UserInteractionHandler
class SessionFeature(
private val store: BrowserStore,
private val goBackUseCase: SessionUseCases.GoBackUseCase,
+ private val goForwardUseCase: SessionUseCases.GoForwardUseCase,
private val engineView: EngineView,
private val tabId: String? = null,
) : LifecycleAwareFeature, UserInteractionHandler {
@@ -49,6 +50,22 @@ class SessionFeature(
}
/**
+ * Handler for forward pressed events in activities that use this feature.
+ *
+ * @return true if the event was handled, otherwise false.
+ */
+ override fun onForwardPressed(): Boolean {
+ val tab = store.state.findTabOrCustomTabOrSelectedTab(tabId)
+
+ if (tab?.content?.canGoForward == true) {
+ goForwardUseCase(tab.id)
+ return true
+ }
+
+ return false
+ }
+
+ /**
* Stop feature: App is in the background.
*/
override fun stop() {
diff --git a/mobile/android/android-components/components/feature/session/src/main/java/mozilla/components/feature/session/SessionUseCases.kt b/mobile/android/android-components/components/feature/session/src/main/java/mozilla/components/feature/session/SessionUseCases.kt
index 565ba34632..fbe5ed9d18 100644
--- a/mobile/android/android-components/components/feature/session/src/main/java/mozilla/components/feature/session/SessionUseCases.kt
+++ b/mobile/android/android-components/components/feature/session/src/main/java/mozilla/components/feature/session/SessionUseCases.kt
@@ -89,14 +89,8 @@ class SessionUseCases(
// If we already have an engine session load Url directly to prevent
// context switches.
if (engineSession != null) {
- val parentEngineSession = if (tab is TabSessionState) {
- tab.parentId?.let { store.state.findTabOrCustomTab(it)?.engineState?.engineSession }
- } else {
- null
- }
engineSession.loadUrl(
url = url,
- parent = parentEngineSession,
flags = flags,
additionalHeaders = additionalHeaders,
)
diff --git a/mobile/android/android-components/components/feature/session/src/test/java/mozilla/components/feature/session/SessionFeatureTest.kt b/mobile/android/android-components/components/feature/session/src/test/java/mozilla/components/feature/session/SessionFeatureTest.kt
index 0192f04773..8be8db17f4 100644
--- a/mobile/android/android-components/components/feature/session/src/test/java/mozilla/components/feature/session/SessionFeatureTest.kt
+++ b/mobile/android/android-components/components/feature/session/src/test/java/mozilla/components/feature/session/SessionFeatureTest.kt
@@ -54,7 +54,7 @@ class SessionFeatureTest {
val engineSession: EngineSession = mock()
store.dispatch(EngineAction.LinkEngineSessionAction("B", engineSession)).joinBlocking()
- val feature = SessionFeature(store, mock(), view)
+ val feature = SessionFeature(store, mock(), mock(), view)
verify(view, never()).render(any())
feature.start()
@@ -74,7 +74,7 @@ class SessionFeatureTest {
val engineSession: EngineSession = mock()
store.dispatch(EngineAction.LinkEngineSessionAction("C", engineSession)).joinBlocking()
- val feature = SessionFeature(store, mock(), view, tabId = "C")
+ val feature = SessionFeature(store, mock(), mock(), view, tabId = "C")
verify(view, never()).render(any())
feature.start()
@@ -95,7 +95,7 @@ class SessionFeatureTest {
val engineSession: EngineSession = mock()
store.dispatch(EngineAction.LinkEngineSessionAction("D", engineSession)).joinBlocking()
- val feature = SessionFeature(store, mock(), view, tabId = "D")
+ val feature = SessionFeature(store, mock(), mock(), view, tabId = "D")
verify(view, never()).render(any())
feature.start()
@@ -117,7 +117,7 @@ class SessionFeatureTest {
store.dispatch(EngineAction.LinkEngineSessionAction("A", engineSessionA)).joinBlocking()
store.dispatch(EngineAction.LinkEngineSessionAction("B", engineSessionB)).joinBlocking()
- val feature = SessionFeature(store, mock(), view)
+ val feature = SessionFeature(store, mock(), mock(), view)
verify(view, never()).render(any())
feature.start()
@@ -136,7 +136,7 @@ class SessionFeatureTest {
val view: EngineView = mock()
doReturn(actualView).`when`(view).asView()
- val feature = SessionFeature(store, mock(), view)
+ val feature = SessionFeature(store, mock(), mock(), view)
verify(view, never()).render(any())
feature.start()
@@ -157,7 +157,7 @@ class SessionFeatureTest {
store.dispatch(EngineAction.LinkEngineSessionAction("A", engineSessionA)).joinBlocking()
store.dispatch(EngineAction.LinkEngineSessionAction("B", engineSessionB)).joinBlocking()
- val feature = SessionFeature(store, mock(), view)
+ val feature = SessionFeature(store, mock(), mock(), view)
verify(view, never()).render(any())
feature.start()
@@ -181,7 +181,7 @@ class SessionFeatureTest {
val engineSession: EngineSession = mock()
store.dispatch(EngineAction.LinkEngineSessionAction("B", engineSession)).joinBlocking()
- val feature = SessionFeature(store, mock(), view)
+ val feature = SessionFeature(store, mock(), mock(), view)
feature.start()
@@ -205,7 +205,7 @@ class SessionFeatureTest {
val engineSession: EngineSession = mock()
store.dispatch(EngineAction.LinkEngineSessionAction("B", engineSession)).joinBlocking()
- val feature = SessionFeature(store, mock(), view)
+ val feature = SessionFeature(store, mock(), mock(), view)
verify(view, never()).render(any())
feature.start()
@@ -233,7 +233,7 @@ class SessionFeatureTest {
val engineSession: EngineSession = mock()
store.dispatch(EngineAction.LinkEngineSessionAction("D", engineSession)).joinBlocking()
- val feature = SessionFeature(store, mock(), view, tabId = "D")
+ val feature = SessionFeature(store, mock(), mock(), view, tabId = "D")
verify(view, never()).render(any())
feature.start()
@@ -253,7 +253,7 @@ class SessionFeatureTest {
val view: EngineView = mock()
doReturn(false).`when`(view).canClearSelection()
- val feature = SessionFeature(BrowserStore(), mock(), view)
+ val feature = SessionFeature(BrowserStore(), mock(), mock(), view)
assertFalse(feature.onBackPressed())
verify(view, never()).clearSelection()
@@ -263,7 +263,7 @@ class SessionFeatureTest {
val view: EngineView = mock()
doReturn(true).`when`(view).canClearSelection()
- val feature = SessionFeature(BrowserStore(), mock(), view)
+ val feature = SessionFeature(BrowserStore(), mock(), mock(), view)
assertTrue(feature.onBackPressed())
verify(view).clearSelection()
@@ -282,7 +282,7 @@ class SessionFeatureTest {
val useCase: SessionUseCases.GoBackUseCase = mock()
- val feature = SessionFeature(store, useCase, mock())
+ val feature = SessionFeature(store, useCase, mock(), mock())
assertFalse(feature.onBackPressed())
verify(useCase, never()).invoke("A")
@@ -305,7 +305,7 @@ class SessionFeatureTest {
val useCase: SessionUseCases.GoBackUseCase = mock()
- val feature = SessionFeature(store, useCase, mock())
+ val feature = SessionFeature(store, useCase, mock(), mock())
assertTrue(feature.onBackPressed())
verify(useCase).invoke("A")
@@ -313,6 +313,48 @@ class SessionFeatureTest {
}
@Test
+ fun `onForwardPressed() invokes GoForwardUseCase if forward navigation is possible`() {
+ run {
+ val store = BrowserStore(
+ BrowserState(
+ tabs = listOf(createTab("https://www.mozilla.org", id = "A")),
+ selectedTabId = "A",
+ ),
+ )
+
+ val forwardUseCase: SessionUseCases.GoForwardUseCase = mock()
+
+ val feature = SessionFeature(store, mock(), forwardUseCase, mock())
+
+ assertFalse(feature.onForwardPressed())
+ verify(forwardUseCase, never()).invoke("A")
+ }
+
+ run {
+ val store = BrowserStore(
+ BrowserState(
+ tabs = listOf(createTab("https://www.mozilla.org", id = "A")),
+ selectedTabId = "A",
+ ),
+ )
+
+ store.dispatch(
+ ContentAction.UpdateForwardNavigationStateAction(
+ "A",
+ canGoForward = true,
+ ),
+ ).joinBlocking()
+
+ val forwardUseCase: SessionUseCases.GoForwardUseCase = mock()
+
+ val feature = SessionFeature(store, mock(), forwardUseCase, mock())
+
+ assertTrue(feature.onForwardPressed())
+ verify(forwardUseCase).invoke("A")
+ }
+ }
+
+ @Test
fun `stop releases engine view`() {
val store = prepareStore()
@@ -323,7 +365,7 @@ class SessionFeatureTest {
val engineSession: EngineSession = mock()
store.dispatch(EngineAction.LinkEngineSessionAction("D", engineSession)).joinBlocking()
- val feature = SessionFeature(store, mock(), view, tabId = "D")
+ val feature = SessionFeature(store, mock(), mock(), view, tabId = "D")
verify(view, never()).render(any())
feature.start()
@@ -347,7 +389,7 @@ class SessionFeatureTest {
val engineSession: EngineSession = mock()
store.dispatch(EngineAction.LinkEngineSessionAction("A", engineSession)).joinBlocking()
- val feature = SessionFeature(store, mock(), view, tabId = "A")
+ val feature = SessionFeature(store, mock(), mock(), view, tabId = "A")
verify(view, never()).render(any())
feature.start()
@@ -368,7 +410,7 @@ class SessionFeatureTest {
val engineSession: EngineSession = mock()
store.dispatch(EngineAction.LinkEngineSessionAction("B", engineSession)).joinBlocking()
- val feature = SessionFeature(store, mock(), view)
+ val feature = SessionFeature(store, mock(), mock(), view)
verify(view, never()).render(any())
assertEquals(0L, store.state.findTab("B")?.lastAccess)
diff --git a/mobile/android/android-components/components/feature/session/src/test/java/mozilla/components/feature/session/SessionUseCasesTest.kt b/mobile/android/android-components/components/feature/session/src/test/java/mozilla/components/feature/session/SessionUseCasesTest.kt
index 4461577d25..01db35cbc8 100644
--- a/mobile/android/android-components/components/feature/session/src/test/java/mozilla/components/feature/session/SessionUseCasesTest.kt
+++ b/mobile/android/android-components/components/feature/session/src/test/java/mozilla/components/feature/session/SessionUseCasesTest.kt
@@ -132,7 +132,6 @@ class SessionUseCasesTest {
middleware.assertNotDispatched(EngineAction.LoadUrlAction::class)
verify(childEngineSession).loadUrl(
url = "https://www.mozilla.org/en-CA/firefox/browsers/mobile/",
- parent = engineSession,
)
middleware.assertLastAction(EngineAction.OptimizedLoadUrlTriggeredAction::class) { action ->
assertEquals("bugzilla", action.tabId)