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 6dcbcb562cf19aaf62610c75f9b2bece354bcbfa..6a1f0b8c3d1bf7a86ea39317e89351d79a8fa5a4 100644 |
--- a/chrome/browser/password_manager/password_manager_browsertest.cc |
+++ b/chrome/browser/password_manager/password_manager_browsertest.cc |
@@ -21,6 +21,7 @@ |
#include "chrome/browser/ui/browser.h" |
#include "chrome/browser/ui/login/login_prompt.h" |
#include "chrome/browser/ui/login/login_prompt_test_utils.h" |
+#include "chrome/browser/ui/passwords/manage_passwords_ui_controller.h" |
#include "chrome/browser/ui/tabs/tab_strip_model.h" |
#include "chrome/common/channel_info.h" |
#include "chrome/common/chrome_paths.h" |
@@ -116,6 +117,20 @@ class ObservingAutofillClient : public autofill::TestAutofillClient { |
DISALLOW_COPY_AND_ASSIGN(ObservingAutofillClient); |
}; |
+// For simplicity we assume that password store contains only 1 credentials. |
+void CheckThatCredentialsStored( |
+ password_manager::TestPasswordStore* password_store, |
+ const base::string16& username, |
+ const base::string16& password) { |
+ auto& passwords_map = password_store->stored_passwords(); |
+ ASSERT_EQ(1u, passwords_map.size()); |
+ auto& passwords_vector = passwords_map.begin()->second; |
+ ASSERT_EQ(1u, passwords_vector.size()); |
+ const autofill::PasswordForm& form = passwords_vector[0]; |
+ EXPECT_EQ(username, form.username_value); |
+ EXPECT_EQ(password, form.password_value); |
+} |
+ |
} // namespace |
namespace password_manager { |
@@ -2020,5 +2035,95 @@ IN_PROC_BROWSER_TEST_F(PasswordManagerBrowserTestBase, |
iframe_killed.Wait(); |
} |
-} // namespace password_manager |
+IN_PROC_BROWSER_TEST_F(PasswordManagerBrowserTestBase, |
+ ChangePwdNoAccountStored) { |
+ ASSERT_TRUE(ChromePasswordManagerClient::IsTheHotNewBubbleUIEnabled()); |
+ NavigateToFile("/password/password_form.html"); |
+ |
+ base::CommandLine::ForCurrentProcess()->AppendSwitch( |
+ password_manager::switches::kEnablePasswordChangeSupport); |
+ |
+ // Fill a form and submit through a <input type="submit"> button. |
+ NavigationObserver observer(WebContents()); |
+ scoped_ptr<PromptObserver> prompt_observer( |
+ PromptObserver::Create(WebContents())); |
+ std::string fill_and_submit = |
+ "document.getElementById('chg_password_wo_username_field').value = " |
+ "'old_pw';" |
+ "document.getElementById('chg_new_password_wo_username_1').value = " |
+ "'new_pw';" |
+ "document.getElementById('chg_new_password_wo_username_2').value = " |
+ "'new_pw';" |
+ "document.getElementById('chg_submit_wo_username_button').click()"; |
+ ASSERT_TRUE(content::ExecuteScript(RenderViewHost(), fill_and_submit)); |
+ observer.Wait(); |
+ // No credentials stored before, so save bubble is shown. |
+ EXPECT_TRUE(prompt_observer->IsShowingPrompt()); |
+ prompt_observer->Accept(); |
+ // Check that credentials are stored. |
+ scoped_refptr<password_manager::TestPasswordStore> password_store = |
+ static_cast<password_manager::TestPasswordStore*>( |
+ PasswordStoreFactory::GetForProfile( |
+ browser()->profile(), ServiceAccessType::IMPLICIT_ACCESS) |
+ .get()); |
+ // Spin the message loop to make sure the password store had a chance to save |
+ // the password. |
+ base::RunLoop run_loop; |
+ run_loop.RunUntilIdle(); |
+ EXPECT_FALSE(password_store->IsEmpty()); |
+ CheckThatCredentialsStored(password_store.get(), base::ASCIIToUTF16(""), |
+ base::ASCIIToUTF16("new_pw")); |
+} |
+ |
+// TODO(dvadym): Turn on this test when Change password UI will be implemented |
+// for Mac. http://crbug.com/359315 |
+#ifndef OS_MACOSX |
+IN_PROC_BROWSER_TEST_F(PasswordManagerBrowserTestBase, |
+ ChangePwd1AccountStored) { |
+ ASSERT_TRUE(ChromePasswordManagerClient::IsTheHotNewBubbleUIEnabled()); |
+ base::CommandLine::ForCurrentProcess()->AppendSwitch( |
+ password_manager::switches::kEnablePasswordChangeSupport); |
+ // At first let us save credentials to the PasswordManager. |
+ scoped_refptr<password_manager::TestPasswordStore> password_store = |
+ static_cast<password_manager::TestPasswordStore*>( |
+ PasswordStoreFactory::GetForProfile( |
+ browser()->profile(), ServiceAccessType::IMPLICIT_ACCESS) |
+ .get()); |
+ autofill::PasswordForm signin_form; |
+ signin_form.signon_realm = embedded_test_server()->base_url().spec(); |
+ signin_form.password_value = base::ASCIIToUTF16("pw"); |
+ signin_form.username_value = base::ASCIIToUTF16("temp"); |
+ password_store->AddLogin(signin_form); |
+ |
+ // Check that password update bubble is shown. |
+ NavigateToFile("/password/password_form.html"); |
+ NavigationObserver observer(WebContents()); |
+ scoped_ptr<PromptObserver> prompt_observer( |
+ PromptObserver::Create(WebContents())); |
+ std::string fill_and_submit_change_password = |
+ "document.getElementById('chg_password_wo_username_field').value = " |
+ "'random';" |
+ "document.getElementById('chg_new_password_wo_username_1').value = " |
+ "'new_pw';" |
+ "document.getElementById('chg_new_password_wo_username_2').value = " |
+ "'new_pw';" |
+ "document.getElementById('chg_submit_wo_username_button').click()"; |
+ ASSERT_TRUE(content::ExecuteScript(RenderViewHost(), |
+ fill_and_submit_change_password)); |
+ observer.Wait(); |
+ EXPECT_TRUE(prompt_observer->IsShowingUpdatePrompt()); |
+ |
+ const autofill::PasswordForm& stored_form = |
+ password_store->stored_passwords().begin()->second[0]; |
+ prompt_observer->AcceptUpdatePrompt(stored_form); |
+ // Spin the message loop to make sure the password store had a chance to |
+ // update the password. |
+ base::RunLoop run_loop; |
+ run_loop.RunUntilIdle(); |
+ CheckThatCredentialsStored(password_store.get(), base::ASCIIToUTF16("temp"), |
+ base::ASCIIToUTF16("new_pw")); |
+} |
+#endif |
+ |
+} // namespace password_manager |