1414 * limitations under the License.
1515 */
1616
17- package com.duckduckgo.browsermode.impl
17+ package com.duckduckgo.app.browser.mode
1818
1919import android.annotation.SuppressLint
2020import android.webkit.WebStorage
@@ -23,18 +23,35 @@ import androidx.webkit.ProfileStore
2323import com.duckduckgo.browsermode.api.BrowserMode
2424import com.duckduckgo.browsermode.api.BrowserModeDataProvider
2525import com.duckduckgo.browsermode.api.FireModeAvailability
26+ import com.duckduckgo.browsermode.api.profileName
2627import com.duckduckgo.di.scopes.AppScope
28+ import com.squareup.anvil.annotations.ContributesTo
29+ import dagger.Binds
30+ import dagger.Module
2731import dagger.SingleInstanceIn
2832import javax.inject.Inject
2933
34+ /* *
35+ * Resolves a per-mode [WebStorage]. Callers must invoke [forMode] on the main thread when
36+ * `MULTI_PROFILE` is supported on the device — `ProfileStore` is tied to the WebView thread.
37+ * Falls back to the default shared [WebStorage] when MultiProfile is unsupported.
38+ */
3039@SuppressLint(" RequiresFeature" )
3140@SingleInstanceIn(AppScope ::class )
3241class WebStorageProvider @Inject constructor(
3342 private val fireModeAvailability : FireModeAvailability ,
3443) : BrowserModeDataProvider<WebStorage> {
44+
3545 @UiThread
3646 override fun forMode (mode : BrowserMode ): WebStorage {
3747 if (! fireModeAvailability.isAvailable()) return WebStorage .getInstance()
3848 return ProfileStore .getInstance().getOrCreateProfile(mode.profileName).webStorage
3949 }
4050}
51+
52+ @ContributesTo(AppScope ::class )
53+ @Module
54+ abstract class WebStorageProviderModule {
55+ @Binds
56+ abstract fun bindWebStorageProvider (impl : WebStorageProvider ): BrowserModeDataProvider <WebStorage >
57+ }
0 commit comments