[fenix] Remove Session[Manager] references from Fennec intent processors

pull/600/head
Christian Sadilek 4 years ago
parent 83b3b7e702
commit 96393f85e9

@ -67,11 +67,10 @@ class Components(private val context: Context) {
core.topSitesStorage core.topSitesStorage
) )
} }
@Suppress("Deprecation")
val intentProcessors by lazyMonitored { val intentProcessors by lazyMonitored {
IntentProcessors( IntentProcessors(
context, context,
core.sessionManager,
core.store, core.store,
useCases.sessionUseCases, useCases.sessionUseCases,
useCases.tabsUseCases, useCases.tabsUseCases,

@ -5,7 +5,6 @@
package org.mozilla.fenix.components package org.mozilla.fenix.components
import android.content.Context import android.content.Context
import mozilla.components.browser.session.SessionManager
import mozilla.components.browser.state.store.BrowserStore import mozilla.components.browser.state.store.BrowserStore
import mozilla.components.feature.customtabs.CustomTabIntentProcessor import mozilla.components.feature.customtabs.CustomTabIntentProcessor
import mozilla.components.feature.customtabs.store.CustomTabsServiceStore import mozilla.components.feature.customtabs.store.CustomTabsServiceStore
@ -32,7 +31,6 @@ import org.mozilla.fenix.utils.Mockable
@Suppress("LongParameterList") @Suppress("LongParameterList")
class IntentProcessors( class IntentProcessors(
private val context: Context, private val context: Context,
private val sessionManager: SessionManager,
private val store: BrowserStore, private val store: BrowserStore,
private val sessionUseCases: SessionUseCases, private val sessionUseCases: SessionUseCases,
private val tabsUseCases: TabsUseCases, private val tabsUseCases: TabsUseCases,
@ -74,12 +72,12 @@ class IntentProcessors(
store = customTabsStore store = customTabsStore
), ),
WebAppIntentProcessor(store, tabsUseCases.addTab, sessionUseCases.loadUrl, manifestStorage), WebAppIntentProcessor(store, tabsUseCases.addTab, sessionUseCases.loadUrl, manifestStorage),
FennecWebAppIntentProcessor(context, sessionManager, sessionUseCases.loadUrl, manifestStorage) FennecWebAppIntentProcessor(context, tabsUseCases.addTab, manifestStorage)
) )
} }
val fennecPageShortcutIntentProcessor by lazyMonitored { val fennecPageShortcutIntentProcessor by lazyMonitored {
FennecBookmarkShortcutsIntentProcessor(sessionManager, sessionUseCases.loadUrl) FennecBookmarkShortcutsIntentProcessor(tabsUseCases.addTab)
} }
val migrationIntentProcessor by lazyMonitored { val migrationIntentProcessor by lazyMonitored {

@ -9,8 +9,6 @@ import android.content.Intent
import android.content.Intent.FLAG_ACTIVITY_NEW_DOCUMENT import android.content.Intent.FLAG_ACTIVITY_NEW_DOCUMENT
import androidx.annotation.VisibleForTesting import androidx.annotation.VisibleForTesting
import androidx.core.content.ContextCompat 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.CustomTabConfig
import mozilla.components.browser.state.state.SessionState import mozilla.components.browser.state.state.SessionState
import mozilla.components.concept.engine.EngineSession 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.ManifestStorage
import mozilla.components.feature.pwa.ext.putWebAppManifest import mozilla.components.feature.pwa.ext.putWebAppManifest
import mozilla.components.feature.pwa.ext.toCustomTabConfig 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.base.log.logger.Logger
import mozilla.components.support.utils.SafeIntent import mozilla.components.support.utils.SafeIntent
import mozilla.components.support.utils.toSafeIntent import mozilla.components.support.utils.toSafeIntent
@ -38,8 +36,7 @@ import java.io.IOException
*/ */
class FennecWebAppIntentProcessor( class FennecWebAppIntentProcessor(
private val context: Context, private val context: Context,
private val sessionManager: SessionManager, private val addNewTabUseCase: TabsUseCases.AddNewTabUseCase,
private val loadUrlUseCase: SessionUseCases.DefaultLoadUrlUseCase,
private val storage: ManifestStorage private val storage: ManifestStorage
) : IntentProcessor { ) : IntentProcessor {
val logger = Logger("FennecWebAppIntentProcessor") val logger = Logger("FennecWebAppIntentProcessor")
@ -62,16 +59,14 @@ class FennecWebAppIntentProcessor(
return if (!url.isNullOrEmpty() && matches(intent)) { return if (!url.isNullOrEmpty() && matches(intent)) {
val webAppManifest = runBlockingIncrement { loadManifest(safeIntent, url) } val webAppManifest = runBlockingIncrement { loadManifest(safeIntent, url) }
val sessionId = addNewTabUseCase(
val session = Session(url, private = false, source = SessionState.Source.HOME_SCREEN) url = url,
session.webAppManifest = webAppManifest source = SessionState.Source.HOME_SCREEN,
session.customTabConfig = flags = EngineSession.LoadUrlFlags.external(),
webAppManifest?.toCustomTabConfig() ?: createFallbackCustomTabConfig() webAppManifest = webAppManifest,
customTabConfig = webAppManifest?.toCustomTabConfig() ?: createFallbackCustomTabConfig()
sessionManager.add(session) )
loadUrlUseCase(url, session.id, EngineSession.LoadUrlFlags.external()) intent.putSessionId(sessionId)
intent.putSessionId(session.id)
if (webAppManifest != null) { if (webAppManifest != null) {
intent.flags = FLAG_ACTIVITY_NEW_DOCUMENT intent.flags = FLAG_ACTIVITY_NEW_DOCUMENT

@ -7,13 +7,11 @@ package org.mozilla.fenix.home.intent
import android.content.Intent import android.content.Intent
import android.content.Intent.ACTION_VIEW import android.content.Intent.ACTION_VIEW
import androidx.annotation.VisibleForTesting 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.browser.state.state.SessionState
import mozilla.components.concept.engine.EngineSession import mozilla.components.concept.engine.EngineSession
import mozilla.components.feature.intent.ext.putSessionId import mozilla.components.feature.intent.ext.putSessionId
import mozilla.components.feature.intent.processing.IntentProcessor 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 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 * https://developer.android.com/guide/topics/ui/shortcuts/creating-shortcuts#pinned
*/ */
class FennecBookmarkShortcutsIntentProcessor( class FennecBookmarkShortcutsIntentProcessor(
private val sessionManager: SessionManager, private val addNewTabUseCase: TabsUseCases.AddNewTabUseCase
private val loadUrlUseCase: SessionUseCases.DefaultLoadUrlUseCase
) : IntentProcessor { ) : IntentProcessor {
/** /**
@ -41,13 +38,15 @@ class FennecBookmarkShortcutsIntentProcessor(
val url = safeIntent.dataString val url = safeIntent.dataString
return if (!url.isNullOrEmpty() && matches(intent)) { return if (!url.isNullOrEmpty() && matches(intent)) {
val session = Session(url, private = false, source = SessionState.Source.HOME_SCREEN) val sessionId = addNewTabUseCase(
url = url,
sessionManager.add(session, selected = true) flags = EngineSession.LoadUrlFlags.external(),
loadUrlUseCase(url, session.id, EngineSession.LoadUrlFlags.external()) source = SessionState.Source.HOME_SCREEN,
selectTab = true,
startLoading = true
)
intent.action = ACTION_VIEW intent.action = ACTION_VIEW
intent.putSessionId(session.id) intent.putSessionId(sessionId)
true true
} else { } else {
false false

@ -5,9 +5,8 @@
package org.mozilla.fenix.customtabs package org.mozilla.fenix.customtabs
import io.mockk.mockk import io.mockk.mockk
import mozilla.components.browser.session.SessionManager
import mozilla.components.feature.pwa.ManifestStorage 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 mozilla.components.support.test.robolectric.testContext
import org.junit.Assert.assertFalse import org.junit.Assert.assertFalse
import org.junit.Assert.assertTrue import org.junit.Assert.assertTrue
@ -60,13 +59,11 @@ class FennecWebAppIntentProcessorTest {
} }
private fun createFennecWebAppIntentProcessor(): FennecWebAppIntentProcessor { private fun createFennecWebAppIntentProcessor(): FennecWebAppIntentProcessor {
val sessionManager = SessionManager(engine = mockk(relaxed = true)) val useCase: TabsUseCases.AddNewTabUseCase = mockk(relaxed = true)
val useCase: SessionUseCases.DefaultLoadUrlUseCase = mockk(relaxed = true)
val storage: ManifestStorage = mockk(relaxed = true) val storage: ManifestStorage = mockk(relaxed = true)
return FennecWebAppIntentProcessor( return FennecWebAppIntentProcessor(
testContext, testContext,
sessionManager,
useCase, useCase,
storage storage
) )

@ -9,33 +9,27 @@ import android.net.Uri
import io.mockk.Called import io.mockk.Called
import io.mockk.every import io.mockk.every
import io.mockk.mockk import io.mockk.mockk
import io.mockk.mockkStatic
import io.mockk.verify import io.mockk.verify
import io.mockk.verifyAll
import kotlinx.coroutines.runBlocking 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.browser.state.state.SessionState
import mozilla.components.concept.engine.EngineSession import mozilla.components.concept.engine.EngineSession
import mozilla.components.feature.intent.ext.getSessionId 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.assertEquals
import org.junit.Assert.assertFalse import org.junit.Assert.assertFalse
import org.junit.Assert.assertTrue import org.junit.Assert.assertTrue
import org.junit.Test import org.junit.Test
import org.junit.runner.RunWith import org.junit.runner.RunWith
import org.mozilla.fenix.home.intent.FennecBookmarkShortcutsIntentProcessor.Companion.ACTION_FENNEC_HOMESCREEN_SHORTCUT
import org.mozilla.fenix.helpers.FenixRobolectricTestRunner 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) @RunWith(FenixRobolectricTestRunner::class)
class FennecBookmarkShortcutsIntentProcessorTest { class FennecBookmarkShortcutsIntentProcessorTest {
private val sessionManager = mockk<SessionManager>(relaxed = true) private val addNewTabUseCase = mockk<TabsUseCases.AddNewTabUseCase>(relaxed = true)
private val loadUrlUseCase = mockk<SessionUseCases.DefaultLoadUrlUseCase>(relaxed = true)
@Test @Test
fun `do not process blank Intents`() = runBlocking { fun `do not process blank Intents`() = runBlocking {
val processor = FennecBookmarkShortcutsIntentProcessor(sessionManager, loadUrlUseCase) val processor = FennecBookmarkShortcutsIntentProcessor(addNewTabUseCase)
val fennecShortcutsIntent = Intent(ACTION_FENNEC_HOMESCREEN_SHORTCUT) val fennecShortcutsIntent = Intent(ACTION_FENNEC_HOMESCREEN_SHORTCUT)
fennecShortcutsIntent.data = Uri.parse("http://mozilla.org") fennecShortcutsIntent.data = Uri.parse("http://mozilla.org")
@ -43,30 +37,38 @@ class FennecBookmarkShortcutsIntentProcessorTest {
assertFalse(wasEmptyIntentProcessed) assertFalse(wasEmptyIntentProcessed)
verify { verify {
sessionManager wasNot Called addNewTabUseCase wasNot Called
loadUrlUseCase wasNot Called
} }
} }
@Test @Test
fun `processing a Fennec shortcut Intent results in loading it's URL in a new Session`() = runBlocking { fun `processing a Fennec shortcut Intent results in loading it's URL in a new Session`() = runBlocking {
mockkStatic(UUID::class) val expectedSessionId = "test"
// The Session constructor uses UUID.randomUUID().toString() as the default value for it's id field val processor = FennecBookmarkShortcutsIntentProcessor(addNewTabUseCase)
every { UUID.randomUUID().toString() } returns "test"
val processor = FennecBookmarkShortcutsIntentProcessor(sessionManager, loadUrlUseCase)
val fennecShortcutsIntent = Intent(ACTION_FENNEC_HOMESCREEN_SHORTCUT) val fennecShortcutsIntent = Intent(ACTION_FENNEC_HOMESCREEN_SHORTCUT)
val testUrl = "http://mozilla.org" val testUrl = "http://mozilla.org"
fennecShortcutsIntent.data = Uri.parse(testUrl) 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) assertTrue(wasIntentProcessed)
assertEquals(Intent.ACTION_VIEW, fennecShortcutsIntent.action) assertEquals(Intent.ACTION_VIEW, fennecShortcutsIntent.action)
assertEquals(expectedSession.id, fennecShortcutsIntent.getSessionId()) assertEquals(expectedSessionId, fennecShortcutsIntent.getSessionId())
verifyAll { verify {
sessionManager.add(expectedSession, true) addNewTabUseCase(
loadUrlUseCase(testUrl, expectedSession.id, EngineSession.LoadUrlFlags.external()) url = testUrl,
flags = EngineSession.LoadUrlFlags.external(),
source = SessionState.Source.HOME_SCREEN,
selectTab = true,
startLoading = true
)
} }
} }
} }

Loading…
Cancel
Save