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

Unified Diff: components/password_manager/core/browser/login_database_unittest.cc

Issue 169173005: Update incomplete credentials in Login Database (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Compilation fix for newer master Created 6 years, 10 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
Index: components/password_manager/core/browser/login_database_unittest.cc
diff --git a/components/password_manager/core/browser/login_database_unittest.cc b/components/password_manager/core/browser/login_database_unittest.cc
index 15cce1308fefc498693ff53dcb9d18c05037e4a9..93d460de04dff51cb78e3284521c223a637bad19 100644
--- a/components/password_manager/core/browser/login_database_unittest.cc
+++ b/components/password_manager/core/browser/login_database_unittest.cc
@@ -626,6 +626,83 @@ TEST_F(LoginDatabaseTest, VectorSerialization) {
EXPECT_THAT(output, Eq(vec));
}
+TEST_F(LoginDatabaseTest, UpdateIncompleteCredentials) {
+ std::vector<autofill::PasswordForm*> result;
+ // Verify the database is empty.
+ EXPECT_TRUE(db_.GetAutofillableLogins(&result));
+ ASSERT_EQ(0U, result.size());
+
+ // Save an incomplete form. Note that it only has a few fields set, ex. it's
+ // missing 'action', 'username_element' and 'password_element'. Such forms
+ // are sometimes inserted during import from other browsers (which may not
+ // store this info).
+ PasswordForm incomplete_form;
+ incomplete_form.origin = GURL("http://accounts.google.com/LoginAuth");
+ incomplete_form.signon_realm = "http://accounts.google.com/";
+ incomplete_form.username_value = ASCIIToUTF16("my_username");
+ incomplete_form.password_value = ASCIIToUTF16("my_password");
+ incomplete_form.ssl_valid = false;
+ incomplete_form.preferred = true;
+ incomplete_form.blacklisted_by_user = false;
+ incomplete_form.scheme = PasswordForm::SCHEME_HTML;
+ EXPECT_TRUE(db_.AddLogin(incomplete_form));
+
+ // A form on some website. It should trigger a match with the stored one.
+ PasswordForm encountered_form;
+ encountered_form.origin = GURL("http://accounts.google.com/LoginAuth");
+ encountered_form.signon_realm = "http://accounts.google.com/";
+ encountered_form.action = GURL("http://accounts.google.com/Login");
+ encountered_form.username_element = ASCIIToUTF16("Email");
+ encountered_form.password_element = ASCIIToUTF16("Passwd");
+ encountered_form.submit_element = ASCIIToUTF16("signIn");
+
+ // Get matches for encountered_form.
+ EXPECT_TRUE(db_.GetLogins(encountered_form, &result));
+ ASSERT_EQ(1U, result.size());
+ EXPECT_EQ(incomplete_form.origin, result[0]->origin);
+ EXPECT_EQ(incomplete_form.signon_realm, result[0]->signon_realm);
+ EXPECT_EQ(incomplete_form.username_value, result[0]->username_value);
+#if defined(OS_MACOSX)
+ // On Mac, passwords are not stored in login database, instead they're in
+ // the keychain.
+ EXPECT_TRUE(result[0]->password_value.empty());
+#else
+ EXPECT_EQ(incomplete_form.password_value, result[0]->password_value);
+#endif // !OS_MACOSX
+ EXPECT_TRUE(result[0]->preferred);
+ EXPECT_FALSE(result[0]->ssl_valid);
+
+ // We should return empty 'action', 'username_element', 'password_element'
+ // and 'submit_element' as we can't be sure if the credentials were entered
+ // in this particular form on the page.
+ EXPECT_EQ(GURL(), result[0]->action);
+ EXPECT_TRUE(result[0]->username_element.empty());
+ EXPECT_TRUE(result[0]->password_element.empty());
+ EXPECT_TRUE(result[0]->submit_element.empty());
+ ClearResults(&result);
+
+ // Let's say this login form worked. Now update the stored credentials with
+ // 'action', 'username_element', 'password_element' and 'submit_element' from
+ // the encountered form.
+ PasswordForm completed_form(incomplete_form);
+ completed_form.action = encountered_form.action;
+ completed_form.username_element = encountered_form.username_element;
+ completed_form.password_element = encountered_form.password_element;
+ completed_form.submit_element = encountered_form.submit_element;
+ EXPECT_TRUE(db_.UpdateLogin(completed_form, NULL));
+
+ // Get matches for encountered_form again.
+ EXPECT_TRUE(db_.GetLogins(encountered_form, &result));
+ ASSERT_EQ(1U, result.size());
+
+ // This time we should have all the info available.
+ PasswordForm expected_form(completed_form);
+#if defined(OS_MACOSX)
+ expected_form.password_value.clear();
+#endif // OS_MACOSX
+ EXPECT_EQ(expected_form, *result[0]);
+}
+
#if defined(OS_POSIX)
// Only the current user has permission to read the database.
//
« no previous file with comments | « components/password_manager/core/browser/login_database.cc ('k') | components/password_manager/core/browser/password_store.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698