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

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

Issue 335893002: Support to remove passwords by date_synced timestamp. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Sync integration tests Created 6 years, 6 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.cc
diff --git a/components/password_manager/core/browser/login_database.cc b/components/password_manager/core/browser/login_database.cc
index 5bb071f5e7a932e41aa277d6eaf196ae8fd1ee3a..9e477e50761b89893f96adcdd8c1ee147f902be6 100644
--- a/components/password_manager/core/browser/login_database.cc
+++ b/components/password_manager/core/browser/login_database.cc
@@ -361,7 +361,8 @@ PasswordStoreChangeList LoginDatabase::UpdateLogin(const PasswordForm& form) {
"preferred = ?, "
"possible_usernames = ?, "
"times_used = ?, "
- "submit_element = ? "
+ "submit_element = ?, "
+ "date_synced = ? "
"WHERE origin_url = ? AND "
"username_element = ? AND "
"username_value = ? AND "
@@ -376,12 +377,13 @@ PasswordStoreChangeList LoginDatabase::UpdateLogin(const PasswordForm& form) {
s.BindBlob(4, pickle.data(), pickle.size());
s.BindInt(5, form.times_used);
s.BindString16(6, form.submit_element);
+ s.BindInt64(7, form.date_synced.ToInternalValue());
- s.BindString(7, form.origin.spec());
- s.BindString16(8, form.username_element);
- s.BindString16(9, form.username_value);
- s.BindString16(10, form.password_element);
- s.BindString(11, form.signon_realm);
+ s.BindString(8, form.origin.spec());
+ s.BindString16(9, form.username_element);
+ s.BindString16(10, form.username_value);
+ s.BindString16(11, form.password_element);
+ s.BindString(12, form.signon_realm);
if (!s.Run())
return PasswordStoreChangeList();
@@ -425,6 +427,18 @@ bool LoginDatabase::RemoveLoginsCreatedBetween(const base::Time delete_begin,
return s.Run();
}
+bool LoginDatabase::RemoveLoginsSyncedBetween(const base::Time delete_begin,
+ const base::Time delete_end) {
+ sql::Statement s(db_.GetCachedStatement(
+ SQL_FROM_HERE,
+ "DELETE FROM logins WHERE date_synced >= ? AND date_synced < ?"));
+ s.BindInt64(0, delete_begin.ToInternalValue());
+ s.BindInt64(1, delete_end.is_null() ? base::Time::Max().ToInternalValue()
+ : delete_end.ToInternalValue());
+
+ return s.Run();
+}
+
LoginDatabase::EncryptionResult LoginDatabase::InitPasswordFormFromStatement(
PasswordForm* form,
sql::Statement& s) const {
@@ -603,6 +617,37 @@ bool LoginDatabase::GetLoginsCreatedBetween(
return s.Succeeded();
}
+bool LoginDatabase::GetLoginsSyncedBetween(
+ const base::Time begin,
+ const base::Time end,
+ std::vector<autofill::PasswordForm*>* forms) const {
+ DCHECK(forms);
+ sql::Statement s(db_.GetCachedStatement(
+ SQL_FROM_HERE,
+ "SELECT origin_url, action_url, username_element, username_value, "
+ "password_element, password_value, submit_element, signon_realm, "
+ "ssl_valid, preferred, date_created, blacklisted_by_user, "
+ "scheme, password_type, possible_usernames, times_used, form_data, "
+ "use_additional_auth, date_synced FROM logins "
+ "WHERE date_synced >= ? AND date_synced < ?"
+ "ORDER BY origin_url"));
+ s.BindInt64(0, begin.ToInternalValue());
+ s.BindInt64(1, end.is_null() ? base::Time::Max().ToInternalValue()
+ : end.ToInternalValue());
+
+ while (s.Step()) {
+ scoped_ptr<PasswordForm> new_form(new PasswordForm());
+ EncryptionResult result = InitPasswordFormFromStatement(new_form.get(), s);
+ if (result == ENCRYPTION_RESULT_SERVICE_FAILURE)
+ return false;
+ if (result == ENCRYPTION_RESULT_ITEM_FAILURE)
+ continue;
+ DCHECK(result == ENCRYPTION_RESULT_SUCCESS);
+ forms->push_back(new_form.release());
+ }
+ return s.Succeeded();
+}
+
bool LoginDatabase::GetAutofillableLogins(
std::vector<PasswordForm*>* forms) const {
return GetAllLoginsWithBlacklistSetting(false, forms);

Powered by Google App Engine
This is Rietveld 408576698