Skip to content

Commit 06fcc84

Browse files
daxmobiledbajpeyiCDRussell
authored
Update autofill to 17.2.0 (#6089)
Task/Issue URL: https://app.asana.com/1/137249556945/task/1210272268839645 Autofill Release: https://github.com/duckduckgo/duckduckgo-autofill/releases/tag/17.2.0 ## Description Updates Autofill to version [17.2.0](https://github.com/duckduckgo/duckduckgo-autofill/releases/tag/17.2.0). ### Autofill 17.2.0 release notes ## What's Changed * Update password-related json files (2025-04-15) by @daxmobile in duckduckgo/duckduckgo-autofill#797 * [SiteSpecificFixes] Add support for input types by @dbajpeyi in duckduckgo/duckduckgo-autofill#795 * [SiteSpecificFeature] Add readme for site-specific-feature by @dbajpeyi in duckduckgo/duckduckgo-autofill#799 * build: add missing precompile-regexes step by @shakyShane in duckduckgo/duckduckgo-autofill#807 * build: exclude generated regex folder from watch by @shakyShane in duckduckgo/duckduckgo-autofill#808 * Update password-related json files (2025-05-05) by @daxmobile in duckduckgo/duckduckgo-autofill#806 * Update password-related json files (2025-05-06) by @daxmobile in duckduckgo/duckduckgo-autofill#810 * Add credit card and identity for Windows by @borgateo in duckduckgo/duckduckgo-autofill#796 * Ema/cc forms fixes by @GioSensation in duckduckgo/duckduckgo-autofill#809 * Recategorize password variant by @GioSensation in duckduckgo/duckduckgo-autofill#818 * Update password-related json files (2025-05-16) by @daxmobile in duckduckgo/duckduckgo-autofill#822 **Full Changelog**: duckduckgo/duckduckgo-autofill@17.1.0...17.2.0 ## Steps to test This release has been tested during autofill development. For smoke test steps see [this task](https://app.asana.com/0/1198964220583541/1200583647142330/f). - [ ] Add logcat filter for `message~:"autofill-config"` - [ ] Build `internal` type (e.g., `/.gradlew installID`) - [ ] [Assuming remote config isn't merged yet] Open any website, verify `"password_variant_categorization" : false` - [ ] Visit `Settings -> Feature Flag Inventory` and enable `passwordVariantCategorization` - [ ] Return to webpage and refresh; verify `"password_variant_categorization" : true` - [ ] Verify autofill works as expected on --------- Co-authored-by: dbajpeyi <3018923+dbajpeyi@users.noreply.github.com> Co-authored-by: Craig Russell <1336281+CDRussell@users.noreply.github.com> Co-authored-by: Deepankar Bajpeyi <dbajpeyi@gmail.com>
1 parent 4255ad1 commit 06fcc84

File tree

11 files changed

+881
-1633
lines changed

11 files changed

+881
-1633
lines changed

autofill/autofill-api/src/main/java/com/duckduckgo/autofill/api/AutofillFeature.kt

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,13 @@ interface AutofillFeature {
7575
@Toggle.DefaultValue(DefaultFeatureValue.FALSE)
7676
fun canCategorizeUnknownUsername(): Toggle
7777

78+
/**
79+
* @return `true` when the remote config has "passwordVariantCategorization" autofill sub-feature flag enabled
80+
* If the remote feature is not present defaults to `false`
81+
*/
82+
@Toggle.DefaultValue(DefaultFeatureValue.FALSE)
83+
fun passwordVariantCategorization(): Toggle
84+
7885
/**
7986
* @return `true` when the remote config has the global "onByDefault" autofill sub-feature flag enabled
8087
* If the remote feature is not present defaults to `false`

autofill/autofill-impl/src/main/java/com/duckduckgo/autofill/impl/configuration/AutofillRuntimeConfigProvider.kt

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -64,8 +64,11 @@ class RealAutofillRuntimeConfigProvider @Inject constructor(
6464
showInlineKeyIcon = true,
6565
showInContextEmailProtectionSignup = canShowInContextEmailProtectionSignup(url),
6666
unknownUsernameCategorization = canCategorizeUnknownUsername(),
67+
canCategorizePasswordVariant = canCategorizePasswordVariant(),
6768
partialFormSaves = partialFormSaves(),
68-
)
69+
).also {
70+
Timber.v("autofill-config: userPreferences for %s: \n%s", url, it)
71+
}
6972
val availableInputTypes = generateAvailableInputTypes(url)
7073

7174
return StringBuilder(rawJs).apply {
@@ -88,7 +91,7 @@ class RealAutofillRuntimeConfigProvider @Inject constructor(
8891
val emailAvailable = determineIfEmailAvailable()
8992

9093
val json = runtimeConfigurationWriter.generateResponseGetAvailableInputTypes(credentialsAvailable, emailAvailable).also {
91-
Timber.v("availableInputTypes for %s: \n%s", url, it)
94+
Timber.v("autofill-config: availableInputTypes for %s: \n%s", url, it)
9295
}
9396
return "availableInputTypes = $json"
9497
}
@@ -143,6 +146,10 @@ class RealAutofillRuntimeConfigProvider @Inject constructor(
143146
return autofillFeature.canCategorizeUnknownUsername().isEnabled()
144147
}
145148

149+
private fun canCategorizePasswordVariant(): Boolean {
150+
return autofillFeature.passwordVariantCategorization().isEnabled()
151+
}
152+
146153
private fun partialFormSaves(): Boolean {
147154
return autofillFeature.partialFormSaves().isEnabled()
148155
}

autofill/autofill-impl/src/main/java/com/duckduckgo/autofill/impl/configuration/RuntimeConfigurationWriter.kt

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ interface RuntimeConfigurationWriter {
3939
showInlineKeyIcon: Boolean,
4040
showInContextEmailProtectionSignup: Boolean,
4141
unknownUsernameCategorization: Boolean,
42+
canCategorizePasswordVariant: Boolean,
4243
partialFormSaves: Boolean,
4344
): String
4445
}
@@ -102,6 +103,7 @@ class RealRuntimeConfigurationWriter @Inject constructor(val moshi: Moshi) : Run
102103
showInlineKeyIcon: Boolean,
103104
showInContextEmailProtectionSignup: Boolean,
104105
unknownUsernameCategorization: Boolean,
106+
canCategorizePasswordVariant: Boolean,
105107
partialFormSaves: Boolean,
106108
): String {
107109
return """
@@ -123,7 +125,8 @@ class RealRuntimeConfigurationWriter @Inject constructor(val moshi: Moshi) : Run
123125
"inlineIcon_credentials": $showInlineKeyIcon,
124126
"emailProtection_incontext_signup": $showInContextEmailProtectionSignup,
125127
"unknown_username_categorization": $unknownUsernameCategorization,
126-
"partial_form_saves": $partialFormSaves
128+
"partial_form_saves": $partialFormSaves,
129+
"password_variant_categorization" : $canCategorizePasswordVariant
127130
}
128131
}
129132
}

autofill/autofill-impl/src/test/java/com/duckduckgo/autofill/impl/configuration/RealAutofillRuntimeConfigProviderTest.kt

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616

1717
package com.duckduckgo.autofill.impl.configuration
1818

19+
import android.annotation.SuppressLint
1920
import androidx.test.ext.junit.runners.AndroidJUnit4
2021
import com.duckduckgo.autofill.api.AutofillCapabilityChecker
2122
import com.duckduckgo.autofill.api.AutofillFeature
@@ -39,6 +40,7 @@ import org.mockito.kotlin.mock
3940
import org.mockito.kotlin.verify
4041
import org.mockito.kotlin.whenever
4142

43+
@SuppressLint("DenyListedApi")
4244
@RunWith(AndroidJUnit4::class)
4345
class RealAutofillRuntimeConfigProviderTest {
4446

@@ -93,6 +95,7 @@ class RealAutofillRuntimeConfigProviderTest {
9395
showInlineKeyIcon = any(),
9496
showInContextEmailProtectionSignup = any(),
9597
unknownUsernameCategorization = any(),
98+
canCategorizePasswordVariant = any(),
9699
partialFormSaves = any(),
97100
),
98101
).thenReturn("")
@@ -122,6 +125,22 @@ class RealAutofillRuntimeConfigProviderTest {
122125
verifyKeyIconRequestedToShow()
123126
}
124127

128+
@Test
129+
fun whenCanCategorizePasswordVariantEnabledThenConfigurationUserPrefsReflectsThat() = runTest {
130+
configureAutofillCapabilities(enabled = false)
131+
autofillFeature.passwordVariantCategorization().setRawStoredState(State(enable = true))
132+
testee.getRuntimeConfiguration("", EXAMPLE_URL)
133+
verifyCanCategorizePasswordVariant(true)
134+
}
135+
136+
@Test
137+
fun whenCanCategorizePasswordVariantDisabledThenConfigurationUserPrefsReflectsThat() = runTest {
138+
configureAutofillCapabilities(enabled = false)
139+
autofillFeature.passwordVariantCategorization().setRawStoredState(State(enable = false))
140+
testee.getRuntimeConfiguration("", EXAMPLE_URL)
141+
verifyCanCategorizePasswordVariant(false)
142+
}
143+
125144
@Test
126145
fun whenNoCredentialsForUrlThenConfigurationInputTypeCredentialsIsFalse() = runTest {
127146
configureAutofillEnabledWithNoSavedCredentials(EXAMPLE_URL)
@@ -404,6 +423,7 @@ class RealAutofillRuntimeConfigProviderTest {
404423
showInlineKeyIcon = any(),
405424
showInContextEmailProtectionSignup = any(),
406425
unknownUsernameCategorization = any(),
426+
canCategorizePasswordVariant = any(),
407427
partialFormSaves = any(),
408428
)
409429
}
@@ -416,6 +436,20 @@ class RealAutofillRuntimeConfigProviderTest {
416436
showInlineKeyIcon = any(),
417437
showInContextEmailProtectionSignup = any(),
418438
unknownUsernameCategorization = any(),
439+
canCategorizePasswordVariant = any(),
440+
partialFormSaves = any(),
441+
)
442+
}
443+
444+
private fun verifyCanCategorizePasswordVariant(expected: Boolean) {
445+
verify(runtimeConfigurationWriter).generateUserPreferences(
446+
autofillCredentials = any(),
447+
credentialSaving = any(),
448+
passwordGeneration = any(),
449+
showInlineKeyIcon = any(),
450+
showInContextEmailProtectionSignup = any(),
451+
unknownUsernameCategorization = any(),
452+
canCategorizePasswordVariant = eq(expected),
419453
partialFormSaves = any(),
420454
)
421455
}
@@ -432,6 +466,7 @@ class RealAutofillRuntimeConfigProviderTest {
432466
showInlineKeyIcon = eq(true),
433467
showInContextEmailProtectionSignup = any(),
434468
unknownUsernameCategorization = any(),
469+
canCategorizePasswordVariant = any(),
435470
partialFormSaves = any(),
436471
)
437472
}

autofill/autofill-impl/src/test/java/com/duckduckgo/autofill/impl/configuration/RealRuntimeConfigurationWriterTest.kt

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -139,7 +139,8 @@ class RealRuntimeConfigurationWriterTest {
139139
"inlineIcon_credentials": true,
140140
"emailProtection_incontext_signup": true,
141141
"unknown_username_categorization": false,
142-
"partial_form_saves": false
142+
"partial_form_saves": false,
143+
"password_variant_categorization" : false
143144
}
144145
}
145146
}
@@ -155,6 +156,7 @@ class RealRuntimeConfigurationWriterTest {
155156
showInlineKeyIcon = true,
156157
showInContextEmailProtectionSignup = true,
157158
unknownUsernameCategorization = false,
159+
canCategorizePasswordVariant = false,
158160
partialFormSaves = false,
159161
),
160162
)

0 commit comments

Comments
 (0)