|
|
@ -11,10 +11,6 @@ import android.os.Build
|
|
|
|
import android.os.StrictMode
|
|
|
|
import android.os.StrictMode
|
|
|
|
import androidx.core.content.ContextCompat
|
|
|
|
import androidx.core.content.ContextCompat
|
|
|
|
import io.sentry.Sentry
|
|
|
|
import io.sentry.Sentry
|
|
|
|
import kotlinx.coroutines.Dispatchers
|
|
|
|
|
|
|
|
import kotlinx.coroutines.GlobalScope
|
|
|
|
|
|
|
|
import kotlinx.coroutines.launch
|
|
|
|
|
|
|
|
import kotlinx.coroutines.withContext
|
|
|
|
|
|
|
|
import mozilla.components.browser.engine.gecko.GeckoEngine
|
|
|
|
import mozilla.components.browser.engine.gecko.GeckoEngine
|
|
|
|
import mozilla.components.browser.engine.gecko.fetch.GeckoViewFetchClient
|
|
|
|
import mozilla.components.browser.engine.gecko.fetch.GeckoViewFetchClient
|
|
|
|
import mozilla.components.browser.icons.BrowserIcons
|
|
|
|
import mozilla.components.browser.icons.BrowserIcons
|
|
|
@ -23,7 +19,6 @@ import mozilla.components.browser.session.SessionManager
|
|
|
|
import mozilla.components.browser.session.engine.EngineMiddleware
|
|
|
|
import mozilla.components.browser.session.engine.EngineMiddleware
|
|
|
|
import mozilla.components.browser.session.storage.SessionStorage
|
|
|
|
import mozilla.components.browser.session.storage.SessionStorage
|
|
|
|
import mozilla.components.browser.session.undo.UndoMiddleware
|
|
|
|
import mozilla.components.browser.session.undo.UndoMiddleware
|
|
|
|
import mozilla.components.browser.state.action.RestoreCompleteAction
|
|
|
|
|
|
|
|
import mozilla.components.browser.state.state.BrowserState
|
|
|
|
import mozilla.components.browser.state.state.BrowserState
|
|
|
|
import mozilla.components.browser.state.store.BrowserStore
|
|
|
|
import mozilla.components.browser.state.store.BrowserStore
|
|
|
|
import mozilla.components.browser.storage.sync.PlacesBookmarksStorage
|
|
|
|
import mozilla.components.browser.storage.sync.PlacesBookmarksStorage
|
|
|
@ -39,6 +34,8 @@ import mozilla.components.concept.fetch.Client
|
|
|
|
import mozilla.components.feature.customtabs.store.CustomTabsServiceStore
|
|
|
|
import mozilla.components.feature.customtabs.store.CustomTabsServiceStore
|
|
|
|
import mozilla.components.feature.downloads.DownloadMiddleware
|
|
|
|
import mozilla.components.feature.downloads.DownloadMiddleware
|
|
|
|
import mozilla.components.feature.logins.exceptions.LoginExceptionStorage
|
|
|
|
import mozilla.components.feature.logins.exceptions.LoginExceptionStorage
|
|
|
|
|
|
|
|
import mozilla.components.feature.media.MediaSessionFeature
|
|
|
|
|
|
|
|
import mozilla.components.feature.media.middleware.MediaMiddleware
|
|
|
|
import mozilla.components.feature.media.middleware.RecordingDevicesMiddleware
|
|
|
|
import mozilla.components.feature.media.middleware.RecordingDevicesMiddleware
|
|
|
|
import mozilla.components.feature.pwa.ManifestStorage
|
|
|
|
import mozilla.components.feature.pwa.ManifestStorage
|
|
|
|
import mozilla.components.feature.pwa.WebAppShortcutManager
|
|
|
|
import mozilla.components.feature.pwa.WebAppShortcutManager
|
|
|
@ -64,14 +61,17 @@ import mozilla.components.support.locale.LocaleManager
|
|
|
|
import org.mozilla.fenix.AppRequestInterceptor
|
|
|
|
import org.mozilla.fenix.AppRequestInterceptor
|
|
|
|
import org.mozilla.fenix.BuildConfig
|
|
|
|
import org.mozilla.fenix.BuildConfig
|
|
|
|
import org.mozilla.fenix.Config
|
|
|
|
import org.mozilla.fenix.Config
|
|
|
|
|
|
|
|
import org.mozilla.fenix.FeatureFlags.newMediaSessionApi
|
|
|
|
import org.mozilla.fenix.HomeActivity
|
|
|
|
import org.mozilla.fenix.HomeActivity
|
|
|
|
import org.mozilla.fenix.R
|
|
|
|
import org.mozilla.fenix.R
|
|
|
|
import org.mozilla.fenix.perf.StrictModeManager
|
|
|
|
|
|
|
|
import org.mozilla.fenix.TelemetryMiddleware
|
|
|
|
import org.mozilla.fenix.TelemetryMiddleware
|
|
|
|
import org.mozilla.fenix.components.search.SearchMigration
|
|
|
|
import org.mozilla.fenix.components.search.SearchMigration
|
|
|
|
import org.mozilla.fenix.downloads.DownloadService
|
|
|
|
import org.mozilla.fenix.downloads.DownloadService
|
|
|
|
import org.mozilla.fenix.ext.components
|
|
|
|
import org.mozilla.fenix.ext.components
|
|
|
|
import org.mozilla.fenix.ext.settings
|
|
|
|
import org.mozilla.fenix.ext.settings
|
|
|
|
|
|
|
|
import org.mozilla.fenix.media.MediaService
|
|
|
|
|
|
|
|
import org.mozilla.fenix.media.MediaSessionService
|
|
|
|
|
|
|
|
import org.mozilla.fenix.perf.StrictModeManager
|
|
|
|
import org.mozilla.fenix.perf.lazyMonitored
|
|
|
|
import org.mozilla.fenix.perf.lazyMonitored
|
|
|
|
import org.mozilla.fenix.search.telemetry.ads.AdsTelemetry
|
|
|
|
import org.mozilla.fenix.search.telemetry.ads.AdsTelemetry
|
|
|
|
import org.mozilla.fenix.search.telemetry.incontent.InContentTelemetry
|
|
|
|
import org.mozilla.fenix.search.telemetry.incontent.InContentTelemetry
|
|
|
@ -79,12 +79,6 @@ import org.mozilla.fenix.settings.SupportUtils
|
|
|
|
import org.mozilla.fenix.settings.advanced.getSelectedLocale
|
|
|
|
import org.mozilla.fenix.settings.advanced.getSelectedLocale
|
|
|
|
import org.mozilla.fenix.utils.Mockable
|
|
|
|
import org.mozilla.fenix.utils.Mockable
|
|
|
|
import org.mozilla.fenix.utils.getUndoDelay
|
|
|
|
import org.mozilla.fenix.utils.getUndoDelay
|
|
|
|
import java.util.concurrent.TimeUnit
|
|
|
|
|
|
|
|
import mozilla.components.feature.media.MediaSessionFeature
|
|
|
|
|
|
|
|
import mozilla.components.feature.media.middleware.MediaMiddleware
|
|
|
|
|
|
|
|
import org.mozilla.fenix.FeatureFlags.newMediaSessionApi
|
|
|
|
|
|
|
|
import org.mozilla.fenix.media.MediaService
|
|
|
|
|
|
|
|
import org.mozilla.fenix.media.MediaSessionService
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
/**
|
|
|
|
* Component group for all core browser functionality.
|
|
|
|
* Component group for all core browser functionality.
|
|
|
@ -166,7 +160,7 @@ class Core(
|
|
|
|
)
|
|
|
|
)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
private val sessionStorage: SessionStorage by lazyMonitored {
|
|
|
|
val sessionStorage: SessionStorage by lazyMonitored {
|
|
|
|
SessionStorage(context, engine = engine)
|
|
|
|
SessionStorage(context, engine = engine)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
@ -239,7 +233,7 @@ class Core(
|
|
|
|
* case all sessions/tabs are closed.
|
|
|
|
* case all sessions/tabs are closed.
|
|
|
|
*/
|
|
|
|
*/
|
|
|
|
val sessionManager by lazyMonitored {
|
|
|
|
val sessionManager by lazyMonitored {
|
|
|
|
SessionManager(engine, store).also { sessionManager ->
|
|
|
|
SessionManager(engine, store).also {
|
|
|
|
// Install the "icons" WebExtension to automatically load icons for every visited website.
|
|
|
|
// Install the "icons" WebExtension to automatically load icons for every visited website.
|
|
|
|
icons.install(engine, store)
|
|
|
|
icons.install(engine, store)
|
|
|
|
|
|
|
|
|
|
|
@ -249,40 +243,6 @@ class Core(
|
|
|
|
// Install the "cookies" WebExtension and tracks user interaction with SERPs.
|
|
|
|
// Install the "cookies" WebExtension and tracks user interaction with SERPs.
|
|
|
|
searchTelemetry.install(engine, store)
|
|
|
|
searchTelemetry.install(engine, store)
|
|
|
|
|
|
|
|
|
|
|
|
// Restore the previous state.
|
|
|
|
|
|
|
|
GlobalScope.launch(Dispatchers.Main) {
|
|
|
|
|
|
|
|
withContext(Dispatchers.IO) {
|
|
|
|
|
|
|
|
sessionStorage.restore()
|
|
|
|
|
|
|
|
}?.let { snapshot ->
|
|
|
|
|
|
|
|
sessionManager.restore(
|
|
|
|
|
|
|
|
snapshot,
|
|
|
|
|
|
|
|
updateSelection = (sessionManager.selectedSession == null)
|
|
|
|
|
|
|
|
)
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Now that we have restored our previous state (if there's one) let's setup auto saving the state while
|
|
|
|
|
|
|
|
// the app is used.
|
|
|
|
|
|
|
|
sessionStorage.autoSave(store)
|
|
|
|
|
|
|
|
.periodicallyInForeground(interval = 30, unit = TimeUnit.SECONDS)
|
|
|
|
|
|
|
|
.whenGoingToBackground()
|
|
|
|
|
|
|
|
.whenSessionsChange()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Now that we have restored our previous state (if there's one) let's remove timed out tabs
|
|
|
|
|
|
|
|
if (!context.settings().manuallyCloseTabs) {
|
|
|
|
|
|
|
|
store.state.tabs.filter {
|
|
|
|
|
|
|
|
(System.currentTimeMillis() - it.lastAccess) > context.settings()
|
|
|
|
|
|
|
|
.getTabTimeout()
|
|
|
|
|
|
|
|
}.forEach {
|
|
|
|
|
|
|
|
val session = sessionManager.findSessionById(it.id)
|
|
|
|
|
|
|
|
if (session != null) {
|
|
|
|
|
|
|
|
sessionManager.remove(session)
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
store.dispatch(RestoreCompleteAction)
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
WebNotificationFeature(
|
|
|
|
WebNotificationFeature(
|
|
|
|
context, engine, icons, R.drawable.ic_status_logo,
|
|
|
|
context, engine, icons, R.drawable.ic_status_logo,
|
|
|
|
permissionStorage.permissionsStorage, HomeActivity::class.java
|
|
|
|
permissionStorage.permissionsStorage, HomeActivity::class.java
|
|
|
|