Skip to content

Commit

Permalink
Merge pull request #20533 from wordpress-mobile/task/addWebViewVersio…
Browse files Browse the repository at this point in the history
…nInSentry

Adds Webview version in Sentry crash logging
  • Loading branch information
Antonis Lilis authored Mar 27, 2024
2 parents 7ff5847 + fb90630 commit 93b8a22
Show file tree
Hide file tree
Showing 3 changed files with 34 additions and 3 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import com.automattic.android.tracks.crashlogging.EventLevel
import com.automattic.android.tracks.crashlogging.ExtraKnownKey
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.flowOf
import kotlinx.coroutines.launch
import org.greenrobot.eventbus.Subscribe
import org.greenrobot.eventbus.ThreadMode
Expand All @@ -33,6 +34,7 @@ class WPCrashLoggingDataProvider @Inject constructor(
private val localeManager: LocaleManagerWrapper,
private val encryptedLogging: EncryptedLogging,
private val logFileProvider: LogFileProviderWrapper,
private val webviewVersionProvider: WebviewVersionProvider,
private val buildConfig: BuildConfigWrapper,
@Named(APPLICATION_SCOPE) private val appScope: CoroutineScope,
wpPerformanceMonitoringConfig: WPPerformanceMonitoringConfig,
Expand All @@ -49,7 +51,7 @@ class WPCrashLoggingDataProvider @Inject constructor(
override val releaseName: String = BuildConfig.VERSION_NAME
override val sentryDSN: String = BuildConfig.SENTRY_DSN

override val applicationContextProvider = MutableStateFlow<Map<String, String>>(emptyMap())
override val applicationContextProvider = flowOf(mapOf(WEBVIEW_VERSION to webviewVersionProvider.getVersion()))

override fun crashLoggingEnabled(): Boolean {
if (buildConfig.isDebug()) {
Expand Down Expand Up @@ -135,6 +137,7 @@ class WPCrashLoggingDataProvider @Inject constructor(

companion object {
const val EXTRA_UUID = "uuid"
const val WEBVIEW_VERSION = "webview.version"
const val EVENT_BUS_MODULE = "org.greenrobot.eventbus"
const val EVENT_BUS_EXCEPTION = "EventBusException"
const val EVENT_BUS_INVOKING_SUBSCRIBER_FAILED_ERROR = "Invoking subscriber failed"
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package org.wordpress.android.util.crashlogging

import android.content.pm.PackageManager.NameNotFoundException
import org.wordpress.android.util.publicdata.PackageManagerWrapper
import javax.inject.Inject

class WebviewVersionProvider @Inject constructor(private val packageManager: PackageManagerWrapper) {
private val webviewPackageName = "com.google.android.webview"
private val unknownVersion = "unknown"

@Suppress("SwallowedException")
fun getVersion(): String = try {
packageManager.getPackageInfo(webviewPackageName, 0)?.versionName ?: unknownVersion
} catch (e: NameNotFoundException) {
unknownVersion
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ import org.wordpress.android.util.crashlogging.WPCrashLoggingDataProvider.Compan
import org.wordpress.android.util.crashlogging.WPCrashLoggingDataProvider.Companion.EVENT_BUS_INVOKING_SUBSCRIBER_FAILED_ERROR
import org.wordpress.android.util.crashlogging.WPCrashLoggingDataProvider.Companion.EVENT_BUS_MODULE
import org.wordpress.android.util.crashlogging.WPCrashLoggingDataProvider.Companion.EXTRA_UUID
import org.wordpress.android.util.crashlogging.WPCrashLoggingDataProvider.Companion.WEBVIEW_VERSION
import org.wordpress.android.viewmodel.ResourceProvider
import java.io.File
import java.util.Locale
Expand Down Expand Up @@ -59,20 +60,23 @@ class WPCrashLoggingDataProviderTest : BaseUnitTest() {
private val localeManager: LocaleManagerWrapper = mock()
private val buildConfig: BuildConfigWrapper = mock()
private val sharedPreferences: SharedPreferences = mock()
private val webviewVersionProvider: WebviewVersionProvider = mock()

private val wpPerformanceMonitoringConfig: WPPerformanceMonitoringConfig = mock {
on { invoke() } doReturn PerformanceMonitoringConfig.Enabled(1.0)
}

@Before
fun setUp() {
whenever(webviewVersionProvider.getVersion()).thenReturn(TEST_WEBVIEW_VERSION)
sut = WPCrashLoggingDataProvider(
sharedPreferences = sharedPreferences,
resourceProvider = resourceProvider,
accountStore = accountStore,
localeManager = localeManager,
encryptedLogging = encryptedLogging,
logFileProvider = logFileProvider,
webviewVersionProvider = webviewVersionProvider,
buildConfig = buildConfig,
appScope = testScope(),
wpPerformanceMonitoringConfig = wpPerformanceMonitoringConfig,
Expand Down Expand Up @@ -114,8 +118,14 @@ class WPCrashLoggingDataProviderTest : BaseUnitTest() {
}

@Test
fun `should provide empty application context`() = runTest {
assertThat(sut.applicationContextProvider.first()).isEmpty()
fun `should provide an application context of size 1`() = runTest {
assertThat(sut.applicationContextProvider.first().size).isEqualTo(1)
}

@Test
fun `should provide the webview version in the application context`() = runTest {
val expected = mapOf(WEBVIEW_VERSION to TEST_WEBVIEW_VERSION)
assertThat(sut.applicationContextProvider.first()).containsAllEntriesOf(expected)
}

@Test
Expand Down Expand Up @@ -199,6 +209,7 @@ class WPCrashLoggingDataProviderTest : BaseUnitTest() {
}

const val TEST_UUID = "test uuid"
const val TEST_WEBVIEW_VERSION = "123"
const val SEND_CRASH_SAMPLE_KEY = "send_crash"
}
}

0 comments on commit 93b8a22

Please sign in to comment.