| 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 7f24d3635d1ee5c3c1838a7872078be8a2e16db1..5bb071f5e7a932e41aa277d6eaf196ae8fd1ee3a 100644
|
| --- a/components/password_manager/core/browser/login_database.cc
|
| +++ b/components/password_manager/core/browser/login_database.cc
|
| @@ -23,7 +23,7 @@ using autofill::PasswordForm;
|
|
|
| namespace password_manager {
|
|
|
| -static const int kCurrentVersionNumber = 5;
|
| +static const int kCurrentVersionNumber = 6;
|
| static const int kCompatibleVersionNumber = 1;
|
|
|
| Pickle SerializeVector(const std::vector<base::string16>& vec) {
|
| @@ -66,7 +66,8 @@ enum LoginTableColumns {
|
| COLUMN_POSSIBLE_USERNAMES,
|
| COLUMN_TIMES_USED,
|
| COLUMN_FORM_DATA,
|
| - COLUMN_USE_ADDITIONAL_AUTH
|
| + COLUMN_USE_ADDITIONAL_AUTH,
|
| + COLUMN_DATE_SYNCED
|
| };
|
|
|
| void BindAddStatement(const PasswordForm& form,
|
| @@ -98,6 +99,7 @@ void BindAddStatement(const PasswordForm& form,
|
| form_data_pickle.data(),
|
| form_data_pickle.size());
|
| s->BindInt(COLUMN_USE_ADDITIONAL_AUTH, form.use_additional_authentication);
|
| + s->BindInt64(COLUMN_DATE_SYNCED, form.date_synced.ToInternalValue());
|
| }
|
|
|
| void AddCallback(int err, sql::Statement* /*stmt*/) {
|
| @@ -198,6 +200,13 @@ bool LoginDatabase::MigrateOldVersionsAsNeeded() {
|
| }
|
| meta_table_.SetVersionNumber(5);
|
| // Fall through.
|
| + case 5:
|
| + if (!db_.Execute(
|
| + "ALTER TABLE logins ADD COLUMN date_synced INTEGER")) {
|
| + return false;
|
| + }
|
| + meta_table_.SetVersionNumber(6);
|
| + // Fall through.
|
| case kCurrentVersionNumber:
|
| // Already up to date
|
| return true;
|
| @@ -228,6 +237,7 @@ bool LoginDatabase::InitLoginsTable() {
|
| "times_used INTEGER,"
|
| "form_data BLOB,"
|
| "use_additional_auth INTEGER,"
|
| + "date_synced INTEGER,"
|
| "UNIQUE "
|
| "(origin_url, username_element, "
|
| "username_value, password_element, "
|
| @@ -308,8 +318,8 @@ PasswordStoreChangeList LoginDatabase::AddLogin(const PasswordForm& form) {
|
| " 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) VALUES "
|
| - "(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"));
|
| + " use_additional_auth, date_synced) VALUES "
|
| + "(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"));
|
| BindAddStatement(form, encrypted_password, &s);
|
| db_.set_error_callback(base::Bind(&AddCallback));
|
| const bool success = s.Run();
|
| @@ -325,8 +335,8 @@ PasswordStoreChangeList LoginDatabase::AddLogin(const PasswordForm& form) {
|
| " 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) VALUES "
|
| - "(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"));
|
| + " use_additional_auth, date_synced) VALUES "
|
| + "(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"));
|
| BindAddStatement(form, encrypted_password, &s);
|
| if (s.Run()) {
|
| list.push_back(PasswordStoreChange(PasswordStoreChange::REMOVE, form));
|
| @@ -464,6 +474,8 @@ LoginDatabase::EncryptionResult LoginDatabase::InitPasswordFormFromStatement(
|
| }
|
| form->use_additional_authentication =
|
| (s.ColumnInt(COLUMN_USE_ADDITIONAL_AUTH) > 0);
|
| + form->date_synced = base::Time::FromInternalValue(
|
| + s.ColumnInt64(COLUMN_DATE_SYNCED));
|
| return ENCRYPTION_RESULT_SUCCESS;
|
| }
|
|
|
| @@ -476,7 +488,7 @@ bool LoginDatabase::GetLogins(const PasswordForm& form,
|
| "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 FROM logins WHERE signon_realm == ? ";
|
| + "use_additional_auth, date_synced FROM logins WHERE signon_realm == ? ";
|
| sql::Statement s;
|
| const GURL signon_realm(form.signon_realm);
|
| std::string registered_domain =
|
| @@ -571,7 +583,7 @@ bool LoginDatabase::GetLoginsCreatedBetween(
|
| "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 FROM logins "
|
| + "use_additional_auth, date_synced FROM logins "
|
| "WHERE date_created >= ? AND date_created < ?"
|
| "ORDER BY origin_url"));
|
| s.BindInt64(0, begin.ToTimeT());
|
| @@ -611,8 +623,8 @@ bool LoginDatabase::GetAllLoginsWithBlacklistSetting(
|
| "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 FROM logins WHERE blacklisted_by_user == ? "
|
| - "ORDER BY origin_url"));
|
| + "use_additional_auth, date_synced FROM logins "
|
| + "WHERE blacklisted_by_user == ? ORDER BY origin_url"));
|
| s.BindInt(0, blacklisted ? 1 : 0);
|
|
|
| while (s.Step()) {
|
|
|