[fenix] Bug 1813596 - Resolve CheckForFormDataException RuntimeException and add Crash Reporting

pull/600/head
Cathy Lu 1 year ago committed by mergify[bot]
parent ad658efd6d
commit 82595cecd4

@ -240,7 +240,7 @@ class Core(
RecentlyClosedMiddleware(recentlyClosedTabsStorage, RECENTLY_CLOSED_MAX), RecentlyClosedMiddleware(recentlyClosedTabsStorage, RECENTLY_CLOSED_MAX),
DownloadMiddleware(context, DownloadService::class.java), DownloadMiddleware(context, DownloadService::class.java),
ReaderViewMiddleware(), ReaderViewMiddleware(),
TelemetryMiddleware(context.settings(), metrics), TelemetryMiddleware(context.settings(), metrics, crashReporter),
ThumbnailsMiddleware(thumbnailStorage), ThumbnailsMiddleware(thumbnailStorage),
UndoMiddleware(context.getUndoDelay()), UndoMiddleware(context.getUndoDelay()),
RegionMiddleware(context, locationService), RegionMiddleware(context, locationService),

@ -15,11 +15,13 @@ import mozilla.components.browser.state.selector.normalTabs
import mozilla.components.browser.state.state.BrowserState import mozilla.components.browser.state.state.BrowserState
import mozilla.components.browser.state.state.EngineState import mozilla.components.browser.state.state.EngineState
import mozilla.components.browser.state.state.SessionState import mozilla.components.browser.state.state.SessionState
import mozilla.components.concept.base.crash.CrashReporting
import mozilla.components.lib.state.Middleware import mozilla.components.lib.state.Middleware
import mozilla.components.lib.state.MiddlewareContext import mozilla.components.lib.state.MiddlewareContext
import mozilla.components.support.base.android.Clock import mozilla.components.support.base.android.Clock
import mozilla.components.support.base.log.logger.Logger import mozilla.components.support.base.log.logger.Logger
import mozilla.telemetry.glean.private.NoExtras import mozilla.telemetry.glean.private.NoExtras
import org.mozilla.fenix.Config
import org.mozilla.fenix.GleanMetrics.Events import org.mozilla.fenix.GleanMetrics.Events
import org.mozilla.fenix.GleanMetrics.Metrics import org.mozilla.fenix.GleanMetrics.Metrics
import org.mozilla.fenix.components.metrics.MetricController import org.mozilla.fenix.components.metrics.MetricController
@ -35,6 +37,7 @@ import org.mozilla.fenix.GleanMetrics.EngineTab as EngineMetrics
class TelemetryMiddleware( class TelemetryMiddleware(
private val settings: Settings, private val settings: Settings,
private val metrics: MetricController, private val metrics: MetricController,
private val crashReporting: CrashReporting? = null,
) : Middleware<BrowserState, BrowserAction> { ) : Middleware<BrowserState, BrowserAction> {
private val logger = Logger("TelemetryMiddleware") private val logger = Logger("TelemetryMiddleware")
@ -62,6 +65,10 @@ class TelemetryMiddleware(
} }
is ContentAction.CheckForFormDataExceptionAction -> { is ContentAction.CheckForFormDataExceptionAction -> {
Events.formDataFailure.record(NoExtras()) Events.formDataFailure.record(NoExtras())
if (Config.channel.isNightlyOrDebug) {
crashReporting?.submitCaughtException(action.throwable)
}
return
} }
else -> { else -> {
// no-op // no-op

@ -35,6 +35,7 @@ import org.mozilla.fenix.GleanMetrics.Metrics
import org.mozilla.fenix.components.metrics.MetricController import org.mozilla.fenix.components.metrics.MetricController
import org.mozilla.fenix.helpers.FenixRobolectricTestRunner import org.mozilla.fenix.helpers.FenixRobolectricTestRunner
import org.mozilla.fenix.utils.Settings import org.mozilla.fenix.utils.Settings
import org.robolectric.shadows.ShadowLooper
import org.mozilla.fenix.GleanMetrics.EngineTab as EngineMetrics import org.mozilla.fenix.GleanMetrics.EngineTab as EngineMetrics
@RunWith(FenixRobolectricTestRunner::class) @RunWith(FenixRobolectricTestRunner::class)
@ -359,6 +360,9 @@ class TelemetryMiddlewareTest {
ContentAction.CheckForFormDataExceptionAction("1", RuntimeException("session form data request failed")), ContentAction.CheckForFormDataExceptionAction("1", RuntimeException("session form data request failed")),
).joinBlocking() ).joinBlocking()
// Wait for the main looper to process the re-thrown exception.
ShadowLooper.idleMainLooper()
assertNotNull(Events.formDataFailure.testGetValue()) assertNotNull(Events.formDataFailure.testGetValue())
} }
} }

Loading…
Cancel
Save