From c60f3131b6ce49efc80c03f2823a16d41bb703fe Mon Sep 17 00:00:00 2001 From: David Perez Date: Thu, 24 Jul 2025 09:49:02 -0500 Subject: [PATCH] PM-24090: Remove ChromeAutofill feature flag (#5567) --- .../data/autofill/di/AutofillModule.kt | 9 +-- ...serThirdPartyAutofillEnabledManagerImpl.kt | 16 +----- .../data/platform/manager/model/FlagKey.kt | 10 ---- .../components/FeatureFlagListItems.kt | 2 - .../main/res/values/strings_non_localized.xml | 1 - .../manager/AutofillActivityManagerTest.kt | 7 +-- ...serThirdPartyAutofillEnabledManagerTest.kt | 56 +------------------ .../data/platform/manager/FlagKeyTest.kt | 5 -- .../debugmenu/DebugMenuViewModelTest.kt | 2 - 9 files changed, 6 insertions(+), 102 deletions(-) diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/data/autofill/di/AutofillModule.kt b/app/src/main/kotlin/com/x8bit/bitwarden/data/autofill/di/AutofillModule.kt index d05fcd0ca9..103ebcbb7c 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/data/autofill/di/AutofillModule.kt +++ b/app/src/main/kotlin/com/x8bit/bitwarden/data/autofill/di/AutofillModule.kt @@ -24,7 +24,6 @@ import com.x8bit.bitwarden.data.autofill.processor.AutofillProcessor import com.x8bit.bitwarden.data.autofill.processor.AutofillProcessorImpl import com.x8bit.bitwarden.data.autofill.provider.AutofillCipherProvider import com.x8bit.bitwarden.data.autofill.provider.AutofillCipherProviderImpl -import com.x8bit.bitwarden.data.platform.manager.FeatureFlagManager import com.x8bit.bitwarden.data.platform.manager.PolicyManager import com.x8bit.bitwarden.data.platform.manager.ciphermatching.CipherMatchingManager import com.x8bit.bitwarden.data.platform.manager.clipboard.BitwardenClipboardManager @@ -59,12 +58,8 @@ object AutofillModule { @Singleton @Provides - fun providesBrowserAutofillEnabledManager( - featureFlagManager: FeatureFlagManager, - ): BrowserThirdPartyAutofillEnabledManager = - BrowserThirdPartyAutofillEnabledManagerImpl( - featureFlagManager = featureFlagManager, - ) + fun providesBrowserAutofillEnabledManager(): BrowserThirdPartyAutofillEnabledManager = + BrowserThirdPartyAutofillEnabledManagerImpl() @Singleton @Provides diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/data/autofill/manager/browser/BrowserThirdPartyAutofillEnabledManagerImpl.kt b/app/src/main/kotlin/com/x8bit/bitwarden/data/autofill/manager/browser/BrowserThirdPartyAutofillEnabledManagerImpl.kt index cccff5116a..b904a34b2b 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/data/autofill/manager/browser/BrowserThirdPartyAutofillEnabledManagerImpl.kt +++ b/app/src/main/kotlin/com/x8bit/bitwarden/data/autofill/manager/browser/BrowserThirdPartyAutofillEnabledManagerImpl.kt @@ -2,19 +2,14 @@ package com.x8bit.bitwarden.data.autofill.manager.browser import com.x8bit.bitwarden.data.autofill.model.browser.BrowserThirdPartyAutoFillData import com.x8bit.bitwarden.data.autofill.model.browser.BrowserThirdPartyAutofillStatus -import com.x8bit.bitwarden.data.platform.manager.FeatureFlagManager -import com.x8bit.bitwarden.data.platform.manager.model.FlagKey import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.MutableStateFlow -import kotlinx.coroutines.flow.combine import kotlinx.coroutines.flow.update /** * Default implementation of [BrowserThirdPartyAutofillEnabledManager]. */ -class BrowserThirdPartyAutofillEnabledManagerImpl( - private val featureFlagManager: FeatureFlagManager, -) : BrowserThirdPartyAutofillEnabledManager { +class BrowserThirdPartyAutofillEnabledManagerImpl : BrowserThirdPartyAutofillEnabledManager { override var browserThirdPartyAutofillStatus: BrowserThirdPartyAutofillStatus = DEFAULT_STATUS set(value) { field = value @@ -29,15 +24,6 @@ class BrowserThirdPartyAutofillEnabledManagerImpl( override val browserThirdPartyAutofillStatusFlow: Flow get() = mutableBrowserThirdPartyAutofillStatusStateFlow - .combine( - featureFlagManager.getFeatureFlagFlow(FlagKey.ChromeAutofill), - ) { data, enabled -> - if (enabled) { - data - } else { - DEFAULT_STATUS - } - } } private val DEFAULT_STATUS = BrowserThirdPartyAutofillStatus( diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/data/platform/manager/model/FlagKey.kt b/app/src/main/kotlin/com/x8bit/bitwarden/data/platform/manager/model/FlagKey.kt index e3d9ecf981..d9f3d32ddc 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/data/platform/manager/model/FlagKey.kt +++ b/app/src/main/kotlin/com/x8bit/bitwarden/data/platform/manager/model/FlagKey.kt @@ -29,7 +29,6 @@ sealed class FlagKey { SingleTapPasskeyAuthentication, AnonAddySelfHostAlias, SimpleLoginSelfHostAlias, - ChromeAutofill, RestrictCipherItemDeletion, UserManagedPrivilegedApps, RemoveCardPolicy, @@ -112,15 +111,6 @@ sealed class FlagKey { override val defaultValue: Boolean = false } - /** - * Data object holding the feature flag key to enable the checking for Chrome's third party - * autofill. - */ - data object ChromeAutofill : FlagKey() { - override val keyName: String = "android-chrome-autofill" - override val defaultValue: Boolean = false - } - /** * Data object holding the feature flag key to enable the restriction of cipher item deletion */ diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/feature/debugmenu/components/FeatureFlagListItems.kt b/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/feature/debugmenu/components/FeatureFlagListItems.kt index be7ede34af..02a0374aca 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/feature/debugmenu/components/FeatureFlagListItems.kt +++ b/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/feature/debugmenu/components/FeatureFlagListItems.kt @@ -34,7 +34,6 @@ fun FlagKey.ListItemContent( FlagKey.SingleTapPasskeyAuthentication, FlagKey.AnonAddySelfHostAlias, FlagKey.SimpleLoginSelfHostAlias, - FlagKey.ChromeAutofill, FlagKey.RestrictCipherItemDeletion, FlagKey.UserManagedPrivilegedApps, FlagKey.RemoveCardPolicy, @@ -91,7 +90,6 @@ private fun FlagKey.getDisplayLabel(): String = when (this) { FlagKey.AnonAddySelfHostAlias -> stringResource(R.string.anon_addy_self_hosted_aliases) FlagKey.SimpleLoginSelfHostAlias -> stringResource(R.string.simple_login_self_hosted_aliases) - FlagKey.ChromeAutofill -> stringResource(R.string.enable_chrome_autofill) FlagKey.RestrictCipherItemDeletion -> stringResource(R.string.restrict_item_deletion) FlagKey.UserManagedPrivilegedApps -> { stringResource(R.string.user_trusted_privileged_app_management) diff --git a/app/src/main/res/values/strings_non_localized.xml b/app/src/main/res/values/strings_non_localized.xml index 2c32655cdb..bfcf357877 100644 --- a/app/src/main/res/values/strings_non_localized.xml +++ b/app/src/main/res/values/strings_non_localized.xml @@ -22,7 +22,6 @@ Reset all coach mark tours AnonAddy self-hosted aliases SimpleLogin self-hosted aliases - Enable chrome autofill Restrict item deletion Generate crash Generate error report diff --git a/app/src/test/kotlin/com/x8bit/bitwarden/data/autofill/manager/AutofillActivityManagerTest.kt b/app/src/test/kotlin/com/x8bit/bitwarden/data/autofill/manager/AutofillActivityManagerTest.kt index 62e80d240c..4840290489 100644 --- a/app/src/test/kotlin/com/x8bit/bitwarden/data/autofill/manager/AutofillActivityManagerTest.kt +++ b/app/src/test/kotlin/com/x8bit/bitwarden/data/autofill/manager/AutofillActivityManagerTest.kt @@ -9,9 +9,7 @@ import com.x8bit.bitwarden.data.autofill.manager.browser.BrowserThirdPartyAutofi import com.x8bit.bitwarden.data.autofill.model.browser.BrowserThirdPartyAutoFillData import com.x8bit.bitwarden.data.autofill.model.browser.BrowserThirdPartyAutofillStatus import com.x8bit.bitwarden.data.platform.manager.AppStateManager -import com.x8bit.bitwarden.data.platform.manager.FeatureFlagManager import com.x8bit.bitwarden.data.platform.manager.model.AppForegroundState -import com.x8bit.bitwarden.data.platform.manager.model.FlagKey import io.mockk.every import io.mockk.just import io.mockk.mockk @@ -48,11 +46,8 @@ class AutofillActivityManagerTest { every { betaChromeAutofillStatus } returns DEFAULT_BROWSER_AUTOFILL_DATA } - private val featureFlagManager = mockk { - every { getFeatureFlagFlow(FlagKey.ChromeAutofill) } returns MutableStateFlow(true) - } private val browserThirdPartyAutofillEnabledManager: BrowserThirdPartyAutofillEnabledManager = - BrowserThirdPartyAutofillEnabledManagerImpl(featureFlagManager = featureFlagManager) + BrowserThirdPartyAutofillEnabledManagerImpl() // We will construct an instance here just to hook the various dependencies together internally @Suppress("unused") diff --git a/app/src/test/kotlin/com/x8bit/bitwarden/data/autofill/manager/browser/BrowserThirdPartyAutofillEnabledManagerTest.kt b/app/src/test/kotlin/com/x8bit/bitwarden/data/autofill/manager/browser/BrowserThirdPartyAutofillEnabledManagerTest.kt index 66d8c89f4e..a5bc907548 100644 --- a/app/src/test/kotlin/com/x8bit/bitwarden/data/autofill/manager/browser/BrowserThirdPartyAutofillEnabledManagerTest.kt +++ b/app/src/test/kotlin/com/x8bit/bitwarden/data/autofill/manager/browser/BrowserThirdPartyAutofillEnabledManagerTest.kt @@ -3,25 +3,13 @@ package com.x8bit.bitwarden.data.autofill.manager.browser import app.cash.turbine.test import com.x8bit.bitwarden.data.autofill.model.browser.BrowserThirdPartyAutoFillData import com.x8bit.bitwarden.data.autofill.model.browser.BrowserThirdPartyAutofillStatus -import com.x8bit.bitwarden.data.platform.manager.FeatureFlagManager -import com.x8bit.bitwarden.data.platform.manager.model.FlagKey -import io.mockk.every -import io.mockk.mockk -import kotlinx.coroutines.flow.MutableStateFlow -import kotlinx.coroutines.flow.update import kotlinx.coroutines.test.runTest import org.junit.jupiter.api.Assertions.assertEquals import org.junit.jupiter.api.Test class BrowserThirdPartyAutofillEnabledManagerTest { - private val mutableChromeAutofillFeatureFlow = MutableStateFlow(true) - private val featureFlagManager = mockk { - every { - getFeatureFlagFlow(FlagKey.ChromeAutofill) - } returns mutableChromeAutofillFeatureFlow - } - private val browserThirdPartyAutofillEnabledManager = - BrowserThirdPartyAutofillEnabledManagerImpl(featureFlagManager = featureFlagManager) + private val browserThirdPartyAutofillEnabledManager: BrowserThirdPartyAutofillEnabledManager = + BrowserThirdPartyAutofillEnabledManagerImpl() @Suppress("MaxLineLength") @Test @@ -61,46 +49,6 @@ class BrowserThirdPartyAutofillEnabledManagerTest { ) } } - - @Suppress("MaxLineLength") - @Test - fun `browserThirdPartyAutofillStatusFlow should not emit whenever isAutofillEnabled is set to a unique value if the feature is off`() = - runTest { - mutableChromeAutofillFeatureFlow.update { false } - browserThirdPartyAutofillEnabledManager.browserThirdPartyAutofillStatusFlow.test { - assertEquals( - DEFAULT_EXPECTED_AUTOFILL_STATUS, - awaitItem(), - ) - val firstExpectedStatusChange = DEFAULT_EXPECTED_AUTOFILL_STATUS.copy( - chromeStableStatusData = DEFAULT_BROWSER_AUTOFILL_DATA.copy(isAvailable = true), - ) - browserThirdPartyAutofillEnabledManager.browserThirdPartyAutofillStatus = - firstExpectedStatusChange - - assertEquals( - DEFAULT_EXPECTED_AUTOFILL_STATUS, - awaitItem(), - ) - browserThirdPartyAutofillEnabledManager.browserThirdPartyAutofillStatus = - firstExpectedStatusChange.copy() - expectNoEvents() - - val secondExpectedStatusChange = firstExpectedStatusChange - .copy( - chromeBetaChannelStatusData = DEFAULT_BROWSER_AUTOFILL_DATA.copy( - isThirdPartyEnabled = true, - ), - ) - browserThirdPartyAutofillEnabledManager.browserThirdPartyAutofillStatus = - secondExpectedStatusChange - - assertEquals( - DEFAULT_EXPECTED_AUTOFILL_STATUS, - awaitItem(), - ) - } - } } private val DEFAULT_BROWSER_AUTOFILL_DATA = BrowserThirdPartyAutoFillData( diff --git a/app/src/test/kotlin/com/x8bit/bitwarden/data/platform/manager/FlagKeyTest.kt b/app/src/test/kotlin/com/x8bit/bitwarden/data/platform/manager/FlagKeyTest.kt index cdb8803230..1e4760350c 100644 --- a/app/src/test/kotlin/com/x8bit/bitwarden/data/platform/manager/FlagKeyTest.kt +++ b/app/src/test/kotlin/com/x8bit/bitwarden/data/platform/manager/FlagKeyTest.kt @@ -41,10 +41,6 @@ class FlagKeyTest { FlagKey.AnonAddySelfHostAlias.keyName, "anon-addy-self-host-alias", ) - assertEquals( - FlagKey.ChromeAutofill.keyName, - "android-chrome-autofill", - ) assertEquals( FlagKey.RestrictCipherItemDeletion.keyName, "pm-15493-restrict-item-deletion-to-can-manage-permission", @@ -72,7 +68,6 @@ class FlagKeyTest { FlagKey.AnonAddySelfHostAlias, FlagKey.SimpleLoginSelfHostAlias, FlagKey.CipherKeyEncryption, - FlagKey.ChromeAutofill, FlagKey.RestrictCipherItemDeletion, FlagKey.UserManagedPrivilegedApps, FlagKey.RemoveCardPolicy, diff --git a/app/src/test/kotlin/com/x8bit/bitwarden/ui/platform/feature/debugmenu/DebugMenuViewModelTest.kt b/app/src/test/kotlin/com/x8bit/bitwarden/ui/platform/feature/debugmenu/DebugMenuViewModelTest.kt index 0627a43006..af1970be13 100644 --- a/app/src/test/kotlin/com/x8bit/bitwarden/ui/platform/feature/debugmenu/DebugMenuViewModelTest.kt +++ b/app/src/test/kotlin/com/x8bit/bitwarden/ui/platform/feature/debugmenu/DebugMenuViewModelTest.kt @@ -152,7 +152,6 @@ private val DEFAULT_MAP_VALUE: ImmutableMap, Any> = persistentMapOf FlagKey.SingleTapPasskeyAuthentication to true, FlagKey.AnonAddySelfHostAlias to true, FlagKey.SimpleLoginSelfHostAlias to true, - FlagKey.ChromeAutofill to true, FlagKey.RestrictCipherItemDeletion to true, FlagKey.UserManagedPrivilegedApps to true, FlagKey.RemoveCardPolicy to true, @@ -167,7 +166,6 @@ private val UPDATED_MAP_VALUE: ImmutableMap, Any> = persistentMapOf FlagKey.SingleTapPasskeyAuthentication to false, FlagKey.AnonAddySelfHostAlias to false, FlagKey.SimpleLoginSelfHostAlias to false, - FlagKey.ChromeAutofill to false, FlagKey.RestrictCipherItemDeletion to false, FlagKey.UserManagedPrivilegedApps to false, FlagKey.RemoveCardPolicy to false,