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 b598bccc4fcb37a6a5a88c990ed3e5e10b49855d..1eccec80307b691487a5fb9e22d8121618091f95 100644 |
--- a/chrome/renderer/autofill/password_autofill_agent_browsertest.cc |
+++ b/chrome/renderer/autofill/password_autofill_agent_browsertest.cc |
@@ -177,18 +177,6 @@ const char kJavaScriptClick[] = |
"form.dispatchEvent(event);" |
"console.log('clicked!');"; |
-const char kOnChangeDetectionScript[] = |
- "<script>" |
- " usernameOnchangeCalled = false;" |
- " passwordOnchangeCalled = false;" |
- " document.getElementById('username').onchange = function() {" |
- " usernameOnchangeCalled = true;" |
- " };" |
- " document.getElementById('password').onchange = function() {" |
- " passwordOnchangeCalled = true;" |
- " };" |
- "</script>"; |
- |
const char kFormHTMLWithTwoTextFields[] = |
"<FORM name='LoginTestForm' id='LoginTestForm' " |
"action='http://www.bidule.com'>" |
@@ -551,6 +539,17 @@ class PasswordAutofillAgentTest : public ChromeRenderViewTest { |
EXPECT_EQ(ASCIIToUTF16(new_password_value), form.new_password_value); |
} |
+ void CheckIfEventsAreCalled(const std::vector<std::string> checkers, |
vabr (Chromium)
2017/03/17 12:01:06
Please pass the vector by (const) reference, not b
kolos1
2017/03/17 12:47:36
Done.
|
+ bool expected) { |
+ for (const std::string& variable : checkers) { |
+ int value; |
+ EXPECT_TRUE(ExecuteJavaScriptAndReturnIntValue( |
+ base::UTF8ToUTF16(variable), &value)) |
+ << variable; |
+ EXPECT_EQ(expected, value == 1) << variable; |
+ } |
+ } |
+ |
bool GetCalledShowPasswordGenerationPopup() { |
fake_pw_client_.Flush(); |
return fake_pw_client_.called_show_pw_generation_popup(); |
@@ -919,11 +918,18 @@ TEST_F(PasswordAutofillAgentTest, NoDOMActivationTest) { |
// forms that are filled on page load. |
TEST_F(PasswordAutofillAgentTest, |
PasswordAutofillTriggersOnChangeEventsOnLoad) { |
- std::string html = std::string(kFormHTML) + kOnChangeDetectionScript; |
+ std::string html = std::string(kFormHTML); |
LoadHTML(html.c_str()); |
UpdateOriginForHTML(html); |
UpdateUsernameAndPasswordElements(); |
+ std::vector<std::string> username_event_checkers; |
+ std::vector<std::string> password_event_checkers; |
+ std::string events_registration_script = |
+ CreateScriptToRegisterListeners(kUsernameName, &username_event_checkers) + |
+ CreateScriptToRegisterListeners(kPasswordName, &password_event_checkers); |
+ ExecuteJavaScriptForTests(events_registration_script.c_str()); |
+ |
// Simulate the browser sending back the login info, it triggers the |
// autocomplete. |
SimulateOnFillPasswordForm(fill_data_); |
@@ -936,19 +942,10 @@ TEST_F(PasswordAutofillAgentTest, |
// A JavaScript onChange event should have been triggered for the username, |
// but not yet for the password. |
- int username_onchange_called = -1; |
- int password_onchange_called = -1; |
- ASSERT_TRUE( |
- ExecuteJavaScriptAndReturnIntValue( |
- ASCIIToUTF16("usernameOnchangeCalled ? 1 : 0"), |
- &username_onchange_called)); |
- EXPECT_EQ(1, username_onchange_called); |
- ASSERT_TRUE( |
- ExecuteJavaScriptAndReturnIntValue( |
- ASCIIToUTF16("passwordOnchangeCalled ? 1 : 0"), |
- &password_onchange_called)); |
+ |
+ CheckIfEventsAreCalled(username_event_checkers, true); |
// TODO(isherman): Re-enable this check once http://crbug.com/333144 is fixed. |
vabr (Chromium)
2017/03/17 12:01:07
This comment looks obsoleted by your changes.
kolos1
2017/03/17 12:47:36
Done.
|
- // EXPECT_EQ(0, password_onchange_called); |
+ CheckIfEventsAreCalled(password_event_checkers, false); |
// Simulate a user click so that the password field's real value is filled. |
SimulateElementClick(kUsernameName); |
@@ -956,22 +953,24 @@ TEST_F(PasswordAutofillAgentTest, |
// Now, a JavaScript onChange event should have been triggered for the |
// password as well. |
- ASSERT_TRUE( |
- ExecuteJavaScriptAndReturnIntValue( |
- ASCIIToUTF16("passwordOnchangeCalled ? 1 : 0"), |
- &password_onchange_called)); |
- EXPECT_EQ(1, password_onchange_called); |
+ CheckIfEventsAreCalled(password_event_checkers, true); |
} |
// Verifies that password autofill triggers onChange events in JavaScript for |
// forms that are filled after page load. |
TEST_F(PasswordAutofillAgentTest, |
PasswordAutofillTriggersOnChangeEventsWaitForUsername) { |
- std::string html = std::string(kFormHTML) + kOnChangeDetectionScript; |
+ std::string html = std::string(kFormHTML); |
LoadHTML(html.c_str()); |
UpdateOriginForHTML(html); |
UpdateUsernameAndPasswordElements(); |
+ std::vector<std::string> event_checkers; |
+ std::string events_registration_script = |
+ CreateScriptToRegisterListeners(kUsernameName, &event_checkers) + |
+ CreateScriptToRegisterListeners(kPasswordName, &event_checkers); |
+ ExecuteJavaScriptForTests(events_registration_script.c_str()); |
+ |
// Simulate the browser sending back the login info, it triggers the |
// autocomplete. |
fill_data_.wait_for_username = true; |
@@ -987,6 +986,10 @@ TEST_F(PasswordAutofillAgentTest, |
// Simulate the user entering the first letter of their username and selecting |
// the matching autofill from the dropdown. |
SimulateUsernameChange("a"); |
+ // Since the username element has focus, blur event will ne be triggered. |
+ event_checkers.erase(std::remove(event_checkers.begin(), event_checkers.end(), |
vabr (Chromium)
2017/03/17 12:01:06
Please use base::Erase instead (this is a recent c
kolos1
2017/03/17 12:47:36
Done.
|
+ "username_blur_event"), |
+ event_checkers.end()); |
SimulateSuggestionChoice(username_element_); |
// The username and password should now have been autocompleted. |
@@ -994,18 +997,7 @@ TEST_F(PasswordAutofillAgentTest, |
// JavaScript onChange events should have been triggered both for the username |
// and for the password. |
- int username_onchange_called = -1; |
- int password_onchange_called = -1; |
- ASSERT_TRUE( |
- ExecuteJavaScriptAndReturnIntValue( |
- ASCIIToUTF16("usernameOnchangeCalled ? 1 : 0"), |
- &username_onchange_called)); |
- EXPECT_EQ(1, username_onchange_called); |
- ASSERT_TRUE( |
- ExecuteJavaScriptAndReturnIntValue( |
- ASCIIToUTF16("passwordOnchangeCalled ? 1 : 0"), |
- &password_onchange_called)); |
- EXPECT_EQ(1, password_onchange_called); |
+ CheckIfEventsAreCalled(event_checkers, true); |
} |
// Tests that |FillSuggestion| properly fills the username and password. |