From 82595cecd4782a25909ace9f1c8acc178709a963 Mon Sep 17 00:00:00 2001 From: Cathy Lu Date: Mon, 30 Jan 2023 12:44:35 -0600 Subject: [PATCH] [fenix] Bug 1813596 - Resolve CheckForFormDataException RuntimeException and add Crash Reporting --- app/src/main/java/org/mozilla/fenix/components/Core.kt | 2 +- .../org/mozilla/fenix/telemetry/TelemetryMiddleware.kt | 7 +++++++ .../org/mozilla/fenix/telemetry/TelemetryMiddlewareTest.kt | 4 ++++ 3 files changed, 12 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/org/mozilla/fenix/components/Core.kt b/app/src/main/java/org/mozilla/fenix/components/Core.kt index 20115723a..e1fb4c40f 100644 --- a/app/src/main/java/org/mozilla/fenix/components/Core.kt +++ b/app/src/main/java/org/mozilla/fenix/components/Core.kt @@ -240,7 +240,7 @@ class Core( RecentlyClosedMiddleware(recentlyClosedTabsStorage, RECENTLY_CLOSED_MAX), DownloadMiddleware(context, DownloadService::class.java), ReaderViewMiddleware(), - TelemetryMiddleware(context.settings(), metrics), + TelemetryMiddleware(context.settings(), metrics, crashReporter), ThumbnailsMiddleware(thumbnailStorage), UndoMiddleware(context.getUndoDelay()), RegionMiddleware(context, locationService), diff --git a/app/src/main/java/org/mozilla/fenix/telemetry/TelemetryMiddleware.kt b/app/src/main/java/org/mozilla/fenix/telemetry/TelemetryMiddleware.kt index 046f078ba..16edcbac4 100644 --- a/app/src/main/java/org/mozilla/fenix/telemetry/TelemetryMiddleware.kt +++ b/app/src/main/java/org/mozilla/fenix/telemetry/TelemetryMiddleware.kt @@ -15,11 +15,13 @@ import mozilla.components.browser.state.selector.normalTabs import mozilla.components.browser.state.state.BrowserState import mozilla.components.browser.state.state.EngineState 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.MiddlewareContext import mozilla.components.support.base.android.Clock import mozilla.components.support.base.log.logger.Logger import mozilla.telemetry.glean.private.NoExtras +import org.mozilla.fenix.Config import org.mozilla.fenix.GleanMetrics.Events import org.mozilla.fenix.GleanMetrics.Metrics import org.mozilla.fenix.components.metrics.MetricController @@ -35,6 +37,7 @@ import org.mozilla.fenix.GleanMetrics.EngineTab as EngineMetrics class TelemetryMiddleware( private val settings: Settings, private val metrics: MetricController, + private val crashReporting: CrashReporting? = null, ) : Middleware { private val logger = Logger("TelemetryMiddleware") @@ -62,6 +65,10 @@ class TelemetryMiddleware( } is ContentAction.CheckForFormDataExceptionAction -> { Events.formDataFailure.record(NoExtras()) + if (Config.channel.isNightlyOrDebug) { + crashReporting?.submitCaughtException(action.throwable) + } + return } else -> { // no-op diff --git a/app/src/test/java/org/mozilla/fenix/telemetry/TelemetryMiddlewareTest.kt b/app/src/test/java/org/mozilla/fenix/telemetry/TelemetryMiddlewareTest.kt index 4eadfa202..67ed6d7fd 100644 --- a/app/src/test/java/org/mozilla/fenix/telemetry/TelemetryMiddlewareTest.kt +++ b/app/src/test/java/org/mozilla/fenix/telemetry/TelemetryMiddlewareTest.kt @@ -35,6 +35,7 @@ import org.mozilla.fenix.GleanMetrics.Metrics import org.mozilla.fenix.components.metrics.MetricController import org.mozilla.fenix.helpers.FenixRobolectricTestRunner import org.mozilla.fenix.utils.Settings +import org.robolectric.shadows.ShadowLooper import org.mozilla.fenix.GleanMetrics.EngineTab as EngineMetrics @RunWith(FenixRobolectricTestRunner::class) @@ -359,6 +360,9 @@ class TelemetryMiddlewareTest { ContentAction.CheckForFormDataExceptionAction("1", RuntimeException("session form data request failed")), ).joinBlocking() + // Wait for the main looper to process the re-thrown exception. + ShadowLooper.idleMainLooper() + assertNotNull(Events.formDataFailure.testGetValue()) } }