Skip to content

Commit d88e5ae

Browse files
authored
Ensure LevelDB Iterator is closed (#5458)
Task/Issue URL: https://app.asana.com/0/1200204095367872/1209128100809324/f ### Description - Closes the `DBIterator` after local storage has been cleared. - Also keeps the DB open and updates the DB initialization to be `Lazy`. ### Steps to test this PR _Filter logcat by WebLocalStorageManager_ - [x] Visit cnn.com - [x] Use the fire button - [x] Verify that cnn.com entries are deleted
1 parent 4b3fb20 commit d88e5ae

File tree

2 files changed

+8
-8
lines changed

2 files changed

+8
-8
lines changed

app/src/main/java/com/duckduckgo/app/browser/weblocalstorage/WebLocalStorageManager.kt

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,13 +21,13 @@ import com.duckduckgo.app.pixels.remoteconfig.AndroidBrowserConfigFeature
2121
import com.duckduckgo.di.scopes.AppScope
2222
import com.squareup.anvil.annotations.ContributesBinding
2323
import com.squareup.anvil.annotations.ContributesTo
24+
import dagger.Lazy
2425
import dagger.Module
2526
import dagger.Provides
2627
import dagger.SingleInstanceIn
2728
import java.io.File
2829
import java.nio.charset.StandardCharsets
2930
import javax.inject.Inject
30-
import javax.inject.Provider
3131
import kotlinx.coroutines.runBlocking
3232
import org.iq80.leveldb.DB
3333
import org.iq80.leveldb.Options
@@ -40,7 +40,7 @@ interface WebLocalStorageManager {
4040

4141
@ContributesBinding(AppScope::class)
4242
class DuckDuckGoWebLocalStorageManager @Inject constructor(
43-
private val databaseProvider: Provider<DB>,
43+
private val databaseProvider: Lazy<DB>,
4444
private val androidBrowserConfigFeature: AndroidBrowserConfigFeature,
4545
private val webLocalStorageSettingsJsonParser: WebLocalStorageSettingsJsonParser,
4646
) : WebLocalStorageManager {
@@ -58,8 +58,8 @@ class DuckDuckGoWebLocalStorageManager @Inject constructor(
5858
Timber.d("WebLocalStorageManager: Allowed domains: $domains")
5959
Timber.d("WebLocalStorageManager: Matching regex: $matchingRegex")
6060

61-
databaseProvider.get().use { db ->
62-
val iterator = db.iterator()
61+
val db = databaseProvider.get()
62+
db.iterator().use { iterator ->
6363
iterator.seekToFirst()
6464

6565
while (iterator.hasNext()) {

app/src/test/java/com/duckduckgo/app/browser/DuckDuckGoWebLocalStorageManagerTest.kt

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ import com.duckduckgo.app.browser.weblocalstorage.WebLocalStorageSettings
2323
import com.duckduckgo.app.browser.weblocalstorage.WebLocalStorageSettingsJsonParser
2424
import com.duckduckgo.app.pixels.remoteconfig.AndroidBrowserConfigFeature
2525
import com.duckduckgo.feature.toggles.api.Toggle
26-
import javax.inject.Provider
26+
import dagger.Lazy
2727
import kotlinx.coroutines.test.runTest
2828
import org.iq80.leveldb.DB
2929
import org.iq80.leveldb.DBIterator
@@ -39,7 +39,7 @@ class DuckDuckGoWebLocalStorageManagerTest {
3939

4040
private val mockDB: DB = mock()
4141
private val mockIterator: DBIterator = mock()
42-
private val mockDatabaseProvider: Provider<DB> = mock()
42+
private val mockDatabaseProvider: Lazy<DB> = mock()
4343
private val mockWebLocalStorageSettingsJsonParser: WebLocalStorageSettingsJsonParser = mock()
4444
private val mockAndroidBrowserConfigFeature: AndroidBrowserConfigFeature = mock()
4545
private val mockToggle: Toggle = mock()
@@ -152,13 +152,13 @@ class DuckDuckGoWebLocalStorageManagerTest {
152152
}
153153

154154
@Test
155-
fun whenClearWebLocalStorageThenDBIsClosed() {
155+
fun whenClearWebLocalStorageThenIteratorIsClosed() {
156156
whenever(mockDB.iterator()).thenReturn(mockIterator)
157157
whenever(mockIterator.hasNext()).thenReturn(false)
158158

159159
testee.clearWebLocalStorage()
160160

161-
verify(mockDB).close()
161+
verify(mockIterator).close()
162162
}
163163

164164
private fun createMockDBEntry(key: ByteArray): MutableMap.MutableEntry<ByteArray, ByteArray> {

0 commit comments

Comments
 (0)