diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-06-12 05:43:14 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-06-12 05:43:14 +0000 |
commit | 8dd16259287f58f9273002717ec4d27e97127719 (patch) | |
tree | 3863e62a53829a84037444beab3abd4ed9dfc7d0 /mobile/android/android-components/components/feature/session | |
parent | Releasing progress-linux version 126.0.1-1~progress7.99u1. (diff) | |
download | firefox-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')
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) |