Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(93)

Unified Diff: chrome/browser/password_manager/password_generation_interactive_uitest.cc

Issue 1237543002: [Password Generation] Save passwords even if heuristics determine submit failed (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Comments Created 5 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | components/password_manager/core/browser/password_manager.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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);
}
« no previous file with comments | « no previous file | components/password_manager/core/browser/password_manager.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698