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

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

Issue 773573004: Fill on account select in the password manager behind a flag (Closed) Base URL: https://chromium.googlesource.com/chromium/src@master
Patch Set: Fix browser_test crashes Created 6 years 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 572db2e7e211fa93b3ef5a5f8752fb6f150d531a..b0ed42553c2c1974c8d97be338bee9e7a3ae6ce5 100644
--- a/chrome/renderer/autofill/password_autofill_agent_browsertest.cc
+++ b/chrome/renderer/autofill/password_autofill_agent_browsertest.cc
@@ -11,6 +11,7 @@
#include "components/autofill/content/renderer/password_autofill_agent.h"
#include "components/autofill/content/renderer/test_password_autofill_agent.h"
#include "components/autofill/core/common/autofill_constants.h"
+#include "components/autofill/core/common/autofill_switches.h"
#include "components/autofill/core/common/form_data.h"
#include "components/autofill/core/common/form_field_data.h"
#include "content/public/renderer/render_frame.h"
@@ -416,8 +417,7 @@ class PasswordAutofillAgentTest : public ChromeRenderViewTest {
AutofillHostMsg_ShowPasswordSuggestions::Read(message, &args);
EXPECT_EQ(kPasswordFillFormDataId, args.a);
EXPECT_EQ(ASCIIToUTF16(username), args.c);
- int options = args.d;
- EXPECT_EQ(show_all, static_cast<bool>(options & autofill::SHOW_ALL));
+ EXPECT_EQ(show_all, static_cast<bool>(args.d & autofill::SHOW_ALL));
render_thread_->sink().ClearMessages();
}
@@ -1408,6 +1408,89 @@ TEST_F(PasswordAutofillAgentTest, CredentialsOnClick) {
CheckSuggestions(kAliceUsername, true);
}
+// Tests that there are no autosuggestions from the password manager when the
+// user clicks on the password field and the username field is editable when
+// FillOnAccountSelect is enabled.
+TEST_F(PasswordAutofillAgentTest,
+ FillOnAccountSelectOnlyNoCredentialsOnPasswordClick) {
+ CommandLine::ForCurrentProcess()->AppendSwitch(
+ autofill::switches::kEnableFillOnAccountSelect);
+
+ // Simulate the browser sending back the login info.
+ SimulateOnFillPasswordForm(fill_data_);
+
+ // Clear the text fields to start fresh.
+ ClearUsernameAndPasswordFields();
+
+ // Call SimulateElementClick() to produce a user gesture on the page so
+ // autofill will actually fill.
+ SimulateElementClick(kUsernameName);
+
+ // Simulate a user clicking on the password element. This should produce no
+ // message.
+ render_thread_->sink().ClearMessages();
+ static_cast<PageClickListener*>(autofill_agent_)
+ ->FormControlElementClicked(password_element_, false);
+ EXPECT_FALSE(render_thread_->sink().GetFirstMessageMatching(
+ AutofillHostMsg_ShowPasswordSuggestions::ID));
+}
+
+// Tests the autosuggestions that are given when a password element is clicked,
+// the username element is not editable, and FillOnAccountSelect is enabled.
+// Specifically, tests when the user clicks on the password element after page
+// load, and the corresponding username element is readonly (and thus
+// uneditable), that the credentials for the already-filled username are
+// suggested.
+TEST_F(PasswordAutofillAgentTest,
+ FillOnAccountSelectOnlyCredentialsOnPasswordClick) {
+ CommandLine::ForCurrentProcess()->AppendSwitch(
+ autofill::switches::kEnableFillOnAccountSelect);
+
+ // Simulate the browser sending back the login info.
+ SimulateOnFillPasswordForm(fill_data_);
+
+ // Clear the text fields to start fresh.
+ ClearUsernameAndPasswordFields();
+
+ // Simulate the page loading with a prefilled username element that is
+ // uneditable.
+ username_element_.setValue("alicia");
+ SetElementReadOnly(username_element_, true);
+
+ // Call SimulateElementClick() to produce a user gesture on the page so
+ // autofill will actually fill.
+ SimulateElementClick(kUsernameName);
+
+ // Simulate a user clicking on the password element. This should produce a
+ // message with "alicia" suggested as the credential.
+ render_thread_->sink().ClearMessages();
+ static_cast<PageClickListener*>(autofill_agent_)
+ ->FormControlElementClicked(password_element_, false);
+ CheckSuggestions("alicia", false);
+}
+
+// Tests that there are no autosuggestions from the password manager when the
+// user clicks on the password field (not the username field).
+TEST_F(PasswordAutofillAgentTest, NoCredentialsOnPasswordClick) {
+ // Simulate the browser sending back the login info.
+ SimulateOnFillPasswordForm(fill_data_);
+
+ // Clear the text fields to start fresh.
+ ClearUsernameAndPasswordFields();
+
+ // Call SimulateElementClick() to produce a user gesture on the page so
+ // autofill will actually fill.
+ SimulateElementClick(kUsernameName);
+
+ // Simulate a user clicking on the password element. This should produce no
+ // message.
+ render_thread_->sink().ClearMessages();
+ static_cast<PageClickListener*>(autofill_agent_)
+ ->FormControlElementClicked(password_element_, false);
+ EXPECT_FALSE(render_thread_->sink().GetFirstMessageMatching(
+ AutofillHostMsg_ShowPasswordSuggestions::ID));
+}
+
#endif // !defined(OS_ANDROID)
// The user types in a username and a password, but then just before sending
@@ -1545,4 +1628,42 @@ TEST_F(PasswordAutofillAgentTest,
CheckTextFieldsDOMState(kAliceUsername, true, kAlicePassword, true);
}
+TEST_F(PasswordAutofillAgentTest, FormFillDataMustHaveUsername) {
+ ClearUsernameAndPasswordFields();
+
+ PasswordFormFillData no_username_fill_data = fill_data_;
+ no_username_fill_data.username_field.name = base::string16();
+ SimulateOnFillPasswordForm(no_username_fill_data);
+
+ // The username and password should not have been autocompleted.
+ CheckTextFieldsState("", false, "", false);
+}
+
+TEST_F(PasswordAutofillAgentTest, FillOnAccountSelectOnly) {
+ CommandLine::ForCurrentProcess()->AppendSwitch(
+ autofill::switches::kEnableFillOnAccountSelect);
+
+ ClearUsernameAndPasswordFields();
+
+ // Simulate the browser sending back the login info for an initial page load.
+ SimulateOnFillPasswordForm(fill_data_);
+
+ CheckTextFieldsState(std::string(), true, std::string(), false);
+}
+
+TEST_F(PasswordAutofillAgentTest, FillOnAccountSelectOnlyReadonlyUsername) {
+ CommandLine::ForCurrentProcess()->AppendSwitch(
+ autofill::switches::kEnableFillOnAccountSelect);
+
+ ClearUsernameAndPasswordFields();
+
+ username_element_.setValue("alicia");
+ SetElementReadOnly(username_element_, true);
+
+ // Simulate the browser sending back the login info for an initial page load.
+ SimulateOnFillPasswordForm(fill_data_);
+
+ CheckTextFieldsState(std::string("alicia"), false, std::string(), true);
+}
+
} // namespace autofill

Powered by Google App Engine
This is Rietveld 408576698