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

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

Issue 2902113004: Autofill username when the user interacts with the password field. (Closed)
Patch Set: Address comments from kolos@. Created 3 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
« no previous file with comments | « no previous file | components/autofill/content/renderer/password_autofill_agent.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 f6d1a25446a6be6efba8edb24495bb3c9931251c..4ecc55cae7b919cb062353bd14f008b17e278752 100644
--- a/chrome/renderer/autofill/password_autofill_agent_browsertest.cc
+++ b/chrome/renderer/autofill/password_autofill_agent_browsertest.cc
@@ -387,9 +387,11 @@ class PasswordAutofillAgentTest : public ChromeRenderViewTest {
}
void ClearUsernameAndPasswordFields() {
- username_element_.SetValue("");
+ username_element_.SetValue(WebString());
+ username_element_.SetSuggestedValue(WebString());
username_element_.SetAutofilled(false);
- password_element_.SetValue("");
+ password_element_.SetValue(WebString());
+ password_element_.SetSuggestedValue(WebString());
password_element_.SetAutofilled(false);
}
@@ -426,13 +428,18 @@ class PasswordAutofillAgentTest : public ChromeRenderViewTest {
const WebInputElement& password_element,
const std::string& password,
bool password_autofilled,
- bool checkSuggestedValue) {
- EXPECT_EQ(username, username_element.Value().Utf8());
+ bool check_suggested_username,
+ bool check_suggested_password) {
+ EXPECT_EQ(username, check_suggested_username
+ ? username_element.SuggestedValue().Utf8()
+ : username_element.Value().Utf8())
+ << "check_suggested_username == " << check_suggested_username;
EXPECT_EQ(username_autofilled, username_element.IsAutofilled());
- EXPECT_EQ(password, checkSuggestedValue
+
+ EXPECT_EQ(password, check_suggested_password
? password_element.SuggestedValue().Utf8()
: password_element.Value().Utf8())
- << "checkSuggestedValue == " << checkSuggestedValue;
+ << "check_suggested_password == " << check_suggested_password;
EXPECT_EQ(password_autofilled, password_element.IsAutofilled());
}
@@ -442,13 +449,10 @@ class PasswordAutofillAgentTest : public ChromeRenderViewTest {
bool username_autofilled,
const std::string& password,
bool password_autofilled) {
- CheckTextFieldsStateForElements(username_element_,
- username,
- username_autofilled,
- password_element_,
- password,
- password_autofilled,
- true);
+ CheckTextFieldsStateForElements(
+ username_element_, username, username_autofilled, password_element_,
+ password, password_autofilled, false /* check_suggested_username */,
+ true /* check_suggested_password */);
}
// Checks the DOM-accessible value of the username element and the
@@ -457,13 +461,30 @@ class PasswordAutofillAgentTest : public ChromeRenderViewTest {
bool username_autofilled,
const std::string& password,
bool password_autofilled) {
- CheckTextFieldsStateForElements(username_element_,
- username,
- username_autofilled,
- password_element_,
- password,
- password_autofilled,
- false);
+ CheckTextFieldsStateForElements(
+ username_element_, username, username_autofilled, password_element_,
+ password, password_autofilled, false /* check_suggested_username */,
+ false /* check_suggested_password */);
+ }
+
+ // Checks the suggested values of the |username| and |password| elements.
+ void CheckTextFieldsSuggestedState(const std::string& username,
+ bool username_autofilled,
+ const std::string& password,
+ bool password_autofilled) {
+ CheckTextFieldsStateForElements(
+ username_element_, username, username_autofilled, password_element_,
+ password, password_autofilled, true /* check_suggested_username */,
+ true /* check_suggested_password */);
+ }
+
+ void ResetFieldState(WebInputElement* element,
+ const std::string& value = std::string(),
+ bool is_autofilled = false) {
+ element->SetValue(WebString::FromUTF8(value));
+ element->SetSuggestedValue(WebString());
+ element->SetAutofilled(is_autofilled);
+ element->SetSelectionRange(value.size(), value.size());
}
void CheckUsernameSelection(int start, int end) {
@@ -1128,100 +1149,155 @@ TEST_F(PasswordAutofillAgentTest, FillSuggestion) {
fill_data_.wait_for_username = true;
SimulateOnFillPasswordForm(fill_data_);
- // Neither field should have been autocompleted.
- CheckTextFieldsDOMState(std::string(), false, std::string(), false);
+ for (const auto& selected_element : {username_element_, password_element_}) {
+ // Neither field should be 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_agent_->FillSuggestion(
+ selected_element, ASCIIToUTF16(kAliceUsername),
+ ASCIIToUTF16(kAlicePassword)));
+ CheckTextFieldsDOMState(std::string(), false, std::string(), false);
+ SetElementReadOnly(password_element_, false);
+
+ // After filling with the suggestion, both fields should be autocompleted.
+ EXPECT_TRUE(password_autofill_agent_->FillSuggestion(
+ selected_element, ASCIIToUTF16(kAliceUsername),
+ ASCIIToUTF16(kAlicePassword)));
+ CheckTextFieldsDOMState(kAliceUsername, true, kAlicePassword, true);
+ int username_length = strlen(kAliceUsername);
+ CheckUsernameSelection(username_length, username_length);
+
+ // Try Filling with a suggestion with password different from the one that
+ // was initially sent to the renderer.
+ EXPECT_TRUE(password_autofill_agent_->FillSuggestion(
+ selected_element, ASCIIToUTF16(kBobUsername),
+ ASCIIToUTF16(kCarolPassword)));
+ CheckTextFieldsDOMState(kBobUsername, true, kCarolPassword, true);
+ username_length = strlen(kBobUsername);
+ CheckUsernameSelection(username_length, username_length);
+
+ ClearUsernameAndPasswordFields();
+ }
+}
- // If the password field is not autocompletable, it should not be affected.
- SetElementReadOnly(password_element_, true);
- EXPECT_FALSE(password_autofill_agent_->FillSuggestion(
- username_element_, ASCIIToUTF16(kAliceUsername),
- ASCIIToUTF16(kAlicePassword)));
- CheckTextFieldsDOMState(std::string(), false, std::string(), false);
- SetElementReadOnly(password_element_, false);
+// Tests that |FillSuggestion| doesn't change non-empty non-autofilled username
+// when interacting with the password field.
+TEST_F(PasswordAutofillAgentTest,
+ FillSuggestionFromPasswordFieldWithUsernameManuallyFilled) {
+ username_element_.SetValue(WebString::FromUTF8("user1"));
- // After filling with the suggestion, both fields should be autocompleted.
+ // 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("user1", false, std::string(), false);
+
+ // Only password field should be autocompleted.
EXPECT_TRUE(password_autofill_agent_->FillSuggestion(
- username_element_, ASCIIToUTF16(kAliceUsername),
+ password_element_, ASCIIToUTF16(kAliceUsername),
ASCIIToUTF16(kAlicePassword)));
- CheckTextFieldsDOMState(kAliceUsername, true, kAlicePassword, true);
- int username_length = strlen(kAliceUsername);
- CheckUsernameSelection(username_length, username_length);
+ CheckTextFieldsDOMState("user1", false, kAlicePassword, true);
- // Try Filling with a suggestion with password different from the one that was
- // initially sent to the renderer.
+ // Try Filling with a different password. Only password should be changed.
kolos1 2017/05/29 09:17:11 Thanks for adding a subtest for this.
pkalinnikov 2017/05/29 09:20:45 Welcome :)
EXPECT_TRUE(password_autofill_agent_->FillSuggestion(
- username_element_, ASCIIToUTF16(kBobUsername),
+ password_element_, ASCIIToUTF16(kBobUsername),
ASCIIToUTF16(kCarolPassword)));
- CheckTextFieldsDOMState(kBobUsername, true, kCarolPassword, true);
- username_length = strlen(kBobUsername);
- CheckUsernameSelection(username_length, username_length);
+ CheckTextFieldsDOMState("user1", false, kCarolPassword, true);
}
-// Tests that |FillSuggestion| properly fills the password if username is
-// read-only.
+// Tests that |FillSuggestion| properly fills the password if the username field
+// is read-only.
TEST_F(PasswordAutofillAgentTest, FillSuggestionIfUsernameReadOnly) {
// Simulate the browser sending the login info.
SetElementReadOnly(username_element_, true);
SimulateOnFillPasswordForm(fill_data_);
- // Neither field should have been autocompleted.
- CheckTextFieldsDOMState(std::string(), false, std::string(), false);
+ for (const auto& selected_element : {username_element_, password_element_}) {
+ // Neither field should be autocompleted.
+ CheckTextFieldsDOMState(std::string(), false, std::string(), false);
- // Username field is not autocompletable, it should not be affected.
- EXPECT_TRUE(password_autofill_agent_->FillSuggestion(
- password_element_, ASCIIToUTF16(kAliceUsername),
- ASCIIToUTF16(kAlicePassword)));
- CheckTextFieldsDOMState(std::string(), false, kAlicePassword, true);
+ // Username field is not autocompletable, it should not be affected.
+ EXPECT_TRUE(password_autofill_agent_->FillSuggestion(
+ selected_element, ASCIIToUTF16(kAliceUsername),
+ ASCIIToUTF16(kAlicePassword)));
+ CheckTextFieldsDOMState(std::string(), false, kAlicePassword, true);
- // Try Filling with a suggestion with password different from the one that was
- // initially sent to the renderer.
- EXPECT_TRUE(password_autofill_agent_->FillSuggestion(
- password_element_, ASCIIToUTF16(kBobUsername),
- ASCIIToUTF16(kCarolPassword)));
- CheckTextFieldsDOMState(std::string(), false, kCarolPassword, true);
+ // Try Filling with a suggestion with password different from the one that
+ // was initially sent to the renderer.
+ EXPECT_TRUE(password_autofill_agent_->FillSuggestion(
+ selected_element, ASCIIToUTF16(kBobUsername),
+ ASCIIToUTF16(kCarolPassword)));
+ CheckTextFieldsDOMState(std::string(), false, kCarolPassword, true);
+
+ ClearUsernameAndPasswordFields();
+ }
}
// 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.
+ // 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);
+ for (const auto& selected_element : {username_element_, password_element_}) {
+ // Neither field should be 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_agent_->PreviewSuggestion(
+ selected_element, kAliceUsername, kAlicePassword));
+ CheckTextFieldsSuggestedState(std::string(), false, std::string(), false);
+ SetElementReadOnly(password_element_, false);
+
+ // After selecting the suggestion, both fields should be previewed with
+ // suggested values.
+ EXPECT_TRUE(password_autofill_agent_->PreviewSuggestion(
+ selected_element, kAliceUsername, kAlicePassword));
+ CheckTextFieldsSuggestedState(kAliceUsername, true, kAlicePassword, true);
+ int username_length = strlen(kAliceUsername);
+ CheckUsernameSelection(0, username_length);
+
+ // Try previewing with a password different from the one that was initially
+ // sent to the renderer.
+ EXPECT_TRUE(password_autofill_agent_->PreviewSuggestion(
+ selected_element, kBobUsername, kCarolPassword));
+ CheckTextFieldsSuggestedState(kBobUsername, true, kCarolPassword, true);
+ username_length = strlen(kBobUsername);
+ CheckUsernameSelection(0, username_length);
+
+ ClearUsernameAndPasswordFields();
+ }
+}
- // If the password field is not autocompletable, it should not be affected.
- SetElementReadOnly(password_element_, true);
- EXPECT_FALSE(password_autofill_agent_->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);
+// Tests that |PreviewSuggestion| doesn't change non-empty non-autofilled
+// username when previewing autofills on interacting with the password field.
+TEST_F(PasswordAutofillAgentTest,
+ PreviewSuggestionFromPasswordFieldWithUsernameManuallyFilled) {
+ username_element_.SetValue(WebString::FromUTF8("user1"));
+
+ // 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("user1", false, std::string(), false);
- // After selecting the suggestion, both fields should be previewed
- // with suggested values.
+ // Only password field should be autocompleted.
EXPECT_TRUE(password_autofill_agent_->PreviewSuggestion(
- username_element_, kAliceUsername, kAlicePassword));
- EXPECT_EQ(kAliceUsername, username_element_.SuggestedValue().Utf8());
- EXPECT_TRUE(username_element_.IsAutofilled());
- EXPECT_EQ(kAlicePassword, password_element_.SuggestedValue().Utf8());
- EXPECT_TRUE(password_element_.IsAutofilled());
- int username_length = strlen(kAliceUsername);
- CheckUsernameSelection(0, username_length);
+ password_element_, kAliceUsername, kAlicePassword));
+ CheckTextFieldsSuggestedState(std::string(), false, kAlicePassword, true);
+ CheckTextFieldsDOMState("user1", false, std::string(), true);
- // Try previewing with a password different from the one that was initially
- // sent to the renderer.
+ // Try previewing with a different password. Only password should be changed.
EXPECT_TRUE(password_autofill_agent_->PreviewSuggestion(
- username_element_, kBobUsername, kCarolPassword));
- EXPECT_EQ(kBobUsername, username_element_.SuggestedValue().Utf8());
- EXPECT_TRUE(username_element_.IsAutofilled());
- EXPECT_EQ(kCarolPassword, password_element_.SuggestedValue().Utf8());
- EXPECT_TRUE(password_element_.IsAutofilled());
- username_length = strlen(kBobUsername);
- CheckUsernameSelection(0, username_length);
+ password_element_, kBobUsername, kCarolPassword));
+ CheckTextFieldsSuggestedState(std::string(), false, kCarolPassword, true);
+ CheckTextFieldsDOMState("user1", false, std::string(), true);
}
// Tests that |PreviewSuggestion| properly previews the password if username is
@@ -1231,57 +1307,49 @@ TEST_F(PasswordAutofillAgentTest, PreviewSuggestionIfUsernameReadOnly) {
SetElementReadOnly(username_element_, true);
SimulateOnFillPasswordForm(fill_data_);
- // Neither field should have been autocompleted.
- CheckTextFieldsDOMState(std::string(), false, std::string(), false);
+ for (const auto& selected_element : {username_element_, password_element_}) {
+ // Neither field should be autocompleted.
+ CheckTextFieldsDOMState(std::string(), false, std::string(), false);
- // Username field is not autocompletable, it should not be affected.
- EXPECT_TRUE(password_autofill_agent_->PreviewSuggestion(
- password_element_, kAliceUsername, kAlicePassword));
- EXPECT_EQ(std::string(), username_element_.SuggestedValue().Utf8());
- EXPECT_FALSE(username_element_.IsAutofilled());
+ // Username field is not autocompletable, it should not be affected.
+ EXPECT_TRUE(password_autofill_agent_->PreviewSuggestion(
+ selected_element, kAliceUsername, kAlicePassword));
+ // Password field must be autofilled.
+ CheckTextFieldsSuggestedState(std::string(), false, kAlicePassword, true);
- // Password field must be autofilled.
- EXPECT_EQ(kAlicePassword, password_element_.SuggestedValue().Utf8());
- EXPECT_TRUE(password_element_.IsAutofilled());
+ // Try previewing with a password different from the one that was initially
+ // sent to the renderer.
+ EXPECT_TRUE(password_autofill_agent_->PreviewSuggestion(
+ selected_element, kBobUsername, kCarolPassword));
+ CheckTextFieldsSuggestedState(std::string(), false, kCarolPassword, true);
- // Try previewing with a password different from the one that was initially
- // sent to the renderer.
- EXPECT_TRUE(password_autofill_agent_->PreviewSuggestion(
- password_element_, kBobUsername, kCarolPassword));
- EXPECT_EQ(std::string(), username_element_.SuggestedValue().Utf8());
- EXPECT_FALSE(username_element_.IsAutofilled());
- EXPECT_EQ(kCarolPassword, password_element_.SuggestedValue().Utf8());
- EXPECT_TRUE(password_element_.IsAutofilled());
+ ClearUsernameAndPasswordFields();
+ }
}
// Tests that |PreviewSuggestion| properly sets the username selection range.
TEST_F(PasswordAutofillAgentTest, PreviewSuggestionSelectionRange) {
- username_element_.SetValue(WebString::FromUTF8("ali"));
- username_element_.SetSelectionRange(3, 3);
- 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_agent_->PreviewSuggestion(
- username_element_, kAliceUsername, kAlicePassword));
- EXPECT_EQ(kAliceUsername, username_element_.SuggestedValue().Utf8());
- EXPECT_TRUE(username_element_.IsAutofilled());
- EXPECT_EQ(kAlicePassword, password_element_.SuggestedValue().Utf8());
- EXPECT_TRUE(password_element_.IsAutofilled());
- int username_length = strlen(kAliceUsername);
- CheckUsernameSelection(3, username_length);
+ for (const auto& selected_element : {username_element_, password_element_}) {
+ ResetFieldState(&username_element_, "ali", true);
+ ResetFieldState(&password_element_);
+
+ EXPECT_TRUE(password_autofill_agent_->PreviewSuggestion(
+ selected_element, kAliceUsername, kAlicePassword));
+ CheckTextFieldsSuggestedState(kAliceUsername, true, kAlicePassword, true);
+ int username_length = strlen(kAliceUsername);
+ CheckUsernameSelection(3, username_length);
+ }
}
// Tests that |ClearPreview| properly clears previewed username and password
// with password being previously autofilled.
TEST_F(PasswordAutofillAgentTest, ClearPreviewWithPasswordAutofilled) {
- password_element_.SetValue(WebString::FromUTF8("sec"));
- password_element_.SetAutofilled(true);
+ ResetFieldState(&password_element_, "sec", true);
// Simulate the browser sending the login info, but set |wait_for_username|
// to prevent the form from being immediately filled.
@@ -1290,27 +1358,24 @@ TEST_F(PasswordAutofillAgentTest, ClearPreviewWithPasswordAutofilled) {
CheckTextFieldsDOMState(std::string(), false, "sec", true);
- EXPECT_TRUE(password_autofill_agent_->PreviewSuggestion(
- username_element_, kAliceUsername, kAlicePassword));
-
- EXPECT_TRUE(
- password_autofill_agent_->DidClearAutofillSelection(username_element_));
+ for (const auto& selected_element : {username_element_, password_element_}) {
+ EXPECT_TRUE(password_autofill_agent_->PreviewSuggestion(
+ selected_element, kAliceUsername, kAlicePassword));
+ EXPECT_TRUE(
+ password_autofill_agent_->DidClearAutofillSelection(selected_element));
- EXPECT_TRUE(username_element_.Value().IsEmpty());
- EXPECT_TRUE(username_element_.SuggestedValue().IsEmpty());
- EXPECT_FALSE(username_element_.IsAutofilled());
- EXPECT_EQ(ASCIIToUTF16("sec"), password_element_.Value().Utf16());
- EXPECT_TRUE(password_element_.SuggestedValue().IsEmpty());
- EXPECT_TRUE(password_element_.IsAutofilled());
- CheckUsernameSelection(0, 0);
+ EXPECT_TRUE(username_element_.SuggestedValue().IsEmpty());
+ EXPECT_TRUE(password_element_.SuggestedValue().IsEmpty());
+ CheckTextFieldsDOMState(std::string(), false, "sec", true);
+ CheckUsernameSelection(0, 0);
+ }
}
// Tests that |ClearPreview| properly clears previewed username and password
// with username being previously autofilled.
TEST_F(PasswordAutofillAgentTest, ClearPreviewWithUsernameAutofilled) {
- username_element_.SetValue(WebString::FromUTF8("ali"));
+ ResetFieldState(&username_element_, "ali", true);
username_element_.SetSelectionRange(3, 3);
- username_element_.SetAutofilled(true);
// Simulate the browser sending the login info, but set |wait_for_username|
// to prevent the form from being immediately filled.
@@ -1319,30 +1384,25 @@ TEST_F(PasswordAutofillAgentTest, ClearPreviewWithUsernameAutofilled) {
CheckTextFieldsDOMState("ali", true, std::string(), false);
- EXPECT_TRUE(password_autofill_agent_->PreviewSuggestion(
- username_element_, kAliceUsername, kAlicePassword));
-
- EXPECT_TRUE(
- password_autofill_agent_->DidClearAutofillSelection(username_element_));
+ for (const auto& selected_element : {username_element_, password_element_}) {
+ EXPECT_TRUE(password_autofill_agent_->PreviewSuggestion(
+ selected_element, kAliceUsername, kAlicePassword));
+ EXPECT_TRUE(
+ password_autofill_agent_->DidClearAutofillSelection(selected_element));
- EXPECT_EQ(ASCIIToUTF16("ali"), username_element_.Value().Utf16());
- 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());
- CheckUsernameSelection(3, 3);
+ EXPECT_TRUE(username_element_.SuggestedValue().IsEmpty());
+ EXPECT_TRUE(password_element_.SuggestedValue().IsEmpty());
+ CheckTextFieldsDOMState("ali", true, std::string(), false);
+ CheckUsernameSelection(3, 3);
+ }
}
// Tests that |ClearPreview| properly clears previewed username and password
// with username and password being previously autofilled.
TEST_F(PasswordAutofillAgentTest,
ClearPreviewWithAutofilledUsernameAndPassword) {
- username_element_.SetValue(WebString::FromUTF8("ali"));
- username_element_.SetSelectionRange(3, 3);
- username_element_.SetAutofilled(true);
- password_element_.SetValue(WebString::FromUTF8("sec"));
- password_element_.SetAutofilled(true);
+ ResetFieldState(&username_element_, "ali", true);
+ ResetFieldState(&password_element_, "sec", true);
// Simulate the browser sending the login info, but set |wait_for_username|
// to prevent the form from being immediately filled.
@@ -1351,19 +1411,17 @@ TEST_F(PasswordAutofillAgentTest,
CheckTextFieldsDOMState("ali", true, "sec", true);
- EXPECT_TRUE(password_autofill_agent_->PreviewSuggestion(
- username_element_, kAliceUsername, kAlicePassword));
-
- EXPECT_TRUE(
- password_autofill_agent_->DidClearAutofillSelection(username_element_));
+ for (const auto& selected_element : {username_element_, password_element_}) {
+ EXPECT_TRUE(password_autofill_agent_->PreviewSuggestion(
+ selected_element, kAliceUsername, kAlicePassword));
+ EXPECT_TRUE(
+ password_autofill_agent_->DidClearAutofillSelection(selected_element));
- EXPECT_EQ(ASCIIToUTF16("ali"), username_element_.Value().Utf16());
- EXPECT_TRUE(username_element_.SuggestedValue().IsEmpty());
- EXPECT_TRUE(username_element_.IsAutofilled());
- EXPECT_EQ(ASCIIToUTF16("sec"), password_element_.Value().Utf16());
- EXPECT_TRUE(password_element_.SuggestedValue().IsEmpty());
- EXPECT_TRUE(password_element_.IsAutofilled());
- CheckUsernameSelection(3, 3);
+ EXPECT_TRUE(username_element_.SuggestedValue().IsEmpty());
+ EXPECT_TRUE(password_element_.SuggestedValue().IsEmpty());
+ CheckTextFieldsDOMState("ali", true, "sec", true);
+ CheckUsernameSelection(3, 3);
+ }
}
// Tests that |ClearPreview| properly clears previewed username and password
@@ -1377,19 +1435,17 @@ TEST_F(PasswordAutofillAgentTest,
CheckTextFieldsDOMState(std::string(), false, std::string(), false);
- EXPECT_TRUE(password_autofill_agent_->PreviewSuggestion(
- username_element_, kAliceUsername, kAlicePassword));
-
- EXPECT_TRUE(
- password_autofill_agent_->DidClearAutofillSelection(username_element_));
+ for (const auto& selected_element : {username_element_, password_element_}) {
+ EXPECT_TRUE(password_autofill_agent_->PreviewSuggestion(
+ selected_element, kAliceUsername, kAlicePassword));
+ EXPECT_TRUE(
+ password_autofill_agent_->DidClearAutofillSelection(selected_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());
- CheckUsernameSelection(0, 0);
+ EXPECT_TRUE(username_element_.SuggestedValue().IsEmpty());
+ EXPECT_TRUE(password_element_.SuggestedValue().IsEmpty());
+ CheckTextFieldsDOMState(std::string(), false, std::string(), false);
+ CheckUsernameSelection(0, 0);
+ }
}
// Tests that logging is off by default.
@@ -2165,35 +2221,17 @@ TEST_F(PasswordAutofillAgentTest, FillSuggestionPasswordChangeForms) {
fill_data_.is_possible_change_password_form = true;
SimulateOnFillPasswordForm(fill_data_);
- // Neither field should have been autocompleted.
- CheckTextFieldsDOMState(std::string(), false, std::string(), false);
-
- EXPECT_TRUE(password_autofill_agent_->FillSuggestion(
- username_element_, ASCIIToUTF16(kAliceUsername),
- ASCIIToUTF16(kAlicePassword)));
- CheckTextFieldsDOMState(kAliceUsername, true, kAlicePassword, true);
-}
-
-// Tests that a password change form is properly filled with the password when
-// the user click on the password field.
-TEST_F(PasswordAutofillAgentTest,
- FillSuggestionPasswordChangeFormsOnlyPassword) {
- LoadHTML(kPasswordChangeFormHTML);
- UpdateOriginForHTML(kPasswordChangeFormHTML);
- UpdateUsernameAndPasswordElements();
- // 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;
- fill_data_.is_possible_change_password_form = true;
- SimulateOnFillPasswordForm(fill_data_);
+ for (const auto& selected_element : {username_element_, password_element_}) {
+ // Neither field should be autocompleted.
+ CheckTextFieldsDOMState(std::string(), false, std::string(), false);
- // Neither field should have been autocompleted.
- CheckTextFieldsDOMState(std::string(), false, std::string(), false);
+ EXPECT_TRUE(password_autofill_agent_->FillSuggestion(
+ selected_element, ASCIIToUTF16(kAliceUsername),
+ ASCIIToUTF16(kAlicePassword)));
+ CheckTextFieldsDOMState(kAliceUsername, true, kAlicePassword, true);
- EXPECT_TRUE(password_autofill_agent_->FillSuggestion(
- password_element_, ASCIIToUTF16(kAliceUsername),
- ASCIIToUTF16(kAlicePassword)));
- CheckTextFieldsDOMState("", false, kAlicePassword, true);
+ ClearUsernameAndPasswordFields();
+ }
}
// Tests that one user click on a username field is sufficient to bring up a
« no previous file with comments | « no previous file | components/autofill/content/renderer/password_autofill_agent.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698