From dc002f050807b8141ea82c655ac5dcbaece58376 Mon Sep 17 00:00:00 2001 From: Christian Sadilek Date: Wed, 24 Feb 2021 11:02:52 -0500 Subject: [PATCH] Remove Session[Manager] references from Fennec intent processors --- .../mozilla/fenix/components/Components.kt | 3 +- .../fenix/components/IntentProcessors.kt | 6 +-- .../customtabs/FennecWebAppIntentProcessor.kt | 25 ++++------ .../FennecBookmarkShortcutsIntentProcessor.kt | 21 ++++----- .../FennecWebAppIntentProcessorTest.kt | 7 +-- ...necBookmarkShortcutsIntentProcessorTest.kt | 46 ++++++++++--------- 6 files changed, 49 insertions(+), 59 deletions(-) diff --git a/app/src/main/java/org/mozilla/fenix/components/Components.kt b/app/src/main/java/org/mozilla/fenix/components/Components.kt index d1f7149848..fbfe5ed3fc 100644 --- a/app/src/main/java/org/mozilla/fenix/components/Components.kt +++ b/app/src/main/java/org/mozilla/fenix/components/Components.kt @@ -67,11 +67,10 @@ class Components(private val context: Context) { core.topSitesStorage ) } - @Suppress("Deprecation") + val intentProcessors by lazyMonitored { IntentProcessors( context, - core.sessionManager, core.store, useCases.sessionUseCases, useCases.tabsUseCases, diff --git a/app/src/main/java/org/mozilla/fenix/components/IntentProcessors.kt b/app/src/main/java/org/mozilla/fenix/components/IntentProcessors.kt index a2d35af89e..cf80fb2b00 100644 --- a/app/src/main/java/org/mozilla/fenix/components/IntentProcessors.kt +++ b/app/src/main/java/org/mozilla/fenix/components/IntentProcessors.kt @@ -5,7 +5,6 @@ package org.mozilla.fenix.components import android.content.Context -import mozilla.components.browser.session.SessionManager import mozilla.components.browser.state.store.BrowserStore import mozilla.components.feature.customtabs.CustomTabIntentProcessor import mozilla.components.feature.customtabs.store.CustomTabsServiceStore @@ -32,7 +31,6 @@ import org.mozilla.fenix.utils.Mockable @Suppress("LongParameterList") class IntentProcessors( private val context: Context, - private val sessionManager: SessionManager, private val store: BrowserStore, private val sessionUseCases: SessionUseCases, private val tabsUseCases: TabsUseCases, @@ -74,12 +72,12 @@ class IntentProcessors( store = customTabsStore ), WebAppIntentProcessor(store, tabsUseCases.addTab, sessionUseCases.loadUrl, manifestStorage), - FennecWebAppIntentProcessor(context, sessionManager, sessionUseCases.loadUrl, manifestStorage) + FennecWebAppIntentProcessor(context, tabsUseCases.addTab, manifestStorage) ) } val fennecPageShortcutIntentProcessor by lazyMonitored { - FennecBookmarkShortcutsIntentProcessor(sessionManager, sessionUseCases.loadUrl) + FennecBookmarkShortcutsIntentProcessor(tabsUseCases.addTab) } val migrationIntentProcessor by lazyMonitored { diff --git a/app/src/main/java/org/mozilla/fenix/customtabs/FennecWebAppIntentProcessor.kt b/app/src/main/java/org/mozilla/fenix/customtabs/FennecWebAppIntentProcessor.kt index 1eee927a26..68fbfe2498 100644 --- a/app/src/main/java/org/mozilla/fenix/customtabs/FennecWebAppIntentProcessor.kt +++ b/app/src/main/java/org/mozilla/fenix/customtabs/FennecWebAppIntentProcessor.kt @@ -9,8 +9,6 @@ import android.content.Intent import android.content.Intent.FLAG_ACTIVITY_NEW_DOCUMENT import androidx.annotation.VisibleForTesting import androidx.core.content.ContextCompat -import mozilla.components.browser.session.Session -import mozilla.components.browser.session.SessionManager import mozilla.components.browser.state.state.CustomTabConfig import mozilla.components.browser.state.state.SessionState import mozilla.components.concept.engine.EngineSession @@ -22,7 +20,7 @@ import mozilla.components.feature.intent.processing.IntentProcessor import mozilla.components.feature.pwa.ManifestStorage import mozilla.components.feature.pwa.ext.putWebAppManifest import mozilla.components.feature.pwa.ext.toCustomTabConfig -import mozilla.components.feature.session.SessionUseCases +import mozilla.components.feature.tabs.TabsUseCases import mozilla.components.support.base.log.logger.Logger import mozilla.components.support.utils.SafeIntent import mozilla.components.support.utils.toSafeIntent @@ -38,8 +36,7 @@ import java.io.IOException */ class FennecWebAppIntentProcessor( private val context: Context, - private val sessionManager: SessionManager, - private val loadUrlUseCase: SessionUseCases.DefaultLoadUrlUseCase, + private val addNewTabUseCase: TabsUseCases.AddNewTabUseCase, private val storage: ManifestStorage ) : IntentProcessor { val logger = Logger("FennecWebAppIntentProcessor") @@ -62,16 +59,14 @@ class FennecWebAppIntentProcessor( return if (!url.isNullOrEmpty() && matches(intent)) { val webAppManifest = runBlockingIncrement { loadManifest(safeIntent, url) } - - val session = Session(url, private = false, source = SessionState.Source.HOME_SCREEN) - session.webAppManifest = webAppManifest - session.customTabConfig = - webAppManifest?.toCustomTabConfig() ?: createFallbackCustomTabConfig() - - sessionManager.add(session) - loadUrlUseCase(url, session.id, EngineSession.LoadUrlFlags.external()) - - intent.putSessionId(session.id) + val sessionId = addNewTabUseCase( + url = url, + source = SessionState.Source.HOME_SCREEN, + flags = EngineSession.LoadUrlFlags.external(), + webAppManifest = webAppManifest, + customTabConfig = webAppManifest?.toCustomTabConfig() ?: createFallbackCustomTabConfig() + ) + intent.putSessionId(sessionId) if (webAppManifest != null) { intent.flags = FLAG_ACTIVITY_NEW_DOCUMENT diff --git a/app/src/main/java/org/mozilla/fenix/home/intent/FennecBookmarkShortcutsIntentProcessor.kt b/app/src/main/java/org/mozilla/fenix/home/intent/FennecBookmarkShortcutsIntentProcessor.kt index cf37943e91..b666503100 100644 --- a/app/src/main/java/org/mozilla/fenix/home/intent/FennecBookmarkShortcutsIntentProcessor.kt +++ b/app/src/main/java/org/mozilla/fenix/home/intent/FennecBookmarkShortcutsIntentProcessor.kt @@ -7,13 +7,11 @@ package org.mozilla.fenix.home.intent import android.content.Intent import android.content.Intent.ACTION_VIEW import androidx.annotation.VisibleForTesting -import mozilla.components.browser.session.Session -import mozilla.components.browser.session.SessionManager import mozilla.components.browser.state.state.SessionState import mozilla.components.concept.engine.EngineSession import mozilla.components.feature.intent.ext.putSessionId import mozilla.components.feature.intent.processing.IntentProcessor -import mozilla.components.feature.session.SessionUseCases +import mozilla.components.feature.tabs.TabsUseCases import mozilla.components.support.utils.toSafeIntent /** @@ -21,8 +19,7 @@ import mozilla.components.support.utils.toSafeIntent * https://developer.android.com/guide/topics/ui/shortcuts/creating-shortcuts#pinned */ class FennecBookmarkShortcutsIntentProcessor( - private val sessionManager: SessionManager, - private val loadUrlUseCase: SessionUseCases.DefaultLoadUrlUseCase + private val addNewTabUseCase: TabsUseCases.AddNewTabUseCase ) : IntentProcessor { /** @@ -41,13 +38,15 @@ class FennecBookmarkShortcutsIntentProcessor( val url = safeIntent.dataString return if (!url.isNullOrEmpty() && matches(intent)) { - val session = Session(url, private = false, source = SessionState.Source.HOME_SCREEN) - - sessionManager.add(session, selected = true) - loadUrlUseCase(url, session.id, EngineSession.LoadUrlFlags.external()) + val sessionId = addNewTabUseCase( + url = url, + flags = EngineSession.LoadUrlFlags.external(), + source = SessionState.Source.HOME_SCREEN, + selectTab = true, + startLoading = true + ) intent.action = ACTION_VIEW - intent.putSessionId(session.id) - + intent.putSessionId(sessionId) true } else { false diff --git a/app/src/test/java/org/mozilla/fenix/customtabs/FennecWebAppIntentProcessorTest.kt b/app/src/test/java/org/mozilla/fenix/customtabs/FennecWebAppIntentProcessorTest.kt index 6e9f7c7156..b39b012a87 100644 --- a/app/src/test/java/org/mozilla/fenix/customtabs/FennecWebAppIntentProcessorTest.kt +++ b/app/src/test/java/org/mozilla/fenix/customtabs/FennecWebAppIntentProcessorTest.kt @@ -5,9 +5,8 @@ package org.mozilla.fenix.customtabs import io.mockk.mockk -import mozilla.components.browser.session.SessionManager import mozilla.components.feature.pwa.ManifestStorage -import mozilla.components.feature.session.SessionUseCases +import mozilla.components.feature.tabs.TabsUseCases import mozilla.components.support.test.robolectric.testContext import org.junit.Assert.assertFalse import org.junit.Assert.assertTrue @@ -60,13 +59,11 @@ class FennecWebAppIntentProcessorTest { } private fun createFennecWebAppIntentProcessor(): FennecWebAppIntentProcessor { - val sessionManager = SessionManager(engine = mockk(relaxed = true)) - val useCase: SessionUseCases.DefaultLoadUrlUseCase = mockk(relaxed = true) + val useCase: TabsUseCases.AddNewTabUseCase = mockk(relaxed = true) val storage: ManifestStorage = mockk(relaxed = true) return FennecWebAppIntentProcessor( testContext, - sessionManager, useCase, storage ) diff --git a/app/src/test/java/org/mozilla/fenix/home/intent/FennecBookmarkShortcutsIntentProcessorTest.kt b/app/src/test/java/org/mozilla/fenix/home/intent/FennecBookmarkShortcutsIntentProcessorTest.kt index 06f1ffed8e..4d7cd34dac 100644 --- a/app/src/test/java/org/mozilla/fenix/home/intent/FennecBookmarkShortcutsIntentProcessorTest.kt +++ b/app/src/test/java/org/mozilla/fenix/home/intent/FennecBookmarkShortcutsIntentProcessorTest.kt @@ -9,33 +9,27 @@ import android.net.Uri import io.mockk.Called import io.mockk.every import io.mockk.mockk -import io.mockk.mockkStatic import io.mockk.verify -import io.mockk.verifyAll import kotlinx.coroutines.runBlocking -import mozilla.components.browser.session.Session -import mozilla.components.browser.session.SessionManager import mozilla.components.browser.state.state.SessionState import mozilla.components.concept.engine.EngineSession import mozilla.components.feature.intent.ext.getSessionId -import mozilla.components.feature.session.SessionUseCases +import mozilla.components.feature.tabs.TabsUseCases import org.junit.Assert.assertEquals import org.junit.Assert.assertFalse import org.junit.Assert.assertTrue import org.junit.Test import org.junit.runner.RunWith -import org.mozilla.fenix.home.intent.FennecBookmarkShortcutsIntentProcessor.Companion.ACTION_FENNEC_HOMESCREEN_SHORTCUT import org.mozilla.fenix.helpers.FenixRobolectricTestRunner -import java.util.UUID +import org.mozilla.fenix.home.intent.FennecBookmarkShortcutsIntentProcessor.Companion.ACTION_FENNEC_HOMESCREEN_SHORTCUT @RunWith(FenixRobolectricTestRunner::class) class FennecBookmarkShortcutsIntentProcessorTest { - private val sessionManager = mockk(relaxed = true) - private val loadUrlUseCase = mockk(relaxed = true) + private val addNewTabUseCase = mockk(relaxed = true) @Test fun `do not process blank Intents`() = runBlocking { - val processor = FennecBookmarkShortcutsIntentProcessor(sessionManager, loadUrlUseCase) + val processor = FennecBookmarkShortcutsIntentProcessor(addNewTabUseCase) val fennecShortcutsIntent = Intent(ACTION_FENNEC_HOMESCREEN_SHORTCUT) fennecShortcutsIntent.data = Uri.parse("http://mozilla.org") @@ -43,30 +37,38 @@ class FennecBookmarkShortcutsIntentProcessorTest { assertFalse(wasEmptyIntentProcessed) verify { - sessionManager wasNot Called - loadUrlUseCase wasNot Called + addNewTabUseCase wasNot Called } } @Test fun `processing a Fennec shortcut Intent results in loading it's URL in a new Session`() = runBlocking { - mockkStatic(UUID::class) - // The Session constructor uses UUID.randomUUID().toString() as the default value for it's id field - every { UUID.randomUUID().toString() } returns "test" - val processor = FennecBookmarkShortcutsIntentProcessor(sessionManager, loadUrlUseCase) + val expectedSessionId = "test" + val processor = FennecBookmarkShortcutsIntentProcessor(addNewTabUseCase) val fennecShortcutsIntent = Intent(ACTION_FENNEC_HOMESCREEN_SHORTCUT) val testUrl = "http://mozilla.org" fennecShortcutsIntent.data = Uri.parse(testUrl) - val expectedSession = Session(testUrl, private = false, source = SessionState.Source.HOME_SCREEN) - val wasIntentProcessed = processor.process(fennecShortcutsIntent) + every { addNewTabUseCase( + url = testUrl, + flags = EngineSession.LoadUrlFlags.external(), + source = SessionState.Source.HOME_SCREEN, + selectTab = true, + startLoading = true) + } returns expectedSessionId + val wasIntentProcessed = processor.process(fennecShortcutsIntent) assertTrue(wasIntentProcessed) assertEquals(Intent.ACTION_VIEW, fennecShortcutsIntent.action) - assertEquals(expectedSession.id, fennecShortcutsIntent.getSessionId()) - verifyAll { - sessionManager.add(expectedSession, true) - loadUrlUseCase(testUrl, expectedSession.id, EngineSession.LoadUrlFlags.external()) + assertEquals(expectedSessionId, fennecShortcutsIntent.getSessionId()) + verify { + addNewTabUseCase( + url = testUrl, + flags = EngineSession.LoadUrlFlags.external(), + source = SessionState.Source.HOME_SCREEN, + selectTab = true, + startLoading = true + ) } } }