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

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

Issue 208453002: Add "previewing on hover" support for password field. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Update code as per Ilya's review comments after rebasing code. Created 6 years, 7 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 7d061db21d2d0849ceaa8070f3313ee5c0d36e4e..058a49ceb5bd0dad660efcd68280c0118f8980d8 100644
--- a/chrome/renderer/autofill/password_autofill_agent_browsertest.cc
+++ b/chrome/renderer/autofill/password_autofill_agent_browsertest.cc
@@ -1023,8 +1023,8 @@ TEST_F(PasswordAutofillAgentTest,
EXPECT_EQ(1, password_onchange_called);
}
-// Tests that |AcceptSuggestion| properly fills the username and password.
-TEST_F(PasswordAutofillAgentTest, AcceptSuggestion) {
+// Tests that |FillSuggestion| properly fills the username and password.
+TEST_F(PasswordAutofillAgentTest, FillSuggestion) {
// Simulate the browser sending the login info, but set |wait_for_username|
// to prevent the form from being immediately filled.
fill_data_.wait_for_username = true;
@@ -1035,27 +1035,217 @@ TEST_F(PasswordAutofillAgentTest, AcceptSuggestion) {
// If the password field is not autocompletable, it should not be affected.
SetElementReadOnly(password_element_, true);
- EXPECT_FALSE(password_autofill_->AcceptSuggestion(
+ EXPECT_FALSE(password_autofill_->FillSuggestion(
username_element_, kAliceUsername, kAlicePassword));
CheckTextFieldsDOMState(std::string(), false, std::string(), false);
SetElementReadOnly(password_element_, false);
- // After accepting the suggestion, both fields should be autocompleted.
- EXPECT_TRUE(password_autofill_->AcceptSuggestion(
+ // After filling with the suggestion, both fields should be autocompleted.
+ EXPECT_TRUE(password_autofill_->FillSuggestion(
username_element_, kAliceUsername, kAlicePassword));
CheckTextFieldsDOMState(kAliceUsername, true, kAlicePassword, true);
int username_length = strlen(kAliceUsername);
CheckUsernameSelection(username_length, username_length);
- // Try accepting a suggestion with a password different from the one that was
+ // Try Filling with a suggestion with password different from the one that was
// initially sent to the renderer.
- EXPECT_TRUE(password_autofill_->AcceptSuggestion(
+ EXPECT_TRUE(password_autofill_->FillSuggestion(
username_element_, kBobUsername, kCarolPassword));
CheckTextFieldsDOMState(kBobUsername, true, kCarolPassword, true);
username_length = strlen(kBobUsername);
CheckUsernameSelection(username_length, username_length);
}
+// Tests that |PreviewSuggestion| properly previews the username and password.
+TEST_F(PasswordAutofillAgentTest, PreviewSuggestion) {
+ // Simulate the browser sending the login info, but set |wait_for_username|
+ // to prevent the form from being immediately filled.
+ fill_data_.wait_for_username = true;
+ SimulateOnFillPasswordForm(fill_data_);
+
+ // Neither field should have been autocompleted.
+ CheckTextFieldsDOMState(std::string(), false, std::string(), false);
+
+ // If the password field is not autocompletable, it should not be affected.
+ SetElementReadOnly(password_element_, true);
+ EXPECT_FALSE(password_autofill_->PreviewSuggestion(
+ username_element_, kAliceUsername, kAlicePassword));
+ EXPECT_EQ(std::string(), username_element_.suggestedValue().utf8());
+ EXPECT_FALSE(username_element_.isAutofilled());
+ EXPECT_EQ(std::string(), password_element_.suggestedValue().utf8());
+ EXPECT_FALSE(password_element_.isAutofilled());
+ SetElementReadOnly(password_element_, false);
+
+ // After selecting the suggestion, both fields should be previewed
+ // with suggested values.
+ EXPECT_TRUE(password_autofill_->PreviewSuggestion(
+ username_element_, kAliceUsername, kAlicePassword));
+ EXPECT_EQ(
+ kAliceUsername,
+ static_cast<std::string>(username_element_.suggestedValue().utf8()));
+ EXPECT_TRUE(username_element_.isAutofilled());
+ EXPECT_EQ(
+ kAlicePassword,
+ static_cast<std::string>(password_element_.suggestedValue().utf8()));
+ EXPECT_TRUE(password_element_.isAutofilled());
+ int username_length = strlen(kAliceUsername);
+ // Selection range starts from the end of matching characters between
+ // username_element value and suggestedValue. value lenght is 0 in this case.
Ilya Sherman 2014/05/14 23:10:58 nit: "lenght" -> "length"
ziran.sun 2014/05/15 12:36:37 Done.
+ CheckUsernameSelection(0, username_length);
+
+ // Try previewing with a password different from the one that was initially
+ // sent to the renderer.
+ EXPECT_TRUE(password_autofill_->PreviewSuggestion(
+ username_element_, kBobUsername, kCarolPassword));
+ EXPECT_EQ(
+ kBobUsername,
+ static_cast<std::string>(username_element_.suggestedValue().utf8()));
+ EXPECT_TRUE(username_element_.isAutofilled());
+ EXPECT_EQ(
+ kCarolPassword,
+ static_cast<std::string>(password_element_.suggestedValue().utf8()));
+ EXPECT_TRUE(password_element_.isAutofilled());
+ username_length = strlen(kBobUsername);
+ CheckUsernameSelection(0, username_length);
+}
+
+// Tests that |PreviewSuggestion| properly sets the username selection range.
+TEST_F(PasswordAutofillAgentTest, PreviewSuggestionSelectionRange) {
+ username_element_.setValue(WebString::fromUTF8("ali"));
+ username_element_.setAutofilled(true);
+
+ CheckTextFieldsDOMState("ali", true, std::string(), false);
+
+ // Simulate the browser sending the login info, but set |wait_for_username|
+ // to prevent the form from being immediately filled.
+ fill_data_.wait_for_username = true;
+ SimulateOnFillPasswordForm(fill_data_);
+
+ EXPECT_TRUE(password_autofill_->PreviewSuggestion(
+ username_element_, kAliceUsername, kAlicePassword));
+ EXPECT_EQ(
+ kAliceUsername,
+ static_cast<std::string>(username_element_.suggestedValue().utf8()));
+ EXPECT_TRUE(username_element_.isAutofilled());
+ EXPECT_EQ(
+ kAlicePassword,
+ static_cast<std::string>(password_element_.suggestedValue().utf8()));
+ EXPECT_TRUE(password_element_.isAutofilled());
+ int username_length = strlen(kAliceUsername);
+ // Selection range starts from the end of matching characters between
+ // username_element value and suggestedValue.
+ CheckUsernameSelection(3, username_length);
+}
+
+// Tests that |ClearPreview| properly clear previewed username and password
+// with password being previously autofilled.
+TEST_F(PasswordAutofillAgentTest, ClearPreviewWithPasswordAutofilled) {
+ password_element_.setValue(WebString::fromUTF8("sec"));
+ password_element_.setAutofilled(true);
+
+ // Simulate the browser sending the login info, but set |wait_for_username|
+ // to prevent the form from being immediately filled.
+ fill_data_.wait_for_username = true;
+ SimulateOnFillPasswordForm(fill_data_);
+
+ CheckTextFieldsDOMState(std::string(), false, "sec", true);
+
+ EXPECT_TRUE(password_autofill_->PreviewSuggestion(
+ username_element_, kAliceUsername, kAlicePassword));
+
+ EXPECT_TRUE(password_autofill_->ClearPreviewForTest(&username_element_,
+ &password_element_));
Ilya Sherman 2014/05/14 23:10:58 Can you test via the public API of DidClearAutofil
ziran.sun 2014/05/15 12:36:37 Done.
+
+ EXPECT_TRUE(username_element_.value().isEmpty());
+ EXPECT_TRUE(username_element_.suggestedValue().isEmpty());
+ EXPECT_FALSE(username_element_.isAutofilled());
+ EXPECT_EQ(ASCIIToUTF16("sec"), password_element_.value());
+ EXPECT_TRUE(password_element_.suggestedValue().isEmpty());
+ EXPECT_TRUE(password_element_.isAutofilled());
+}
+
+// Tests that |ClearPreview| properly clear previewed username and password
+// with username being previously autofilled.
+TEST_F(PasswordAutofillAgentTest, ClearPreviewWithUserNameAutofilled) {
+ username_element_.setValue(WebString::fromUTF8("ali"));
+ username_element_.setAutofilled(true);
+
+ // Simulate the browser sending the login info, but set |wait_for_username|
+ // to prevent the form from being immediately filled.
+ fill_data_.wait_for_username = true;
+ SimulateOnFillPasswordForm(fill_data_);
+
+ CheckTextFieldsDOMState("ali", true, std::string(), false);
+
+ EXPECT_TRUE(password_autofill_->PreviewSuggestion(
+ username_element_, kAliceUsername, kAlicePassword));
+
+ EXPECT_TRUE(password_autofill_->ClearPreviewForTest(&username_element_,
+ &password_element_));
+
+ EXPECT_EQ(ASCIIToUTF16("ali"), username_element_.value());
+ EXPECT_TRUE(username_element_.suggestedValue().isEmpty());
+ EXPECT_TRUE(username_element_.isAutofilled());
+ EXPECT_TRUE(password_element_.value().isEmpty());
+ EXPECT_TRUE(password_element_.suggestedValue().isEmpty());
+ EXPECT_FALSE(password_element_.isAutofilled());
+}
+
+// Tests that |ClearPreview| properly clear previewed username and password
+// with username and password being previously autofilled.
+TEST_F(PasswordAutofillAgentTest,
+ ClearPreviewWithAutofilledUserNameAndPassword) {
+ username_element_.setValue(WebString::fromUTF8("ali"));
+ username_element_.setAutofilled(true);
+ password_element_.setValue(WebString::fromUTF8("sec"));
+ password_element_.setAutofilled(true);
+
+ // Simulate the browser sending the login info, but set |wait_for_username|
+ // to prevent the form from being immediately filled.
+ fill_data_.wait_for_username = true;
+ SimulateOnFillPasswordForm(fill_data_);
+
+ CheckTextFieldsDOMState("ali", true, "sec", true);
+
+ EXPECT_TRUE(password_autofill_->PreviewSuggestion(
+ username_element_, kAliceUsername, kAlicePassword));
+
+ EXPECT_TRUE(password_autofill_->ClearPreviewForTest(&username_element_,
+ &password_element_));
+
+ EXPECT_EQ(ASCIIToUTF16("ali"), username_element_.value());
+ EXPECT_TRUE(username_element_.suggestedValue().isEmpty());
+ EXPECT_TRUE(username_element_.isAutofilled());
+ EXPECT_EQ(ASCIIToUTF16("sec"), password_element_.value());
+ EXPECT_TRUE(password_element_.suggestedValue().isEmpty());
+ EXPECT_TRUE(password_element_.isAutofilled());
+}
+
+// Tests that |ClearPreview| properly clear previewed username and password
+// with neither username nor password being previously autofilled.
+TEST_F(PasswordAutofillAgentTest,
+ ClearPreviewWithNotAutofilledUserNameAndPassword) {
+ // Simulate the browser sending the login info, but set |wait_for_username|
+ // to prevent the form from being immediately filled.
+ fill_data_.wait_for_username = true;
+ SimulateOnFillPasswordForm(fill_data_);
+
+ CheckTextFieldsDOMState(std::string(), false, std::string(), false);
+
+ EXPECT_TRUE(password_autofill_->PreviewSuggestion(
+ username_element_, kAliceUsername, kAlicePassword));
+
+ EXPECT_TRUE(password_autofill_->ClearPreviewForTest(&username_element_,
+ &password_element_));
+
+ EXPECT_TRUE(username_element_.value().isEmpty());
+ EXPECT_TRUE(username_element_.suggestedValue().isEmpty());
+ EXPECT_FALSE(username_element_.isAutofilled());
+ EXPECT_TRUE(password_element_.value().isEmpty());
+ EXPECT_TRUE(password_element_.suggestedValue().isEmpty());
+ EXPECT_FALSE(password_element_.isAutofilled());
+}
+
// Tests that logging is off by default.
TEST_F(PasswordAutofillAgentTest, OnChangeLoggingState_NoMessage) {
render_thread_->sink().ClearMessages();

Powered by Google App Engine
This is Rietveld 408576698