8000 Mitigate UnsatisfiedLinkError crash (#1858) · xpcom-bsd/Android-1@dc00361 · GitHub
[go: up one dir, main page]

Skip to content

Commit dc00361

Browse files
authored
Mitigate UnsatisfiedLinkError crash (duckduckgo#1858)
Task/Issue URL: https://app.asana.com/0/414730916066338/1201965674208884/f ### Description `try...catch` the bloom filter creation to avoid the crash spikes we're seeing. ### Steps to test this PR - [x] Install from this branch - [x] Test that HTTPS upgrade continues to work normally - [x] Change the code so it throws an exception when then bloom filter is created - [x] Test that the app doesn't crash on launch - [x] Go to `quora.com` which is an upgradable site - [x] In the logcat you should see `quora.com is not upgradable`
1 parent 2dc31c2 commit dc00361

File tree

4 files changed

+20
-4
lines changed

4 files changed

+20
-4
lines changed

app/src/androidTest/java/com/duckduckgo/app/integration/HttpsEmbeddedDataIntegrationTest.kt

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ import com.duckduckgo.app.httpsupgrade.HttpsUpgraderImpl
2727
import com.duckduckgo.app.httpsupgrade.api.HttpsFalsePositivesJsonAdapter
2828
import com.duckduckgo.app.httpsupgrade.store.HttpsDataPersister
2929
import com.duckduckgo.app.privacy.db.UserWhitelistDao
30+
import com.duckduckgo.app.statistics.pixels.Pixel
3031
import com.duckduckgo.feature.toggles.api.FeatureToggle
3132
import com.duckduckgo.httpsupgrade.store.PlayHttpsEmbeddedDataPersister
3233
import com.duckduckgo.privacy.config.api.Https
@@ -50,6 +51,7 @@ class HttpsEmbeddedDataIntegrationTest {
5051
private var mockUserAllowlistDao: UserWhitelistDao = mock()
5152
private var mockFeatureToggle: FeatureToggle = mock()
5253
private var mockHttps: Https = mock()
54+
private var mockPixel: Pixel = mock()
5355

5456
@Before
5557
fun before() {
@@ -72,7 +74,7 @@ class HttpsEmbeddedDataIntegrationTest {
7274

7375
val embeddedDataPersister = PlayHttpsEmbeddedDataPersister(persister, binaryDataStore, httpsBloomSpecDao, context, moshi)
7476

75-
val factory = HttpsBloomFilterFactoryImpl(httpsBloomSpecDao, binaryDataStore, embeddedDataPersister, persister)
77+
val factory = HttpsBloomFilterFactoryImpl(httpsBloomSpecDao, binaryDataStore, embeddedDataPersister, persister, mockPixel)
7678
httpsUpgrader = HttpsUpgraderImpl(factory, httpsFalsePositivesDao, mockUserAllowlistDao, mockFeatureToggle, mockHttps)
7779
httpsUpgrader.reloadData()
7880
}

app/src/androidTest/java/com/duckduckgo/app/referencetests/HttpsReferenceTest.kt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ import com.duckduckgo.app.httpsupgrade.store.HttpsDataPersister
3737
import com.duckduckgo.app.httpsupgrade.store.HttpsEmbeddedDataPersister
3838
import com.duckduckgo.app.httpsupgrade.store.HttpsFalsePositivesDao
3939
import com.duckduckgo.app.privacy.db.UserWhitelistDao
40+
import com.duckduckgo.app.statistics.pixels.Pixel
4041
import com.duckduckgo.app.trackerdetection.api.ActionJsonAdapter
4142
import com.duckduckgo.feature.toggles.api.FeatureToggle
4243
import com.duckduckgo.privacy.config.api.Https
@@ -85,6 +86,7 @@ class HttpsReferenceTest(private val testCase: TestCase) {
8586
private lateinit var https: Https
8687
private lateinit var testee: HttpsUpgrader
8788

89+
private var mockPixel: Pixel = mock()
8890
private var mockFeatureToggle: FeatureToggle = mock()
8991
private val mockHttpsRepository: HttpsRepository = mock()
9092
private val mockUnprotectedTemporaryRepository: UnprotectedTemporaryRepository = mock()
@@ -199,6 +201,7 @@ class HttpsReferenceTest(private val testCase: TestCase) {
199201
binaryDataStore,
200202
embeddedDataPersister,
201203
httpsDataPersister,
204+
mockPixel
202205
)
203206
}
204207

app/src/main/java/com/duckduckgo/app/httpsupgrade/HttpsBloomFilterFactory.kt

Lines changed: 11 additions & 2 deletions
8000
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,8 @@ import com.duckduckgo.app.httpsupgrade.model.HttpsBloomFilterSpec.Companion.HTTP
2222
import com.duckduckgo.app.httpsupgrade.store.HttpsBloomFilterSpecDao
2323
import com.duckduckgo.app.httpsupgrade.store.HttpsEmbeddedDataPersister
2424
import com.duckduckgo.app.httpsupgrade.store.HttpsDataPersister
25+
import com.duckduckgo.app.pixels.AppPixelName
26+
import com.duckduckgo.app.statistics.pixels.Pixel
2527
import com.duckduckgo.di.scopes.AppScope
2628
import com.squareup.anvil.annotations.ContributesBinding
2729
import timber.log.Timber
@@ -36,7 +38,8 @@ class HttpsBloomFilterFactoryImpl @Inject constructor(
3638
private val dao: HttpsBloomFilterSpecDao,
3739
private val binaryDataStore: BinaryDataStore,
3840
private val httpsEmbeddedDataPersister: HttpsEmbeddedDataPersister,
39-
private val httpsDataPersister: HttpsDataPersister
41+
private val httpsDataPersister: HttpsDataPersister,
42+
private val pixel: Pixel,
4043
) : HttpsBloomFilterFactory {
4144

4245
@WorkerThread
@@ -56,7 +59,13 @@ class HttpsBloomFilterFactoryImpl @Inject constructor(
5659

5760
val initialTimestamp = System.currentTimeMillis()
5861
Timber.d("Found https data at $dataPath, building filter")
59-
val bloomFilter = BloomFilter(dataPath, specification.bitCount, specification.totalEntries)
62+
val bloomFilter = try {
63+
BloomFilter(dataPath, specification.bitCount, specification.totalEntries)
64+
} catch (t: Throwable) {
65+
Timber.e(t, "Error creating the bloom filter")
66+
pixel.fire(AppPixelName.CREATE_BLOOM_FILTER_ERROR)
67+
null
68+
}
6069
Timber.v("Loading took ${System.currentTimeMillis() - initialTimestamp}ms")
6170

6271
return bloomFilter

app/src/main/java/com/duckduckgo/app/pixels/AppPixelName.kt

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -257,5 +257,7 @@ enum class AppPixelName(override val pixelName: String) : Pixel.PixelName {
257257
REMOTE_MESSAGE_SHOWN("m_remote_message_shown"),
258258
REMOTE_MESSAGE_SHOWN_UNIQUE("m_remote_message_shown_unique"),
259259
REMOTE_MESSAGE_PRIMARY_ACTION_CLICKED("m_remote_message_primary_action_clicked"),
260-
REMOTE_MESSAGE_SECONDARY_ACTION_CLICKED("m_remote_message_secondary_action_clicked")
260+
REMOTE_MESSAGE_SECONDARY_ACTION_CLICKED("m_remote_message_secondary_action_clicked"),
261+
262+
CREATE_BLOOM_FILTER_ERROR("m_create_bloom_filter_error")
261263
}

0 commit comments

Comments
 (0)
0