Chromium Code Reviews| 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 fbdc312d3bfbb4cdde3a9f41be60d7197598fb8f..d1a69a75e23e0a246de3f9eb1c76dadc2ecdc805 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,16 @@ class PasswordAutofillAgentTest : public ChromeRenderViewTest { | 
| EXPECT_EQ(ASCIIToUTF16(new_password_value), form.new_password_value); | 
| } | 
| + void CheckIfEventsAreCalled(const std::vector<base::string16>& checkers, | 
| + bool expected) { | 
| + for (const base::string16& variable : checkers) { | 
| + int value; | 
| + EXPECT_TRUE(ExecuteJavaScriptAndReturnIntValue(variable, &value)) | 
| + << variable; | 
| + EXPECT_EQ(expected, value == 1) << variable; | 
| + } | 
| + } | 
| + | 
| bool GetCalledShowPasswordGenerationPopup() { | 
| fake_pw_client_.Flush(); | 
| return fake_pw_client_.called_show_pw_generation_popup(); | 
| @@ -915,11 +913,16 @@ TEST_F(PasswordAutofillAgentTest, NoDOMActivationTest) { | 
| CheckTextFieldsDOMState(kAliceUsername, true, "", true); | 
| } | 
| -// Verifies that password autofill triggers onChange events in JavaScript for | 
| -// forms that are filled on page load. | 
| +// Verifies that password autofill triggers events in JavaScript for forms that | 
| +// are filled on page load. | 
| TEST_F(PasswordAutofillAgentTest, | 
| PasswordAutofillTriggersOnChangeEventsOnLoad) { | 
| - std::string html = std::string(kFormHTML) + kOnChangeDetectionScript; | 
| + std::vector<base::string16> username_event_checkers; | 
| + std::vector<base::string16> password_event_checkers; | 
| + std::string events_registration_script = | 
| + CreateScriptToRegisterListeners(kUsernameName, &username_event_checkers) + | 
| + CreateScriptToRegisterListeners(kPasswordName, &password_event_checkers); | 
| + std::string html = std::string(kFormHTML) + events_registration_script; | 
| LoadHTML(html.c_str()); | 
| UpdateOriginForHTML(html); | 
| UpdateUsernameAndPasswordElements(); | 
| @@ -934,40 +937,28 @@ TEST_F(PasswordAutofillAgentTest, | 
| // password should only be visible to the user. | 
| CheckTextFieldsDOMState(kAliceUsername, true, std::string(), true); | 
| - // 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)); | 
| - // TODO(isherman): Re-enable this check once http://crbug.com/333144 is fixed. | 
| - // EXPECT_EQ(0, password_onchange_called); | 
| + // A JavaScript events should have been triggered for the username, but not | 
| 
 
vabr (Chromium)
2017/03/21 07:57:30
nit: Remove "A": A JavaScript events -> JavaScript
 
kolos1
2017/03/21 08:29:21
Done.
 
 | 
| + // yet for the password. | 
| + CheckIfEventsAreCalled(username_event_checkers, true); | 
| + CheckIfEventsAreCalled(password_event_checkers, false); | 
| // Simulate a user click so that the password field's real value is filled. | 
| SimulateElementClick(kUsernameName); | 
| CheckTextFieldsDOMState(kAliceUsername, true, kAlicePassword, true); | 
| - // 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); | 
| + // Now, JavaScript events should have been triggered for the password as well. | 
| + CheckIfEventsAreCalled(password_event_checkers, true); | 
| } | 
| -// Verifies that password autofill triggers onChange events in JavaScript for | 
| -// forms that are filled after page load. | 
| +// Verifies that password autofill triggers events in JavaScript for forms that | 
| +// are filled after page load. | 
| TEST_F(PasswordAutofillAgentTest, | 
| PasswordAutofillTriggersOnChangeEventsWaitForUsername) { | 
| - std::string html = std::string(kFormHTML) + kOnChangeDetectionScript; | 
| + std::vector<base::string16> event_checkers; | 
| + std::string events_registration_script = | 
| + CreateScriptToRegisterListeners(kUsernameName, &event_checkers) + | 
| + CreateScriptToRegisterListeners(kPasswordName, &event_checkers); | 
| + std::string html = std::string(kFormHTML) + events_registration_script; | 
| LoadHTML(html.c_str()); | 
| UpdateOriginForHTML(html); | 
| UpdateUsernameAndPasswordElements(); | 
| @@ -987,25 +978,16 @@ 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 be not triggered. | 
| + base::Erase(event_checkers, base::ASCIIToUTF16("username_blur_event")); | 
| SimulateSuggestionChoice(username_element_); | 
| // The username and password should now have been autocompleted. | 
| CheckTextFieldsDOMState(kAliceUsername, true, kAlicePassword, true); | 
| - // 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); | 
| + // JavaScript events should have been triggered both for the username and for | 
| + // the password. | 
| + CheckIfEventsAreCalled(event_checkers, true); | 
| } | 
| // Tests that |FillSuggestion| properly fills the username and password. |