Index: chrome/browser/password_manager/password_generation_interactive_uitest.cc |
diff --git a/chrome/browser/password_manager/password_generation_interactive_uitest.cc b/chrome/browser/password_manager/password_generation_interactive_uitest.cc |
index 334367e496604eac783ad20435203e7c615500e8..e0c623b30f349a3e9ab55419049ee5c96753114b 100644 |
--- a/chrome/browser/password_manager/password_generation_interactive_uitest.cc |
+++ b/chrome/browser/password_manager/password_generation_interactive_uitest.cc |
@@ -3,7 +3,10 @@ |
// found in the LICENSE file. |
#include "base/command_line.h" |
+#include "base/strings/utf_string_conversions.h" |
#include "chrome/browser/password_manager/chrome_password_manager_client.h" |
+#include "chrome/browser/password_manager/password_manager_test_base.h" |
+#include "chrome/browser/password_manager/password_store_factory.h" |
#include "chrome/browser/profiles/profile.h" |
#include "chrome/browser/ui/autofill/password_generation_popup_observer.h" |
#include "chrome/browser/ui/browser.h" |
@@ -13,6 +16,7 @@ |
#include "components/autofill/core/browser/autofill_test_utils.h" |
#include "components/autofill/core/common/autofill_switches.h" |
#include "components/password_manager/core/browser/password_generation_manager.h" |
+#include "components/password_manager/core/browser/test_password_store.h" |
#include "content/public/browser/render_view_host.h" |
#include "content/public/browser/web_contents.h" |
#include "content/public/test/browser_test_utils.h" |
@@ -46,7 +50,8 @@ class TestPopupObserver : public autofill::PasswordGenerationPopupObserver { |
} // namespace |
-class PasswordGenerationInteractiveTest : public InProcessBrowserTest { |
+class PasswordGenerationInteractiveTest : |
+ public PasswordManagerBrowserTestBase { |
public: |
void SetUpCommandLine(base::CommandLine* command_line) override { |
// Make sure the feature is enabled. |
@@ -58,39 +63,33 @@ class PasswordGenerationInteractiveTest : public InProcessBrowserTest { |
} |
void SetUpOnMainThread() override { |
+ PasswordManagerBrowserTestBase::SetUpOnMainThread(); |
+ |
// Disable Autofill requesting access to AddressBook data. This will cause |
// the tests to hang on Mac. |
autofill::test::DisableSystemServices(browser()->profile()->GetPrefs()); |
// Set observer for popup. |
ChromePasswordManagerClient* client = |
- ChromePasswordManagerClient::FromWebContents(GetWebContents()); |
+ ChromePasswordManagerClient::FromWebContents(WebContents()); |
client->SetTestObserver(&observer_); |
- ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady()); |
- GURL url = embedded_test_server()->GetURL("/password/signup_form.html"); |
- ui_test_utils::NavigateToURL(browser(), url); |
+ NavigateToFile("/password/signup_form.html"); |
} |
void TearDownOnMainThread() override { |
+ PasswordManagerBrowserTestBase::TearDownOnMainThread(); |
+ |
// Clean up UI. |
ChromePasswordManagerClient* client = |
- ChromePasswordManagerClient::FromWebContents(GetWebContents()); |
+ ChromePasswordManagerClient::FromWebContents(WebContents()); |
client->HidePasswordGenerationPopup(); |
} |
- content::WebContents* GetWebContents() { |
- return browser()->tab_strip_model()->GetActiveWebContents(); |
- } |
- |
- content::RenderViewHost* GetRenderViewHost() { |
- return GetWebContents()->GetRenderViewHost(); |
- } |
- |
std::string GetFieldValue(const std::string& field_id) { |
std::string value; |
EXPECT_TRUE(content::ExecuteScriptAndExtractString( |
- GetRenderViewHost(), |
+ RenderViewHost(), |
"window.domAutomationController.send(" |
" document.getElementById('" + field_id + "').value);", |
&value)); |
@@ -100,7 +99,7 @@ class PasswordGenerationInteractiveTest : public InProcessBrowserTest { |
std::string GetFocusedElement() { |
std::string focused_element; |
EXPECT_TRUE(content::ExecuteScriptAndExtractString( |
- GetRenderViewHost(), |
+ RenderViewHost(), |
"window.domAutomationController.send(" |
" document.activeElement.id)", |
&focused_element)); |
@@ -109,7 +108,7 @@ class PasswordGenerationInteractiveTest : public InProcessBrowserTest { |
void FocusPasswordField() { |
ASSERT_TRUE(content::ExecuteScript( |
- GetRenderViewHost(), |
+ RenderViewHost(), |
"document.getElementById('password_field').focus()")); |
} |
@@ -117,7 +116,7 @@ class PasswordGenerationInteractiveTest : public InProcessBrowserTest { |
content::NativeWebKeyboardEvent event; |
event.windowsKeyCode = key; |
event.type = blink::WebKeyboardEvent::RawKeyDown; |
- GetRenderViewHost()->ForwardKeyboardEvent(event); |
+ RenderViewHost()->ForwardKeyboardEvent(event); |
} |
bool GenerationPopupShowing() { |
@@ -170,7 +169,7 @@ IN_PROC_BROWSER_TEST_F(PasswordGenerationInteractiveTest, |
FocusPasswordField(); |
EXPECT_TRUE(GenerationPopupShowing()); |
- ASSERT_TRUE(content::ExecuteScript(GetRenderViewHost(), |
+ ASSERT_TRUE(content::ExecuteScript(RenderViewHost(), |
"window.scrollTo(100, 0);")); |
EXPECT_FALSE(GenerationPopupShowing()); |
@@ -179,15 +178,49 @@ IN_PROC_BROWSER_TEST_F(PasswordGenerationInteractiveTest, |
// Disabled due to flakiness due to resizes, see http://crbug.com/407998. |
IN_PROC_BROWSER_TEST_F(PasswordGenerationInteractiveTest, |
DISABLED_GenerationTriggeredInIFrame) { |
- GURL url = embedded_test_server()->GetURL( |
- "/password/framed_signup_form.html"); |
- ui_test_utils::NavigateToURL(browser(), url); |
+ NavigateToFile("/password/framed_signup_form.html"); |
std::string focus_script = |
"var frame = document.getElementById('signup_iframe');" |
"var frame_doc = frame.contentDocument;" |
"frame_doc.getElementById('password_field').focus();"; |
- ASSERT_TRUE(content::ExecuteScript(GetRenderViewHost(), focus_script)); |
+ ASSERT_TRUE(content::ExecuteScript(RenderViewHost(), focus_script)); |
+ EXPECT_TRUE(GenerationPopupShowing()); |
+} |
+ |
+// Disabled due to flakiness due to resizes, see http://crbug.com/407998. |
+IN_PROC_BROWSER_TEST_F(PasswordGenerationInteractiveTest, |
+ DISABLED_AutoSavingGeneratedPassword) { |
+ password_manager::TestPasswordStore* password_store = |
+ static_cast<password_manager::TestPasswordStore*>( |
+ PasswordStoreFactory::GetForProfile( |
+ browser()->profile(), ServiceAccessType::IMPLICIT_ACCESS).get()); |
+ |
+ FocusPasswordField(); |
EXPECT_TRUE(GenerationPopupShowing()); |
+ SendKeyToPopup(ui::VKEY_DOWN); |
+ SendKeyToPopup(ui::VKEY_RETURN); |
+ |
+ // Change username and submit. |
+ NavigationObserver observer(WebContents()); |
+ std::string submit_script = |
+ "document.getElementById('username_field').value = 'something';" |
+ "document.getElementById('input_submit_button').click()"; |
+ ASSERT_TRUE(content::ExecuteScript(RenderViewHost(), submit_script)); |
+ observer.Wait(); |
+ |
+ // 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()); |
+ |
+ // Make sure the username is correct. |
+ password_manager::TestPasswordStore::PasswordMap stored_passwords = |
+ password_store->stored_passwords(); |
+ EXPECT_EQ(1u, stored_passwords.size()); |
+ EXPECT_EQ(1u, stored_passwords.begin()->second.size()); |
+ EXPECT_EQ(base::UTF8ToUTF16("something"), |
+ (stored_passwords.begin()->second)[0].username_value); |
} |