| 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 6fc17ce723643e345c7b2bfdfc98f13d457c2ee3..05904390775c42fd8d1a2e6400d530c3b34224aa 100644
|
| --- a/chrome/renderer/autofill/password_autofill_agent_browsertest.cc
|
| +++ b/chrome/renderer/autofill/password_autofill_agent_browsertest.cc
|
| @@ -1678,8 +1678,12 @@ TEST_F(PasswordAutofillAgentTest, RememberFieldPropertiesOnInPageNavigation) {
|
| SimulateUsernameChange("Bob");
|
| SimulatePasswordChange("mypassword");
|
|
|
| - username_element_.SetAttribute("style", "display:none;");
|
| - password_element_.SetAttribute("style", "display:none;");
|
| + std::string hide_elements =
|
| + "var password = document.getElementById('password');"
|
| + "password.style = 'display:none';"
|
| + "var username = document.getElementById('username');"
|
| + "username.style = 'display:none';";
|
| + ExecuteJavaScriptForTests(hide_elements.c_str());
|
|
|
| password_autofill_agent_->AJAXSucceeded();
|
|
|
| @@ -1693,6 +1697,34 @@ TEST_F(PasswordAutofillAgentTest, RememberFieldPropertiesOnInPageNavigation) {
|
| expected_properties_masks);
|
| }
|
|
|
| +TEST_F(PasswordAutofillAgentTest, RememberFieldPropertiesOnInPageNavigation_2) {
|
| + LoadHTML(kNoFormHTML);
|
| + UpdateUsernameAndPasswordElements();
|
| +
|
| + SimulateUsernameChange("Bob");
|
| + SimulatePasswordChange("mypassword");
|
| +
|
| + password_autofill_agent_->AJAXSucceeded();
|
| +
|
| + std::string hide_elements =
|
| + "var password = document.getElementById('password');"
|
| + "password.style = 'display:none';"
|
| + "var username = document.getElementById('username');"
|
| + "username.style = 'display:none';";
|
| + ExecuteJavaScriptForTests(hide_elements.c_str());
|
| +
|
| + base::RunLoop().RunUntilIdle();
|
| +
|
| + std::map<base::string16, FieldPropertiesMask> expected_properties_masks;
|
| + expected_properties_masks[ASCIIToUTF16("username")] =
|
| + FieldPropertiesFlags::USER_TYPED;
|
| + expected_properties_masks[ASCIIToUTF16("password")] =
|
| + FieldPropertiesFlags::USER_TYPED | FieldPropertiesFlags::HAD_FOCUS;
|
| +
|
| + ExpectFieldPropertiesMasks(PasswordFormInPageNavigation,
|
| + expected_properties_masks);
|
| +}
|
| +
|
| // The username/password is autofilled by password manager then just before
|
| // sending the form off, a script changes them. This test checks that
|
| // PasswordAutofillAgent can still get the username and the password autofilled.
|
| @@ -2248,8 +2280,12 @@ TEST_F(PasswordAutofillAgentTest, NoForm_PromptForAJAXSubmitWithoutNavigation) {
|
| SimulateUsernameChange("Bob");
|
| SimulatePasswordChange("mypassword");
|
|
|
| - username_element_.SetAttribute("style", "display:none;");
|
| - password_element_.SetAttribute("style", "display:none;");
|
| + std::string hide_elements =
|
| + "var password = document.getElementById('password');"
|
| + "password.style = 'display:none';"
|
| + "var username = document.getElementById('username');"
|
| + "username.style = 'display:none';";
|
| + ExecuteJavaScriptForTests(hide_elements.c_str());
|
|
|
| password_autofill_agent_->AJAXSucceeded();
|
|
|
| @@ -2258,6 +2294,30 @@ TEST_F(PasswordAutofillAgentTest, NoForm_PromptForAJAXSubmitWithoutNavigation) {
|
| PasswordForm::SubmissionIndicatorEvent::XHR_SUCCEEDED);
|
| }
|
|
|
| +TEST_F(PasswordAutofillAgentTest,
|
| + NoForm_PromptForAJAXSubmitWithoutNavigation_2) {
|
| + LoadHTML(kNoFormHTML);
|
| + UpdateUsernameAndPasswordElements();
|
| +
|
| + SimulateUsernameChange("Bob");
|
| + SimulatePasswordChange("mypassword");
|
| +
|
| + password_autofill_agent_->AJAXSucceeded();
|
| +
|
| + std::string hide_elements =
|
| + "var password = document.getElementById('password');"
|
| + "password.style = 'display:none';"
|
| + "var username = document.getElementById('username');"
|
| + "username.style = 'display:none';";
|
| + ExecuteJavaScriptForTests(hide_elements.c_str());
|
| +
|
| + base::RunLoop().RunUntilIdle();
|
| +
|
| + ExpectInPageNavigationWithUsernameAndPasswords(
|
| + "Bob", "mypassword", "",
|
| + PasswordForm::SubmissionIndicatorEvent::DOM_MUTATION_AFTER_XHR);
|
| +}
|
| +
|
| TEST_F(PasswordAutofillAgentTest,
|
| NoForm_NoPromptForAJAXSubmitWithoutNavigationAndElementsVisible) {
|
| LoadHTML(kNoFormHTML);
|
| @@ -2291,7 +2351,10 @@ TEST_F(PasswordAutofillAgentTest,
|
| SimulatePasswordChange("mypassword");
|
|
|
| // Simulate captcha element show up right before AJAX completed.
|
| - captcha_element.SetAttribute("style", "display:inline;");
|
| + std::string show_captcha =
|
| + "var captcha = document.getElementById('captcha');"
|
| + "captcha.style = 'display:inline';";
|
| + ExecuteJavaScriptForTests(show_captcha.c_str());
|
| password_autofill_agent_->AJAXSucceeded();
|
|
|
| base::RunLoop().RunUntilIdle();
|
| @@ -2299,6 +2362,35 @@ TEST_F(PasswordAutofillAgentTest,
|
| EXPECT_FALSE(fake_driver_.called_password_form_submitted());
|
| }
|
|
|
| +TEST_F(PasswordAutofillAgentTest,
|
| + NoForm_NoPromptForAJAXSubmitWithoutNavigationAndNewElementAppeared_2) {
|
| + const char kNoFormHTMLWithHiddenField[] =
|
| + "<INPUT type='text' id='username'/>"
|
| + "<INPUT type='password' id='password'/>"
|
| + "<INPUT type='text' id='captcha' style='display:none'/>";
|
| + LoadHTML(kNoFormHTMLWithHiddenField);
|
| +
|
| + UpdateUsernameAndPasswordElements();
|
| + WebElement captcha_element = GetMainFrame()->GetDocument().GetElementById(
|
| + WebString::FromUTF8("captcha"));
|
| + ASSERT_FALSE(captcha_element.IsNull());
|
| +
|
| + SimulateUsernameChange("Bob");
|
| + SimulatePasswordChange("mypassword");
|
| +
|
| + password_autofill_agent_->AJAXSucceeded();
|
| +
|
| + // Simulate captcha element show up right after AJAX completed.
|
| + std::string show_captcha =
|
| + "var captcha = document.getElementById('captcha');"
|
| + "captcha.style = 'display:inline';";
|
| + ExecuteJavaScriptForTests(show_captcha.c_str());
|
| + base::RunLoop().RunUntilIdle();
|
| +
|
| + EXPECT_FALSE(fake_driver_.called_inpage_navigation());
|
| + EXPECT_FALSE(fake_driver_.called_password_form_submitted());
|
| +}
|
| +
|
| // Tests that no save promt is shown when a form with empty action URL is
|
| // changed and AJAX completed but the form is still visible.
|
| TEST_F(PasswordAutofillAgentTest,
|
| @@ -2331,6 +2423,37 @@ TEST_F(PasswordAutofillAgentTest,
|
| EXPECT_FALSE(fake_driver_.called_password_form_submitted());
|
| }
|
|
|
| +TEST_F(PasswordAutofillAgentTest,
|
| + NoAction_NoPromptForAJAXSubmitWithoutNavigationAndNewElementAppeared_2) {
|
| + // Form without an action URL.
|
| + const char kHTMLWithHiddenField[] =
|
| + "<FORM name='LoginTestForm'>"
|
| + " <INPUT type='text' id='username'/>"
|
| + " <INPUT type='password' id='password'/>"
|
| + " <INPUT type='text' id='captcha' style='display:none'/>"
|
| + " <INPUT type='submit' value='Login'/>"
|
| + "</FORM>";
|
| + // Set the valid URL so the form action URL can be generated properly.
|
| + LoadHTMLWithUrlOverride(kHTMLWithHiddenField, "https://www.example.com");
|
| +
|
| + UpdateUsernameAndPasswordElements();
|
| + WebElement captcha_element = GetMainFrame()->GetDocument().GetElementById(
|
| + WebString::FromUTF8("captcha"));
|
| + ASSERT_FALSE(captcha_element.IsNull());
|
| +
|
| + SimulateUsernameChange("Bob");
|
| + SimulatePasswordChange("mypassword");
|
| +
|
| + password_autofill_agent_->AJAXSucceeded();
|
| +
|
| + // Simulate captcha element show up right after AJAX completed.
|
| + captcha_element.SetAttribute("style", "display:inline;");
|
| +
|
| + base::RunLoop().RunUntilIdle();
|
| + EXPECT_FALSE(fake_driver_.called_inpage_navigation());
|
| + EXPECT_FALSE(fake_driver_.called_password_form_submitted());
|
| +}
|
| +
|
| // Tests that credential suggestions are autofilled on a password (and change
|
| // password) forms having either ambiguous or empty name.
|
| TEST_F(PasswordAutofillAgentTest,
|
| @@ -2541,8 +2664,12 @@ TEST_F(PasswordAutofillAgentTest,
|
| SimulateUsernameChange("Alice");
|
|
|
| // Hide form elements to simulate successful login.
|
| - username_element_.SetAttribute("style", "display:none;");
|
| - password_element_.SetAttribute("style", "display:none;");
|
| + std::string hide_elements =
|
| + "var password = document.getElementById('password');"
|
| + "password.style = 'display:none';"
|
| + "var username = document.getElementById('username');"
|
| + "username.style = 'display:none';";
|
| + ExecuteJavaScriptForTests(hide_elements.c_str());
|
|
|
| password_autofill_agent_->AJAXSucceeded();
|
|
|
| @@ -2551,6 +2678,31 @@ TEST_F(PasswordAutofillAgentTest,
|
| PasswordForm::SubmissionIndicatorEvent::XHR_SUCCEEDED);
|
| }
|
|
|
| +TEST_F(PasswordAutofillAgentTest,
|
| + UsernameChangedAfterPasswordInput_InPageNavigation_2) {
|
| + LoadHTML(kNoFormHTML);
|
| + UpdateUsernameAndPasswordElements();
|
| +
|
| + SimulateUsernameChange("Bob");
|
| + SimulatePasswordChange("mypassword");
|
| + SimulateUsernameChange("Alice");
|
| +
|
| + password_autofill_agent_->AJAXSucceeded();
|
| +
|
| + // Hide form elements to simulate successful login.
|
| + std::string hide_elements =
|
| + "var password = document.getElementById('password');"
|
| + "password.style = 'display:none';"
|
| + "var username = document.getElementById('username');"
|
| + "username.style = 'display:none';";
|
| + ExecuteJavaScriptForTests(hide_elements.c_str());
|
| + base::RunLoop().RunUntilIdle();
|
| +
|
| + ExpectInPageNavigationWithUsernameAndPasswords(
|
| + "Alice", "mypassword", "",
|
| + PasswordForm::SubmissionIndicatorEvent::DOM_MUTATION_AFTER_XHR);
|
| +}
|
| +
|
| TEST_F(PasswordAutofillAgentTest,
|
| UsernameChangedAfterPasswordInput_FormSubmitted) {
|
| SimulateUsernameChange("Bob");
|
|
|