Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Autofill: Increase ratio of complete credential saves #5386

Open
wants to merge 1 commit into
base: develop
Choose a base branch
from

Conversation

CDRussell
Copy link
Member

@CDRussell CDRussell commented Dec 12, 2024

Task/Issue URL: https://app.asana.com/0/72649045549333/1206048666874234/f

Description

Increases the ratio of complete credential saves by being able to capture a username-only form submission, and then re-attach it to a nearby password-only form submission. This is useful for scenarios like resetting passwords and multi-step logins.

Steps to test this PR

Logcat filter:
message~:"partial save" | message~:”backfill"

Simulating a multi-step login form

  • Ensure no passwords currently saved (or none for autofill.me at least)
  • Visit https://autofill.me/form/login-simple
  • Enter username test
  • Leave password blank
  • Hit Login button (this simulates getting the first part of a multi-step login form)
  • Now clear the username
  • Enter password (>=4 characters)
  • Hit Login button (this is submitting only a password now, simulating the second part of a multi-step login form)
  • Save password when prompted, then go view it in the Password Management view (e.g., tap on View in snackbar)
  • Verify it has username=test and password matches what you provided (i.e., the username was backfilled because the partial form submission’s username was later applied to the final form submission which didn’t have the username)

Updating password for the above (not backfilling)

  • Visit https://autofill.me/form/login-simple (decline offer to autofill)
  • Enter username test
  • Enter a different password than what is stored already
  • Hit Login button; verify you are offered to update the password
  • Verify that when you decline, the saved password hasn’t changed
  • Then repeat and accept the offer to update the password; verify it was updated correctly (and there are no dupes for that username)

Updating password (with backfilling)

  • Visit https://autofill.me/form/login-simple (decline offer to autofill)
  • Enter username test
  • Leave password blank
  • Hit Login button (this simulates getting the first part of a multi-step login form)
  • Now clear the username
  • Enter a different password than what is stored already
  • Hit Login button; verify you are offered to update the password
  • Verify Backfilling username [test] from partial save in logs
  • Test both updating password when prompted, and declining and make sure in both cases the password is correct and there are no duplicates for that username

Password reset flow (with backfilling, automatic password generation)

  • Visit scribd.com and create an account if you don’t have one (recommend using email address that you can get on the device you’re testing on, as you’ll need to click a reset password link)
  • (Sign out if signed in)
  • Click Forgot password? from scribd.com
  • Enter your email address
  • Get the email from them, and click the link to reset your password within 3 minutes
  • Choose to use a generated password when prompted (note the last few characters so you can verify it later)
  • Verify you are prompted to update your password (note, update, not to save a new one)
  • Agree to Update Password. Verify the password is correct and there are no duplicate credentials.

Password reset flow (with backfilling, manual password entry)

  • Visit scribd.com (sign out if signed in)
  • Click Forgot password? from scribd.com
  • Enter your email address
  • Get the email from them, and click the link to reset your password within 3 minutes
  • Choose to manually enter a password that conforms to their rules
  • Verify you are prompted to update your password (note, update, not to save a new one)
  • Agree to Update Password. Verify the password is correct and there are no duplicate credentials.

Password reset flow (no backfilling, automatic password generation)

  • Visit scribd.com (sign out if signed in)
  • Click Forgot password? from scribd.com
  • Enter your email address
  • Wait > 3 minutes
  • Get the email from them, and click the link to reset your password
  • Choose to use a generated password when prompted (note the last few characters so you can verify it later)
  • Verify you see a snackbar that password has been saved. Note, this is a separate credential that is saved with no username attached (i.e, existing behaviour because this was ineligible for backfilling)

Password reset flow (no backfilling, manual password entry)

  • Visit scribd.com (sign out if signed in)
  • Click Forgot password? from scribd.com
  • Enter your email address
  • Wait > 3 minutes
  • Get the email from them, and click the link to reset your password
  • Choose to manually enter a password
  • Verify you are prompted to save ❓. Note, this is a separate credential that is saved with no username attached (i.e, existing behaviour because this was ineligible for backfilling)

Email Protection, autofilling personal duck address contributes as username backfill candidate

Email Protection, autofilling private duck address contributes as username backfill candidate

Disable feature flag

  • Disable partialFormSaves
  • Ensure no passwords currently saved for autofill.me
  • Visit https://autofill.me/form/login-simple
  • Enter username test
  • Leave password blank
  • Hit Login button (this simulates getting the first part of a multi-step login form)
  • Now clear the username
  • Enter password (>=4 characters)
  • Hit Login button (this is submitting only a password now, simulating the second part of a multi-step login form)
  • Accept to save the password. Verify this has no username (since it wasn’t allowed to backfill it)

Ensuring existing business rules are maintained

Autofill personal duck address and autogenerated password

Autofill private duck address and autogenerated password

Autofill personal duck address and manual password

Autofill private duck address and manual password

Copy link
Member Author

CDRussell commented Dec 12, 2024

Comment on lines +82 to +91
internal data class AutofillStoreFormDataJsonRequest(
val credentials: AutofillStoreFormDataCredentialsJsonRequest?,
val trigger: FormSubmissionTriggerType?,
)

internal data class AutofillStoreFormDataCredentialsJsonRequest(
val username: String?,
val password: String?,
val autogenerated: Boolean = false,
)
Copy link
Member Author

@CDRussell CDRussell Dec 12, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this is a small tidy up as these are types specifically for Moshi / JSON parsing, used internally in this class. but we don’t necessarily want the same types returned out of this class

for example, the trigger is nullable when parsing from JSON, but when returning we also want that non-nullable and defaulting to UNKNOWN if it couldn’t be parsed from the JSON

@CDRussell CDRussell force-pushed the feature/craig/autofill_increase_ratio_complete_credential_saves branch 9 times, most recently from 9578c3a to 969ed0e Compare December 13, 2024 17:32
@CDRussell CDRussell force-pushed the feature/craig/autofill_increase_ratio_complete_credential_saves branch 7 times, most recently from a36b674 to 16e1970 Compare December 20, 2024 16:42
@CDRussell CDRussell force-pushed the feature/craig/autofill_increase_ratio_complete_credential_saves branch 4 times, most recently from 3d3a41e to 2e53317 Compare January 15, 2025 11:06
@CDRussell CDRussell force-pushed the feature/craig/autofill_increase_ratio_complete_credential_saves branch from 2e53317 to a24930b Compare January 15, 2025 11:12
@CDRussell CDRussell marked this pull request as ready for review January 15, 2025 11:14
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants