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

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

Issue 2317983002: Enable manual password autofilling if the username field is read-only. (Closed)
Patch Set: Add IsAutocompletable check. Small tests refactoring. Created 4 years, 3 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 25a0b57f4f79ecbaa7951c4fa068149d41f77e34..f49d46516ffe97bea4af773924a03c8c1eb2717b 100644
--- a/chrome/renderer/autofill/password_autofill_agent_browsertest.cc
+++ b/chrome/renderer/autofill/password_autofill_agent_browsertest.cc
@@ -398,13 +398,11 @@ class PasswordAutofillAgentTest : public ChromeRenderViewTest {
const std::string& password,
bool password_autofilled,
bool checkSuggestedValue) {
- EXPECT_EQ(username,
- static_cast<std::string>(username_element.value().utf8()));
+ EXPECT_EQ(username, username_element.value().utf8());
EXPECT_EQ(username_autofilled, username_element.isAutofilled());
- EXPECT_EQ(password,
- static_cast<std::string>(
- checkSuggestedValue ? password_element.suggestedValue().utf8()
- : password_element.value().utf8()))
+ EXPECT_EQ(password, checkSuggestedValue
+ ? password_element.suggestedValue().utf8()
+ : password_element.value().utf8())
<< "checkSuggestedValue == " << checkSuggestedValue;
EXPECT_EQ(password_autofilled, password_element.isAutofilled());
}
@@ -997,6 +995,30 @@ TEST_F(PasswordAutofillAgentTest, FillSuggestion) {
CheckUsernameSelection(username_length, username_length);
}
+// Tests that |FillSuggestion| properly fills the password if username 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);
+
+ // 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);
+
+ // 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);
+}
+
// 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|
@@ -1021,13 +1043,9 @@ TEST_F(PasswordAutofillAgentTest, PreviewSuggestion) {
// with suggested values.
EXPECT_TRUE(password_autofill_agent_->PreviewSuggestion(
username_element_, kAliceUsername, kAlicePassword));
- EXPECT_EQ(
- kAliceUsername,
- static_cast<std::string>(username_element_.suggestedValue().utf8()));
+ EXPECT_EQ(kAliceUsername, username_element_.suggestedValue().utf8());
EXPECT_TRUE(username_element_.isAutofilled());
- EXPECT_EQ(
- kAlicePassword,
- static_cast<std::string>(password_element_.suggestedValue().utf8()));
+ EXPECT_EQ(kAlicePassword, password_element_.suggestedValue().utf8());
EXPECT_TRUE(password_element_.isAutofilled());
int username_length = strlen(kAliceUsername);
CheckUsernameSelection(0, username_length);
@@ -1036,18 +1054,44 @@ TEST_F(PasswordAutofillAgentTest, PreviewSuggestion) {
// sent to the renderer.
EXPECT_TRUE(password_autofill_agent_->PreviewSuggestion(
username_element_, kBobUsername, kCarolPassword));
- EXPECT_EQ(
- kBobUsername,
- static_cast<std::string>(username_element_.suggestedValue().utf8()));
+ EXPECT_EQ(kBobUsername, username_element_.suggestedValue().utf8());
EXPECT_TRUE(username_element_.isAutofilled());
- EXPECT_EQ(
- kCarolPassword,
- static_cast<std::string>(password_element_.suggestedValue().utf8()));
+ EXPECT_EQ(kCarolPassword, password_element_.suggestedValue().utf8());
EXPECT_TRUE(password_element_.isAutofilled());
username_length = strlen(kBobUsername);
CheckUsernameSelection(0, username_length);
}
+// Tests that |PreviewSuggestion| properly previews the password if username is
+// read-only.
+TEST_F(PasswordAutofillAgentTest, PreviewSuggestionIfUsernameReadOnly) {
+ // 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);
+
+ // 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());
+
+ // 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(
+ 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());
+}
+
// Tests that |PreviewSuggestion| properly sets the username selection range.
TEST_F(PasswordAutofillAgentTest, PreviewSuggestionSelectionRange) {
username_element_.setValue(WebString::fromUTF8("ali"));
@@ -1063,13 +1107,9 @@ TEST_F(PasswordAutofillAgentTest, PreviewSuggestionSelectionRange) {
EXPECT_TRUE(password_autofill_agent_->PreviewSuggestion(
username_element_, kAliceUsername, kAlicePassword));
- EXPECT_EQ(
- kAliceUsername,
- static_cast<std::string>(username_element_.suggestedValue().utf8()));
+ EXPECT_EQ(kAliceUsername, username_element_.suggestedValue().utf8());
EXPECT_TRUE(username_element_.isAutofilled());
- EXPECT_EQ(
- kAlicePassword,
- static_cast<std::string>(password_element_.suggestedValue().utf8()));
+ EXPECT_EQ(kAlicePassword, password_element_.suggestedValue().utf8());
EXPECT_TRUE(password_element_.isAutofilled());
int username_length = strlen(kAliceUsername);
CheckUsernameSelection(3, username_length);
« 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