Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(5096)

Unified Diff: chrome/renderer/autofill/password_autofill_agent_browsertest.cc

Issue 2915763003: [Password Manager] Show omnibox icon and anchored prompt once user start typing password (Closed)
Patch Set: Sent For Review Created 3 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/renderer/autofill/password_autofill_agent_browsertest.cc
diff --git a/chrome/renderer/autofill/password_autofill_agent_browsertest.cc b/chrome/renderer/autofill/password_autofill_agent_browsertest.cc
index 36a29f66cda20faf58b14da4bd43b80faade5e36..4ef8c97846c12ac639f61736f8260ea49d4a2705 100644
--- a/chrome/renderer/autofill/password_autofill_agent_browsertest.cc
+++ b/chrome/renderer/autofill/password_autofill_agent_browsertest.cc
@@ -3028,4 +3028,87 @@ TEST_F(PasswordAutofillAgentTest, NoForm_MultipleAJAXEventsWithoutSubmission) {
ASSERT_FALSE(static_cast<bool>(fake_driver_.password_form_submitted()));
}
+TEST_F(PasswordAutofillAgentTest, ManualFallbackForSaving) {
+ scoped_feature_list_.InitAndEnableFeature(
+ password_manager::features::kEnableManualFallbackForSaving);
+
+ // The users enters a username. No password - no fallback.
+ SimulateUsernameChange(kUsernameName);
+ EXPECT_EQ(0, fake_driver_.called_show_manual_fallback_cnt());
+
+ // The user enters a password.
+ SimulatePasswordChange(kPasswordName);
+ // SimulateUsernameChange/SimulatePasswordChange calls
+ // PasswordAutofillAgent::UpdateStateForTextChange only once.
+ EXPECT_EQ(1, fake_driver_.called_show_manual_fallback_cnt());
+
+ // Remove one character from the password value.
+ SimulateUserTypingASCIICharacter(ui::VKEY_BACK, true);
+ EXPECT_EQ(2, fake_driver_.called_show_manual_fallback_cnt());
+
+ // Add one character to the username value.
+ SetFocused(username_element_);
+ SimulateUserTypingASCIICharacter('a', true);
+ EXPECT_EQ(3, fake_driver_.called_show_manual_fallback_cnt());
+
+ // Remove username value.
+ SimulateUsernameChange("");
+ EXPECT_EQ(4, fake_driver_.called_show_manual_fallback_cnt());
+
+ // Change the password. Despite of empty username the fallback is still
+ // there.
+ SetFocused(password_element_);
+ SimulateUserTypingASCIICharacter('a', true);
+ EXPECT_EQ(5, fake_driver_.called_show_manual_fallback_cnt());
+
+ // Remove password value. The fallback should be disabled.
+ SimulatePasswordChange("");
+ EXPECT_EQ(0, fake_driver_.called_show_manual_fallback_cnt());
+
+ // The user enters new password. Show the fallback again.
+ SimulateUserTypingASCIICharacter('a', true);
+ EXPECT_EQ(1, fake_driver_.called_show_manual_fallback_cnt());
+}
+
+TEST_F(PasswordAutofillAgentTest, ManualFallbackForSaving_PasswordChangeForm) {
+ scoped_feature_list_.InitAndEnableFeature(
+ password_manager::features::kEnableManualFallbackForSaving);
+
+ LoadHTML(kPasswordChangeFormHTML);
+ UpdateOriginForHTML(kPasswordChangeFormHTML);
+ UpdateUsernameAndPasswordElements();
+
+ // No password to save yet - no fallback.
+ SimulateUsernameChange(kUsernameName);
+ EXPECT_EQ(0, fake_driver_.called_show_manual_fallback_cnt());
+
+ // The user enters in the current password field. The fallback should be
+ // available to save the entered value. It's a subject to re-consider.
vasilii 2017/07/21 12:48:20 Why do we need to reconsider it?
kolos1 2017/07/24 15:33:30 Below the user types into the new password field.
+ SimulatePasswordChange(kPasswordName);
+ // SimulateUsernameChange/SimulatePasswordChange calls
+ // PasswordAutofillAgent::UpdateStateForTextChange only once.
+ EXPECT_EQ(1, fake_driver_.called_show_manual_fallback_cnt());
+
+ // The user types into the new password field. The fallback should be updated.
+ WebInputElement new_password = GetInputElementByID("newpassword");
+ ASSERT_FALSE(new_password.IsNull());
+ SetFocused(new_password);
+ SimulateUserTypingASCIICharacter('a', true);
+ EXPECT_EQ(2, fake_driver_.called_show_manual_fallback_cnt());
+
+ // Edits of the confirmation password field trigger fallback updates.
+ WebInputElement confirmation_password =
+ GetInputElementByID("confirmpassword");
+ ASSERT_FALSE(confirmation_password.IsNull());
+ SetFocused(confirmation_password);
+ SimulateUserTypingASCIICharacter('a', true);
+ EXPECT_EQ(3, fake_driver_.called_show_manual_fallback_cnt());
+
+ // Clear all password fields. The fallback should be disabled.
vasilii 2017/07/21 12:48:20 What happens if you have two password fields. The
kolos1 2017/07/24 15:33:30 The manual fallback relies on what GetPasswordForm
+ SimulatePasswordChange("");
+ SimulateUserInputChangeForElement(&new_password, "");
+ SimulateUserInputChangeForElement(&confirmation_password, "");
+ EXPECT_EQ(0, fake_driver_.called_show_manual_fallback_cnt());
+}
+
} // namespace autofill

Powered by Google App Engine
This is Rietveld 408576698