For #8153: Allow web-ext to open new tabs in correct browsing mode
parent
5e4ef202b8
commit
2c01022c4b
|
@ -304,7 +304,7 @@ open class FenixApplication : LocaleAwareApplication() {
|
||||||
components.core.store,
|
components.core.store,
|
||||||
onNewTabOverride = {
|
onNewTabOverride = {
|
||||||
_, engineSession, url ->
|
_, engineSession, url ->
|
||||||
val session = Session(url)
|
val session = Session(url, components.browsingModeManager.mode.isPrivate)
|
||||||
components.core.sessionManager.add(session, true, engineSession)
|
components.core.sessionManager.add(session, true, engineSession)
|
||||||
session.id
|
session.id
|
||||||
},
|
},
|
||||||
|
|
|
@ -40,8 +40,7 @@ import mozilla.components.support.utils.toSafeIntent
|
||||||
import mozilla.components.support.webextensions.WebExtensionPopupFeature
|
import mozilla.components.support.webextensions.WebExtensionPopupFeature
|
||||||
import org.mozilla.fenix.browser.UriOpenedObserver
|
import org.mozilla.fenix.browser.UriOpenedObserver
|
||||||
import org.mozilla.fenix.browser.browsingmode.BrowsingMode
|
import org.mozilla.fenix.browser.browsingmode.BrowsingMode
|
||||||
import org.mozilla.fenix.browser.browsingmode.BrowsingModeManager
|
import org.mozilla.fenix.browser.browsingmode.BrowsingModeListener
|
||||||
import org.mozilla.fenix.browser.browsingmode.DefaultBrowsingModeManager
|
|
||||||
import org.mozilla.fenix.components.metrics.BreadcrumbsRecorder
|
import org.mozilla.fenix.components.metrics.BreadcrumbsRecorder
|
||||||
import org.mozilla.fenix.components.metrics.Event
|
import org.mozilla.fenix.components.metrics.Event
|
||||||
import org.mozilla.fenix.exceptions.ExceptionsFragmentDirections
|
import org.mozilla.fenix.exceptions.ExceptionsFragmentDirections
|
||||||
|
@ -74,7 +73,7 @@ open class HomeActivity : LocaleAwareAppCompatActivity() {
|
||||||
|
|
||||||
private var webExtScope: CoroutineScope? = null
|
private var webExtScope: CoroutineScope? = null
|
||||||
lateinit var themeManager: ThemeManager
|
lateinit var themeManager: ThemeManager
|
||||||
lateinit var browsingModeManager: BrowsingModeManager
|
private val browsingModeManager get() = components.browsingModeManager
|
||||||
|
|
||||||
private var sessionObserver: SessionManager.Observer? = null
|
private var sessionObserver: SessionManager.Observer? = null
|
||||||
|
|
||||||
|
@ -99,6 +98,12 @@ open class HomeActivity : LocaleAwareAppCompatActivity() {
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private val browsingModeListener = object : BrowsingModeListener {
|
||||||
|
override fun onBrowsingModeChange(newMode: BrowsingMode) {
|
||||||
|
themeManager.currentTheme = newMode
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
override fun applyOverrideConfiguration(overrideConfiguration: Configuration?) {
|
override fun applyOverrideConfiguration(overrideConfiguration: Configuration?) {
|
||||||
if (overrideConfiguration != null) {
|
if (overrideConfiguration != null) {
|
||||||
val uiMode = overrideConfiguration.uiMode
|
val uiMode = overrideConfiguration.uiMode
|
||||||
|
@ -161,6 +166,16 @@ open class HomeActivity : LocaleAwareAppCompatActivity() {
|
||||||
hotStartMonitor.onPostResumeFinalMethodCall()
|
hotStartMonitor.onPostResumeFinalMethodCall()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
final override fun onStart() {
|
||||||
|
super.onStart()
|
||||||
|
browsingModeManager.registerBrowsingModeListener(browsingModeListener)
|
||||||
|
}
|
||||||
|
|
||||||
|
final override fun onStop() {
|
||||||
|
super.onStop()
|
||||||
|
browsingModeManager.unregisterBrowsingModeListener()
|
||||||
|
}
|
||||||
|
|
||||||
final override fun onPause() {
|
final override fun onPause() {
|
||||||
super.onPause()
|
super.onPause()
|
||||||
|
|
||||||
|
@ -237,7 +252,7 @@ open class HomeActivity : LocaleAwareAppCompatActivity() {
|
||||||
|
|
||||||
private fun setupThemeAndBrowsingMode(mode: BrowsingMode) {
|
private fun setupThemeAndBrowsingMode(mode: BrowsingMode) {
|
||||||
settings().lastKnownMode = mode
|
settings().lastKnownMode = mode
|
||||||
browsingModeManager = createBrowsingModeManager(mode)
|
browsingModeManager.mode = mode
|
||||||
themeManager = createThemeManager()
|
themeManager = createThemeManager()
|
||||||
themeManager.setActivityTheme(this)
|
themeManager.setActivityTheme(this)
|
||||||
themeManager.applyStatusBarTheme(this)
|
themeManager.applyStatusBarTheme(this)
|
||||||
|
@ -374,12 +389,6 @@ open class HomeActivity : LocaleAwareAppCompatActivity() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected open fun createBrowsingModeManager(initialMode: BrowsingMode): BrowsingModeManager {
|
|
||||||
return DefaultBrowsingModeManager(initialMode) { newMode ->
|
|
||||||
themeManager.currentTheme = newMode
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
protected open fun createThemeManager(): ThemeManager {
|
protected open fun createThemeManager(): ThemeManager {
|
||||||
return DefaultThemeManager(browsingModeManager.mode, this)
|
return DefaultThemeManager(browsingModeManager.mode, this)
|
||||||
}
|
}
|
||||||
|
|
|
@ -160,10 +160,10 @@ abstract class BaseBrowserFragment : Fragment(), UserInteractionHandler, Session
|
||||||
navController = findNavController(),
|
navController = findNavController(),
|
||||||
readerModeController = DefaultReaderModeController(
|
readerModeController = DefaultReaderModeController(
|
||||||
readerViewFeature,
|
readerViewFeature,
|
||||||
(activity as HomeActivity).browsingModeManager.mode.isPrivate,
|
requireComponents.browsingModeManager.mode.isPrivate,
|
||||||
view.readerViewControlsBar
|
view.readerViewControlsBar
|
||||||
),
|
),
|
||||||
browsingModeManager = (activity as HomeActivity).browsingModeManager,
|
browsingModeManager = requireComponents.browsingModeManager,
|
||||||
sessionManager = requireComponents.core.sessionManager,
|
sessionManager = requireComponents.core.sessionManager,
|
||||||
findInPageLauncher = { findInPageIntegration.withFeature { it.launch() } },
|
findInPageLauncher = { findInPageIntegration.withFeature { it.launch() } },
|
||||||
browserLayout = view.browserLayout,
|
browserLayout = view.browserLayout,
|
||||||
|
|
|
@ -31,19 +31,32 @@ interface BrowsingModeManager {
|
||||||
var mode: BrowsingMode
|
var mode: BrowsingMode
|
||||||
}
|
}
|
||||||
|
|
||||||
|
interface BrowsingModeListener {
|
||||||
|
fun onBrowsingModeChange(newMode: BrowsingMode)
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Wraps a [BrowsingMode] and executes a callback whenever [mode] is updated.
|
* Wraps a [BrowsingMode] and executes a callback whenever [mode] is updated.
|
||||||
*/
|
*/
|
||||||
class DefaultBrowsingModeManager(
|
class DefaultBrowsingModeManager(
|
||||||
private var _mode: BrowsingMode,
|
private var _mode: BrowsingMode = BrowsingMode.Normal
|
||||||
private val modeDidChange: (BrowsingMode) -> Unit
|
|
||||||
) : BrowsingModeManager {
|
) : BrowsingModeManager {
|
||||||
|
|
||||||
|
private var _browsingModeListener: BrowsingModeListener? = null
|
||||||
|
|
||||||
|
fun registerBrowsingModeListener(browsingModeListener: BrowsingModeListener) {
|
||||||
|
_browsingModeListener = browsingModeListener
|
||||||
|
}
|
||||||
|
|
||||||
|
fun unregisterBrowsingModeListener() {
|
||||||
|
_browsingModeListener = null
|
||||||
|
}
|
||||||
|
|
||||||
override var mode: BrowsingMode
|
override var mode: BrowsingMode
|
||||||
get() = _mode
|
get() = _mode
|
||||||
set(value) {
|
set(value) {
|
||||||
_mode = value
|
_mode = value
|
||||||
modeDidChange(value)
|
_browsingModeListener?.onBrowsingModeChange(value)
|
||||||
Settings.instance?.lastKnownMode = value
|
Settings.instance?.lastKnownMode = value
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -12,6 +12,7 @@ import mozilla.components.feature.addons.update.DefaultAddonUpdater
|
||||||
import mozilla.components.feature.tabs.TabsUseCases
|
import mozilla.components.feature.tabs.TabsUseCases
|
||||||
import mozilla.components.lib.publicsuffixlist.PublicSuffixList
|
import mozilla.components.lib.publicsuffixlist.PublicSuffixList
|
||||||
import mozilla.components.support.migration.state.MigrationStore
|
import mozilla.components.support.migration.state.MigrationStore
|
||||||
|
import org.mozilla.fenix.browser.browsingmode.DefaultBrowsingModeManager
|
||||||
import org.mozilla.fenix.test.Mockable
|
import org.mozilla.fenix.test.Mockable
|
||||||
import org.mozilla.fenix.utils.ClipboardHandler
|
import org.mozilla.fenix.utils.ClipboardHandler
|
||||||
import java.util.concurrent.TimeUnit
|
import java.util.concurrent.TimeUnit
|
||||||
|
@ -71,6 +72,8 @@ class Components(private val context: Context) {
|
||||||
AddonManager(core.store, core.engine, addonCollectionProvider, addonUpdater)
|
AddonManager(core.store, core.engine, addonCollectionProvider, addonUpdater)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
val browsingModeManager by lazy { DefaultBrowsingModeManager() }
|
||||||
|
|
||||||
val tabsUseCases: TabsUseCases by lazy { TabsUseCases(core.sessionManager) }
|
val tabsUseCases: TabsUseCases by lazy { TabsUseCases(core.sessionManager) }
|
||||||
|
|
||||||
val analytics by lazy { Analytics(context) }
|
val analytics by lazy { Analytics(context) }
|
||||||
|
|
|
@ -22,10 +22,8 @@ import mozilla.components.browser.menu.item.BrowserMenuItemToolbar
|
||||||
import mozilla.components.browser.session.Session
|
import mozilla.components.browser.session.Session
|
||||||
import mozilla.components.browser.session.SessionManager
|
import mozilla.components.browser.session.SessionManager
|
||||||
import mozilla.components.concept.storage.BookmarksStorage
|
import mozilla.components.concept.storage.BookmarksStorage
|
||||||
import org.mozilla.fenix.HomeActivity
|
|
||||||
import org.mozilla.fenix.R
|
import org.mozilla.fenix.R
|
||||||
import org.mozilla.fenix.browser.browsingmode.BrowsingMode
|
import org.mozilla.fenix.browser.browsingmode.BrowsingMode
|
||||||
import org.mozilla.fenix.ext.asActivity
|
|
||||||
import org.mozilla.fenix.ext.components
|
import org.mozilla.fenix.ext.components
|
||||||
import org.mozilla.fenix.theme.ThemeManager
|
import org.mozilla.fenix.theme.ThemeManager
|
||||||
import org.mozilla.fenix.utils.Settings
|
import org.mozilla.fenix.utils.Settings
|
||||||
|
@ -130,8 +128,8 @@ class DefaultToolbarMenu(
|
||||||
|
|
||||||
private val menuItems by lazy {
|
private val menuItems by lazy {
|
||||||
// Predicates that are called once, during screen init
|
// Predicates that are called once, during screen init
|
||||||
val shouldShowSaveToCollection = (context.asActivity() as? HomeActivity)
|
val shouldShowSaveToCollection =
|
||||||
?.browsingModeManager?.mode == BrowsingMode.Normal
|
context.components.browsingModeManager.mode == BrowsingMode.Normal
|
||||||
val shouldDeleteDataOnQuit = Settings.getInstance(context)
|
val shouldDeleteDataOnQuit = Settings.getInstance(context)
|
||||||
.shouldDeleteBrowsingDataOnQuit
|
.shouldDeleteBrowsingDataOnQuit
|
||||||
|
|
||||||
|
|
|
@ -27,7 +27,6 @@ import mozilla.components.lib.state.ext.consumeFrom
|
||||||
import mozilla.components.support.base.feature.UserInteractionHandler
|
import mozilla.components.support.base.feature.UserInteractionHandler
|
||||||
import mozilla.components.support.base.feature.ViewBoundFeatureWrapper
|
import mozilla.components.support.base.feature.ViewBoundFeatureWrapper
|
||||||
import mozilla.components.support.ktx.android.arch.lifecycle.addObservers
|
import mozilla.components.support.ktx.android.arch.lifecycle.addObservers
|
||||||
import org.mozilla.fenix.HomeActivity
|
|
||||||
import org.mozilla.fenix.R
|
import org.mozilla.fenix.R
|
||||||
import org.mozilla.fenix.browser.BaseBrowserFragment
|
import org.mozilla.fenix.browser.BaseBrowserFragment
|
||||||
import org.mozilla.fenix.browser.CustomTabContextMenuCandidate
|
import org.mozilla.fenix.browser.CustomTabContextMenuCandidate
|
||||||
|
@ -69,7 +68,7 @@ class ExternalAppBrowserFragment : BaseBrowserFragment(), UserInteractionHandler
|
||||||
activity = activity,
|
activity = activity,
|
||||||
engineLayout = view.swipeRefresh,
|
engineLayout = view.swipeRefresh,
|
||||||
onItemTapped = { browserInteractor.onBrowserToolbarMenuItemTapped(it) },
|
onItemTapped = { browserInteractor.onBrowserToolbarMenuItemTapped(it) },
|
||||||
isPrivate = (activity as HomeActivity).browsingModeManager.mode.isPrivate,
|
isPrivate = requireComponents.browsingModeManager.mode.isPrivate,
|
||||||
shouldReverseItems = !activity.settings().shouldUseBottomToolbar
|
shouldReverseItems = !activity.settings().shouldUseBottomToolbar
|
||||||
),
|
),
|
||||||
owner = this,
|
owner = this,
|
||||||
|
|
|
@ -106,7 +106,7 @@ class HomeFragment : Fragment() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private val browsingModeManager get() = (activity as HomeActivity).browsingModeManager
|
private val browsingModeManager get() = requireComponents.browsingModeManager
|
||||||
private var homeAppBarOffset = 0
|
private var homeAppBarOffset = 0
|
||||||
private val singleSessionObserver = object : Session.Observer {
|
private val singleSessionObserver = object : Session.Observer {
|
||||||
override fun onTitleChanged(session: Session, title: String) {
|
override fun onTitleChanged(session: Session, title: String) {
|
||||||
|
|
|
@ -15,6 +15,7 @@ import org.mozilla.fenix.GlobalDirections
|
||||||
import org.mozilla.fenix.HomeActivity
|
import org.mozilla.fenix.HomeActivity
|
||||||
import org.mozilla.fenix.browser.browsingmode.BrowsingMode
|
import org.mozilla.fenix.browser.browsingmode.BrowsingMode
|
||||||
import org.mozilla.fenix.ext.alreadyOnDestination
|
import org.mozilla.fenix.ext.alreadyOnDestination
|
||||||
|
import org.mozilla.fenix.ext.components
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Deep links in the form of `fenix://host` open different parts of the app.
|
* Deep links in the form of `fenix://host` open different parts of the app.
|
||||||
|
@ -56,7 +57,7 @@ class DeepLinkIntentProcessor(
|
||||||
private fun handleDeepLinkSideEffects(deepLink: Uri) {
|
private fun handleDeepLinkSideEffects(deepLink: Uri) {
|
||||||
when (deepLink.host) {
|
when (deepLink.host) {
|
||||||
"enable_private_browsing" -> {
|
"enable_private_browsing" -> {
|
||||||
activity.browsingModeManager.mode = BrowsingMode.Private
|
activity.components.browsingModeManager.mode = BrowsingMode.Private
|
||||||
}
|
}
|
||||||
"make_default_browser" -> {
|
"make_default_browser" -> {
|
||||||
if (SDK_INT >= Build.VERSION_CODES.N) {
|
if (SDK_INT >= Build.VERSION_CODES.N) {
|
||||||
|
|
|
@ -5,10 +5,10 @@
|
||||||
package org.mozilla.fenix.library
|
package org.mozilla.fenix.library
|
||||||
|
|
||||||
import androidx.fragment.app.Fragment
|
import androidx.fragment.app.Fragment
|
||||||
import org.mozilla.fenix.HomeActivity
|
|
||||||
import org.mozilla.fenix.browser.browsingmode.BrowsingMode
|
import org.mozilla.fenix.browser.browsingmode.BrowsingMode
|
||||||
import org.mozilla.fenix.ext.components
|
import org.mozilla.fenix.ext.components
|
||||||
import org.mozilla.fenix.ext.hideToolbar
|
import org.mozilla.fenix.ext.hideToolbar
|
||||||
|
import org.mozilla.fenix.ext.requireComponents
|
||||||
|
|
||||||
abstract class LibraryPageFragment<T> : Fragment() {
|
abstract class LibraryPageFragment<T> : Fragment() {
|
||||||
|
|
||||||
|
@ -24,7 +24,7 @@ abstract class LibraryPageFragment<T> : Fragment() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
(activity as HomeActivity).browsingModeManager.mode = BrowsingMode.fromBoolean(private)
|
requireComponents.browsingModeManager.mode = BrowsingMode.fromBoolean(private)
|
||||||
hideToolbar()
|
hideToolbar()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -56,7 +56,7 @@ class DefaultBookmarkController(
|
||||||
private val services: Services = activity.components.services
|
private val services: Services = activity.components.services
|
||||||
|
|
||||||
override fun handleBookmarkTapped(item: BookmarkNode) {
|
override fun handleBookmarkTapped(item: BookmarkNode) {
|
||||||
openInNewTab(item.url!!, true, BrowserDirection.FromBookmarks, activity.browsingModeManager.mode)
|
openInNewTab(item.url!!, true, BrowserDirection.FromBookmarks, context.components.browsingModeManager.mode)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun handleBookmarkExpand(folder: BookmarkNode) {
|
override fun handleBookmarkExpand(folder: BookmarkNode) {
|
||||||
|
@ -117,7 +117,7 @@ class DefaultBookmarkController(
|
||||||
) {
|
) {
|
||||||
invokePendingDeletion.invoke()
|
invokePendingDeletion.invoke()
|
||||||
with(activity) {
|
with(activity) {
|
||||||
browsingModeManager.mode = mode
|
components.browsingModeManager.mode = mode
|
||||||
openToBrowserAndLoad(searchTermOrURL, newTab, from)
|
openToBrowserAndLoad(searchTermOrURL, newTab, from)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -169,7 +169,7 @@ class HistoryFragment : LibraryPageFragment<HistoryItem>(), UserInteractionHandl
|
||||||
}
|
}
|
||||||
|
|
||||||
(activity as HomeActivity).apply {
|
(activity as HomeActivity).apply {
|
||||||
browsingModeManager.mode = BrowsingMode.Private
|
components.browsingModeManager.mode = BrowsingMode.Private
|
||||||
supportActionBar?.hide()
|
supportActionBar?.hide()
|
||||||
}
|
}
|
||||||
nav(
|
nav(
|
||||||
|
|
|
@ -88,7 +88,7 @@ class DefaultSearchController(
|
||||||
store.dispatch(
|
store.dispatch(
|
||||||
SearchFragmentAction.AllowSearchSuggestionsInPrivateModePrompt(
|
SearchFragmentAction.AllowSearchSuggestionsInPrivateModePrompt(
|
||||||
text.isNotEmpty() &&
|
text.isNotEmpty() &&
|
||||||
(context as HomeActivity).browsingModeManager.mode.isPrivate &&
|
context.components.browsingModeManager.mode.isPrivate &&
|
||||||
!context.settings().shouldShowSearchSuggestionsInPrivate &&
|
!context.settings().shouldShowSearchSuggestionsInPrivate &&
|
||||||
!context.settings().showSearchSuggestionsInPrivateOnboardingFinished
|
!context.settings().showSearchSuggestionsInPrivateOnboardingFinished
|
||||||
)
|
)
|
||||||
|
|
|
@ -87,7 +87,7 @@ class SearchFragment : Fragment(), UserInteractionHandler {
|
||||||
)
|
)
|
||||||
|
|
||||||
val showSearchSuggestions =
|
val showSearchSuggestions =
|
||||||
if ((activity as HomeActivity).browsingModeManager.mode.isPrivate) {
|
if (requireComponents.browsingModeManager.mode.isPrivate) {
|
||||||
requireContext().settings().shouldShowSearchSuggestions &&
|
requireContext().settings().shouldShowSearchSuggestions &&
|
||||||
requireContext().settings().shouldShowSearchSuggestionsInPrivate
|
requireContext().settings().shouldShowSearchSuggestionsInPrivate
|
||||||
} else {
|
} else {
|
||||||
|
@ -130,7 +130,7 @@ class SearchFragment : Fragment(), UserInteractionHandler {
|
||||||
view.toolbar_component_wrapper,
|
view.toolbar_component_wrapper,
|
||||||
searchInteractor,
|
searchInteractor,
|
||||||
historyStorageProvider(),
|
historyStorageProvider(),
|
||||||
(activity as HomeActivity).browsingModeManager.mode.isPrivate
|
requireComponents.browsingModeManager.mode.isPrivate
|
||||||
)
|
)
|
||||||
|
|
||||||
val urlView = toolbarView.view
|
val urlView = toolbarView.view
|
||||||
|
|
|
@ -28,9 +28,7 @@ import mozilla.components.feature.session.SessionUseCases
|
||||||
import mozilla.components.feature.tabs.TabsUseCases
|
import mozilla.components.feature.tabs.TabsUseCases
|
||||||
import mozilla.components.support.ktx.android.content.getColorFromAttr
|
import mozilla.components.support.ktx.android.content.getColorFromAttr
|
||||||
import mozilla.components.support.ktx.android.view.hideKeyboard
|
import mozilla.components.support.ktx.android.view.hideKeyboard
|
||||||
import org.mozilla.fenix.HomeActivity
|
|
||||||
import org.mozilla.fenix.R
|
import org.mozilla.fenix.R
|
||||||
import org.mozilla.fenix.ext.asActivity
|
|
||||||
import org.mozilla.fenix.ext.components
|
import org.mozilla.fenix.ext.components
|
||||||
import org.mozilla.fenix.search.SearchEngineSource
|
import org.mozilla.fenix.search.SearchEngineSource
|
||||||
import org.mozilla.fenix.search.SearchFragmentState
|
import org.mozilla.fenix.search.SearchFragmentState
|
||||||
|
@ -304,10 +302,7 @@ class AwesomeBarView(
|
||||||
return providersToRemove
|
return providersToRemove
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun isBrowsingModePrivate(): Boolean {
|
private fun isBrowsingModePrivate(): Boolean = container.context.components.browsingModeManager.mode.isPrivate
|
||||||
return (container.context.asActivity() as? HomeActivity)?.browsingModeManager?.mode?.isPrivate
|
|
||||||
?: false
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun getSelectedSearchSuggestionProvider(state: SearchFragmentState): SearchSuggestionProvider? {
|
private fun getSelectedSearchSuggestionProvider(state: SearchFragmentState): SearchSuggestionProvider? {
|
||||||
return when (state.searchEngineSource) {
|
return when (state.searchEngineSource) {
|
||||||
|
|
|
@ -4,40 +4,42 @@
|
||||||
|
|
||||||
package org.mozilla.fenix.browser.browsingmode
|
package org.mozilla.fenix.browser.browsingmode
|
||||||
|
|
||||||
import io.mockk.MockKAnnotations
|
import mozilla.components.support.test.any
|
||||||
import io.mockk.impl.annotations.MockK
|
import mozilla.components.support.test.mock
|
||||||
import io.mockk.verify
|
|
||||||
import org.junit.Assert.assertEquals
|
import org.junit.Assert.assertEquals
|
||||||
import org.junit.Before
|
import org.junit.Before
|
||||||
import org.junit.Test
|
import org.junit.Test
|
||||||
|
import org.mockito.Mockito.times
|
||||||
|
import org.mockito.Mockito.verify
|
||||||
|
|
||||||
class DefaultBrowsingModeManagerTest {
|
class DefaultBrowsingModeManagerTest {
|
||||||
|
|
||||||
@MockK(relaxed = true) lateinit var callback: (BrowsingMode) -> Unit
|
lateinit var manager: DefaultBrowsingModeManager
|
||||||
lateinit var manager: BrowsingModeManager
|
|
||||||
|
|
||||||
private val initMode = BrowsingMode.Normal
|
private val initMode = BrowsingMode.Normal
|
||||||
|
|
||||||
@Before
|
@Before
|
||||||
fun before() {
|
fun before() {
|
||||||
MockKAnnotations.init(this)
|
manager = DefaultBrowsingModeManager(initMode)
|
||||||
manager = DefaultBrowsingModeManager(initMode, callback)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun `WHEN mode is updated THEN callback is invoked`() {
|
fun `WHEN mode is updated THEN callback is invoked`() {
|
||||||
verify(exactly = 0) { callback.invoke(any()) }
|
val browsingModeListener: BrowsingModeListener = mock()
|
||||||
|
manager.registerBrowsingModeListener(browsingModeListener)
|
||||||
|
|
||||||
|
verify(browsingModeListener, times(0)).onBrowsingModeChange(any())
|
||||||
|
|
||||||
manager.mode = BrowsingMode.Private
|
manager.mode = BrowsingMode.Private
|
||||||
manager.mode = BrowsingMode.Private
|
manager.mode = BrowsingMode.Private
|
||||||
manager.mode = BrowsingMode.Private
|
manager.mode = BrowsingMode.Private
|
||||||
|
|
||||||
verify(exactly = 3) { callback.invoke(any()) }
|
verify(browsingModeListener, times(3)).onBrowsingModeChange(any())
|
||||||
|
|
||||||
manager.mode = BrowsingMode.Normal
|
manager.mode = BrowsingMode.Normal
|
||||||
manager.mode = BrowsingMode.Normal
|
manager.mode = BrowsingMode.Normal
|
||||||
|
|
||||||
verify(exactly = 5) { callback.invoke(any()) }
|
verify(browsingModeListener, times(5)).onBrowsingModeChange(any())
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
|
|
@ -8,6 +8,7 @@ import android.content.Context
|
||||||
import io.mockk.mockk
|
import io.mockk.mockk
|
||||||
import mozilla.components.support.test.mock
|
import mozilla.components.support.test.mock
|
||||||
import org.mockito.Mockito.`when`
|
import org.mockito.Mockito.`when`
|
||||||
|
import org.mozilla.fenix.browser.browsingmode.DefaultBrowsingModeManager
|
||||||
import org.mozilla.fenix.utils.ClipboardHandler
|
import org.mozilla.fenix.utils.ClipboardHandler
|
||||||
|
|
||||||
class TestComponents(private val context: Context) : Components(context) {
|
class TestComponents(private val context: Context) : Components(context) {
|
||||||
|
@ -38,5 +39,7 @@ class TestComponents(private val context: Context) : Components(context) {
|
||||||
}
|
}
|
||||||
override val analytics by lazy { Analytics(context) }
|
override val analytics by lazy { Analytics(context) }
|
||||||
|
|
||||||
|
override val browsingModeManager by lazy { DefaultBrowsingModeManager() }
|
||||||
|
|
||||||
override val clipboardHandler by lazy { ClipboardHandler(context) }
|
override val clipboardHandler by lazy { ClipboardHandler(context) }
|
||||||
}
|
}
|
||||||
|
|
|
@ -8,6 +8,7 @@ import android.content.Intent
|
||||||
import androidx.core.net.toUri
|
import androidx.core.net.toUri
|
||||||
import androidx.navigation.NavController
|
import androidx.navigation.NavController
|
||||||
import io.mockk.Called
|
import io.mockk.Called
|
||||||
|
import io.mockk.every
|
||||||
import io.mockk.mockk
|
import io.mockk.mockk
|
||||||
import io.mockk.verify
|
import io.mockk.verify
|
||||||
import org.junit.Assert.assertFalse
|
import org.junit.Assert.assertFalse
|
||||||
|
@ -20,6 +21,8 @@ import org.mozilla.fenix.HomeActivity
|
||||||
import org.mozilla.fenix.NavGraphDirections
|
import org.mozilla.fenix.NavGraphDirections
|
||||||
import org.mozilla.fenix.TestApplication
|
import org.mozilla.fenix.TestApplication
|
||||||
import org.mozilla.fenix.browser.browsingmode.BrowsingMode
|
import org.mozilla.fenix.browser.browsingmode.BrowsingMode
|
||||||
|
import org.mozilla.fenix.browser.browsingmode.DefaultBrowsingModeManager
|
||||||
|
import org.mozilla.fenix.ext.components
|
||||||
import org.robolectric.RobolectricTestRunner
|
import org.robolectric.RobolectricTestRunner
|
||||||
import org.robolectric.annotation.Config
|
import org.robolectric.annotation.Config
|
||||||
|
|
||||||
|
@ -114,9 +117,12 @@ class DeepLinkIntentProcessorTest {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun `process enable_private_browsing deep link`() {
|
fun `process enable_private_browsing deep link`() {
|
||||||
|
val browsingModeManager: DefaultBrowsingModeManager = mockk(relaxed = true)
|
||||||
|
every { activity.components.browsingModeManager } returns browsingModeManager
|
||||||
|
|
||||||
assertTrue(processor.process(testIntent("fenix://enable_private_browsing"), navController, out))
|
assertTrue(processor.process(testIntent("fenix://enable_private_browsing"), navController, out))
|
||||||
|
|
||||||
verify { activity.browsingModeManager.mode = BrowsingMode.Private }
|
verify { browsingModeManager.mode = BrowsingMode.Private }
|
||||||
verify { navController.navigate(NavGraphDirections.actionGlobalHomeFragment()) }
|
verify { navController.navigate(NavGraphDirections.actionGlobalHomeFragment()) }
|
||||||
verify { out wasNot Called }
|
verify { out wasNot Called }
|
||||||
}
|
}
|
||||||
|
|
|
@ -109,16 +109,16 @@ class BookmarkControllerTest {
|
||||||
@Test
|
@Test
|
||||||
fun `handleBookmarkTapped should respect browsing mode`() {
|
fun `handleBookmarkTapped should respect browsing mode`() {
|
||||||
// if in normal mode, should be in normal mode
|
// if in normal mode, should be in normal mode
|
||||||
every { homeActivity.browsingModeManager.mode } returns BrowsingMode.Normal
|
every { context.components.browsingModeManager.mode } returns BrowsingMode.Normal
|
||||||
|
|
||||||
controller.handleBookmarkTapped(item)
|
controller.handleBookmarkTapped(item)
|
||||||
assertEquals(BrowsingMode.Normal, homeActivity.browsingModeManager.mode)
|
assertEquals(BrowsingMode.Normal, context.components.browsingModeManager.mode)
|
||||||
|
|
||||||
// if in private mode, should be in private mode
|
// if in private mode, should be in private mode
|
||||||
every { homeActivity.browsingModeManager.mode } returns BrowsingMode.Private
|
every { context.components.browsingModeManager.mode } returns BrowsingMode.Private
|
||||||
|
|
||||||
controller.handleBookmarkTapped(item)
|
controller.handleBookmarkTapped(item)
|
||||||
assertEquals(BrowsingMode.Private, homeActivity.browsingModeManager.mode)
|
assertEquals(BrowsingMode.Private, context.components.browsingModeManager.mode)
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
@ -204,7 +204,7 @@ class BookmarkControllerTest {
|
||||||
|
|
||||||
verifyOrder {
|
verifyOrder {
|
||||||
invokePendingDeletion.invoke()
|
invokePendingDeletion.invoke()
|
||||||
homeActivity.browsingModeManager.mode = BrowsingMode.Normal
|
homeActivity.components.browsingModeManager.mode = BrowsingMode.Normal
|
||||||
homeActivity.openToBrowserAndLoad(item.url!!, true, BrowserDirection.FromBookmarks)
|
homeActivity.openToBrowserAndLoad(item.url!!, true, BrowserDirection.FromBookmarks)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -215,7 +215,7 @@ class BookmarkControllerTest {
|
||||||
|
|
||||||
verifyOrder {
|
verifyOrder {
|
||||||
invokePendingDeletion.invoke()
|
invokePendingDeletion.invoke()
|
||||||
homeActivity.browsingModeManager.mode = BrowsingMode.Private
|
homeActivity.components.browsingModeManager.mode = BrowsingMode.Private
|
||||||
homeActivity.openToBrowserAndLoad(item.url!!, true, BrowserDirection.FromBookmarks)
|
homeActivity.openToBrowserAndLoad(item.url!!, true, BrowserDirection.FromBookmarks)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -24,8 +24,10 @@ import org.mozilla.fenix.BrowserDirection
|
||||||
import org.mozilla.fenix.FenixApplication
|
import org.mozilla.fenix.FenixApplication
|
||||||
import org.mozilla.fenix.HomeActivity
|
import org.mozilla.fenix.HomeActivity
|
||||||
import org.mozilla.fenix.TestApplication
|
import org.mozilla.fenix.TestApplication
|
||||||
|
import org.mozilla.fenix.browser.browsingmode.DefaultBrowsingModeManager
|
||||||
import org.mozilla.fenix.components.metrics.Event
|
import org.mozilla.fenix.components.metrics.Event
|
||||||
import org.mozilla.fenix.components.searchengine.CustomSearchEngineStore.PREF_FILE_SEARCH_ENGINES
|
import org.mozilla.fenix.components.searchengine.CustomSearchEngineStore.PREF_FILE_SEARCH_ENGINES
|
||||||
|
import org.mozilla.fenix.ext.components
|
||||||
import org.mozilla.fenix.ext.metrics
|
import org.mozilla.fenix.ext.metrics
|
||||||
import org.mozilla.fenix.ext.searchEngineManager
|
import org.mozilla.fenix.ext.searchEngineManager
|
||||||
import org.mozilla.fenix.ext.settings
|
import org.mozilla.fenix.ext.settings
|
||||||
|
@ -108,6 +110,9 @@ class SearchInteractorTest {
|
||||||
val context: HomeActivity = mockk(relaxed = true)
|
val context: HomeActivity = mockk(relaxed = true)
|
||||||
val settings = testContext.settings().apply { testContext.settings().clear() }
|
val settings = testContext.settings().apply { testContext.settings().clear() }
|
||||||
|
|
||||||
|
val browsingModeManager: DefaultBrowsingModeManager = mockk(relaxed = true)
|
||||||
|
every { context.components.browsingModeManager } returns browsingModeManager
|
||||||
|
|
||||||
mockkObject(Settings)
|
mockkObject(Settings)
|
||||||
every { Settings.getInstance(context = context) } returns settings
|
every { Settings.getInstance(context = context) } returns settings
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue