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. |