Chromium Code Reviews| Index: chrome/browser/password_manager/password_manager_browsertest.cc |
| diff --git a/chrome/browser/password_manager/password_manager_browsertest.cc b/chrome/browser/password_manager/password_manager_browsertest.cc |
| index 1d7ae87479e2e6fa1015b1be8093b6e5fce27fa8..124b22b25606038e17eabf859513cc63bed671be 100644 |
| --- a/chrome/browser/password_manager/password_manager_browsertest.cc |
| +++ b/chrome/browser/password_manager/password_manager_browsertest.cc |
| @@ -2553,4 +2553,98 @@ IN_PROC_BROWSER_TEST_F(PasswordManagerBrowserTestBase, |
| password_manager->RemoveObserver(&mock_login_model_observer); |
| } |
| +// Test whether the password form with the problematic invisible password field |
| +// gets autofilled correctly. |
| +IN_PROC_BROWSER_TEST_F(PasswordManagerBrowserTestBase, |
| + AutofillSuggetionsForProblematicPasswordForm) { |
| + // At first let us save credentials to the PasswordManager. |
| + scoped_refptr<password_manager::PasswordStore> password_store = |
| + PasswordStoreFactory::GetForProfile(browser()->profile(), |
| + ServiceAccessType::IMPLICIT_ACCESS); |
| + autofill::PasswordForm login_form; |
| + login_form.signon_realm = embedded_test_server()->base_url().spec(); |
| + login_form.action = embedded_test_server()->GetURL("/password/done.html"); |
| + login_form.username_value = base::ASCIIToUTF16("myusername"); |
| + login_form.password_value = base::ASCIIToUTF16("mypassword"); |
| + password_store->AddLogin(login_form); |
| + |
| + // Logins are added asynchronously to the password store. Spin the message |
| + // loop to make sure the |password_store| had a chance to store the |
| + // |login_form|. |
| + base::RunLoop run_loop; |
| + run_loop.RunUntilIdle(); |
| + |
| + // Now, navigate to the password form having ambiguous Ids for username and |
| + // password fields and verify whether username and password is autofilled. |
| + NavigateToFile("/password/password_form.html"); |
| + |
| + // Let the user interact with the page, so that DOM gets modification events, |
| + // needed for autofilling fields. |
| + content::SimulateMouseClickAt( |
| + WebContents(), 0, blink::WebMouseEvent::ButtonLeft, gfx::Point(1, 1)); |
| + |
| + std::string get_username = |
| + "window.domAutomationController.send(" |
| + " document.getElementById('username').value);"; |
| + std::string actual_username; |
| + ASSERT_TRUE(content::ExecuteScriptAndExtractString( |
| + RenderViewHost(), get_username, &actual_username)); |
| + EXPECT_EQ("myusername", actual_username); |
| + |
| + std::string get_password = |
| + "window.domAutomationController.send(" |
| + " document.getElementById('password').value);"; |
| + std::string actual_password; |
| + ASSERT_TRUE(content::ExecuteScriptAndExtractString( |
| + RenderViewHost(), get_password, &actual_password)); |
| + EXPECT_EQ("mypassword", actual_password); |
| +} |
| + |
| +// Test whether the password form with the problematic invisible password field |
| +// in ambiguous password form autofilled correctly. |
|
vabr (Chromium)
2015/10/20 16:40:22
typo: missing "is" or "gets" between "form" and "a
Pritam Nikam
2015/10/22 09:00:08
Done.
|
| +IN_PROC_BROWSER_TEST_F(PasswordManagerBrowserTestBase, |
| + AutofillSuggetionsForProblematicAmbiguousPasswordForm) { |
| + // At first let us save credentials to the PasswordManager. |
| + scoped_refptr<password_manager::PasswordStore> password_store = |
| + PasswordStoreFactory::GetForProfile(browser()->profile(), |
| + ServiceAccessType::IMPLICIT_ACCESS); |
| + autofill::PasswordForm login_form; |
| + login_form.signon_realm = embedded_test_server()->base_url().spec(); |
| + login_form.action = embedded_test_server()->GetURL("/password/done.html"); |
| + login_form.username_value = base::ASCIIToUTF16("myusername"); |
| + login_form.password_value = base::ASCIIToUTF16("mypassword"); |
| + password_store->AddLogin(login_form); |
| + |
| + // Logins are added asynchronously to the password store. Spin the message |
| + // loop to make sure the |password_store| had a chance to store the |
| + // |login_form|. |
| + base::RunLoop run_loop; |
| + run_loop.RunUntilIdle(); |
| + |
| + // Now, navigate to the password form having ambiguous Ids for username and |
| + // password fields and verify whether username and password is autofilled. |
| + NavigateToFile("/password/ambiguous_password_form.html"); |
| + |
| + // Let the user interact with the page, so that DOM gets modification events, |
| + // needed for autofilling fields. |
| + content::SimulateMouseClickAt( |
| + WebContents(), 0, blink::WebMouseEvent::ButtonLeft, gfx::Point(1, 1)); |
| + |
| + std::string get_username = |
| + "window.domAutomationController.send(" |
| + " document.getElementById('hidden_password_form').elements[1].value);"; |
| + std::string actual_username; |
| + ASSERT_TRUE(content::ExecuteScriptAndExtractString( |
| + RenderViewHost(), get_username, &actual_username)); |
| + EXPECT_EQ("myusername", actual_username); |
| + |
| + std::string get_password = |
| + "window.domAutomationController.send(" |
| + " document.getElementById('hidden_password_form').elements[2].value);"; |
| + std::string actual_password; |
| + ASSERT_TRUE(content::ExecuteScriptAndExtractString( |
| + RenderViewHost(), get_password, &actual_password)); |
| + EXPECT_EQ("mypassword", actual_password); |
| +} |
| + |
| } // namespace password_manager |