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

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

Issue 1237403003: [Password manager IOS upsteaming] Upstreaming login database (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 1 month 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.cc
diff --git a/components/password_manager/core/browser/login_database.cc b/components/password_manager/core/browser/login_database.cc
index f241b0080ab8824878a57f92bfdce11998aaa0b5..619bf63a24691465d79ad4845d29df8cb29d2119 100644
--- a/components/password_manager/core/browser/login_database.cc
+++ b/components/password_manager/core/browser/login_database.cc
@@ -13,6 +13,7 @@
#include "base/metrics/histogram_macros.h"
#include "base/metrics/sparse_histogram.h"
#include "base/pickle.h"
+#include "base/stl_util.h"
#include "base/strings/string_util.h"
#include "base/strings/stringprintf.h"
#include "base/time/time.h"
@@ -878,6 +879,9 @@ PasswordStoreChangeList LoginDatabase::UpdateLogin(const PasswordForm& form) {
&encrypted_password) != ENCRYPTION_RESULT_SUCCESS)
return PasswordStoreChangeList();
+#if defined(OS_IOS)
+ DeleteEncryptedPassword(form);
+#endif
// Replacement is necessary to deal with updating imported credentials. See
// crbug.com/349138 for details.
sql::Statement s(db_.GetCachedStatement(SQL_FROM_HERE,
@@ -947,6 +951,9 @@ bool LoginDatabase::RemoveLogin(const PasswordForm& form) {
// credentials.
return false;
}
+#if defined(OS_IOS)
+ DeleteEncryptedPassword(form);
+#endif
// Remove a login by UNIQUE-constrained fields.
sql::Statement s(db_.GetCachedStatement(SQL_FROM_HERE,
"DELETE FROM logins WHERE "
@@ -968,6 +975,15 @@ bool LoginDatabase::RemoveLogin(const PasswordForm& form) {
bool LoginDatabase::RemoveLoginsCreatedBetween(base::Time delete_begin,
base::Time delete_end) {
+#if defined(OS_IOS)
+ ScopedVector<autofill::PasswordForm> forms;
+ if (GetLoginsCreatedBetween(delete_begin, delete_end, &forms)) {
+ for (size_t i = 0; i < forms.size(); i++) {
+ DeleteEncryptedPassword(*forms[i]);
+ }
+ }
+#endif
+
sql::Statement s(db_.GetCachedStatement(SQL_FROM_HERE,
"DELETE FROM logins WHERE "
"date_created >= ? AND date_created < ?"));
@@ -1207,6 +1223,32 @@ bool LoginDatabase::DeleteAndRecreateDatabaseFile() {
return Init();
}
+std::string LoginDatabase::GetEncryptedPassword(
+ const autofill::PasswordForm& form) const {
+ sql::Statement s(
+ db_.GetCachedStatement(SQL_FROM_HERE,
+ "SELECT password_value FROM logins WHERE "
+ "origin_url = ? AND "
+ "username_element = ? AND "
+ "username_value = ? AND "
+ "password_element = ? AND "
+ "submit_element = ? AND "
+ "signon_realm = ? "));
+
+ s.BindString(0, form.origin.spec());
+ s.BindString16(1, form.username_element);
+ s.BindString16(2, form.username_value);
+ s.BindString16(3, form.password_element);
+ s.BindString16(4, form.submit_element);
+ s.BindString(5, form.signon_realm);
+
+ std::string encrypted_password;
+ if (s.Step()) {
+ s.ColumnBlobAsString(0, &encrypted_password);
+ }
+ return encrypted_password;
+}
+
// static
bool LoginDatabase::StatementToForms(
sql::Statement* statement,

Powered by Google App Engine
This is Rietveld 408576698