Skip to content

Commit 05d8a34

Browse files
committed
Add a reload lock
1 parent 3cb2e0b commit 05d8a34

File tree

2 files changed

+20
-16
lines changed

2 files changed

+20
-16
lines changed

app/src/androidTest/java/com/duckduckgo/app/httpsupgrade/HttpsUpgraderTest.kt

Lines changed: 1 addition & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -16,29 +16,18 @@
1616

1717
package com.duckduckgo.app.httpsupgrade
1818

19-
import android.arch.core.executor.testing.InstantTaskExecutorRule
2019
import android.net.Uri
21-
import com.duckduckgo.app.InstantSchedulersRule
2220
import com.duckduckgo.app.httpsupgrade.api.HttpsBloomFilterFactory
2321
import com.duckduckgo.app.httpsupgrade.db.HttpsWhitelistDao
2422
import com.nhaarman.mockito_kotlin.mock
2523
import com.nhaarman.mockito_kotlin.whenever
2624
import org.junit.Assert.assertFalse
2725
import org.junit.Assert.assertTrue
2826
import org.junit.Before
29-
import org.junit.Rule
3027
import org.junit.Test
3128

3229
class HttpsUpgraderTest {
3330

34-
@get:Rule
35-
@Suppress("unused")
36-
var instantTaskExecutorRule = InstantTaskExecutorRule()
37-
38-
@get:Rule
39-
@Suppress("unused")
40-
val schedulers = InstantSchedulersRule()
41-
4231
lateinit var testee: HttpsUpgrader
4332

4433
private var mockHttpsBloomFilterFactory: HttpsBloomFilterFactory = mock()
@@ -49,6 +38,7 @@ class HttpsUpgraderTest {
4938
fun before() {
5039
whenever(mockHttpsBloomFilterFactory.create()).thenReturn(bloomFilter)
5140
testee = HttpsUpgraderImpl(mockWhitelistDao, mockHttpsBloomFilterFactory)
41+
testee.reloadData()
5242
}
5343

5444
@Test

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

Lines changed: 19 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,8 @@ import com.duckduckgo.app.global.isHttps
2323
import com.duckduckgo.app.httpsupgrade.api.HttpsBloomFilterFactory
2424
import com.duckduckgo.app.httpsupgrade.db.HttpsWhitelistDao
2525
import timber.log.Timber
26+
import java.util.concurrent.locks.ReentrantLock
27+
import kotlin.concurrent.thread
2628

2729
interface HttpsUpgrader {
2830

@@ -42,8 +44,13 @@ class HttpsUpgraderImpl(
4244
) : HttpsUpgrader {
4345

4446
private var httpsBloomFilter: BloomFilter? = null
45-
private var dataLoaded = false
47+
private val reloadLock = ReentrantLock()
4648

49+
init {
50+
thread {
51+
reloadData()
52+
}
53+
}
4754

4855
@WorkerThread
4956
override fun shouldUpgrade(uri: Uri): Boolean {
@@ -52,9 +59,7 @@ class HttpsUpgraderImpl(
5259
return false
5360
}
5461

55-
if (!dataLoaded) {
56-
reloadData()
57-
}
62+
waitForAnyReloadsToComplete()
5863

5964
val host = uri.host
6065
if (whitelistedDao.contains(host)) {
@@ -75,9 +80,18 @@ class HttpsUpgraderImpl(
7580
return false
7681
}
7782

83+
private fun waitForAnyReloadsToComplete() {
84+
// wait for lock (by locking and unlocking) before continuing
85+
if (reloadLock.isLocked) {
86+
reloadLock.lock()
87+
reloadLock.unlock()
88+
}
89+
}
90+
7891
override fun reloadData() {
79-
dataLoaded = true
92+
reloadLock.lock()
8093
httpsBloomFilter = bloomFactory.create()
94+
reloadLock.unlock()
8195
}
8296

8397
companion object {

0 commit comments

Comments
 (0)