| 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 44dff2ad95611233707014e0e903f6b8f5b6e428..79cc72b54c522a18333d66228d5a0dfc1701b893 100644
|
| --- a/components/password_manager/core/browser/login_database.cc
|
| +++ b/components/password_manager/core/browser/login_database.cc
|
| @@ -27,7 +27,7 @@ using autofill::PasswordForm;
|
|
|
| namespace password_manager {
|
|
|
| -const int kCurrentVersionNumber = 11;
|
| +const int kCurrentVersionNumber = 12;
|
| static const int kCompatibleVersionNumber = 1;
|
|
|
| Pickle SerializeVector(const std::vector<base::string16>& vec) {
|
| @@ -75,6 +75,7 @@ enum LoginTableColumns {
|
| COLUMN_AVATAR_URL,
|
| COLUMN_FEDERATION_URL,
|
| COLUMN_SKIP_ZERO_CLICK,
|
| + COLUMN_GENERATION_UPLOAD_STATUS,
|
| };
|
|
|
| void BindAddStatement(const PasswordForm& form,
|
| @@ -110,6 +111,7 @@ void BindAddStatement(const PasswordForm& form,
|
| s->BindString(COLUMN_AVATAR_URL, form.avatar_url.spec());
|
| s->BindString(COLUMN_FEDERATION_URL, form.federation_url.spec());
|
| s->BindInt(COLUMN_SKIP_ZERO_CLICK, form.skip_zero_click);
|
| + s->BindInt(COLUMN_GENERATION_UPLOAD_STATUS, form.generation_upload_status);
|
| }
|
|
|
| void AddCallback(int err, sql::Statement* /*stmt*/) {
|
| @@ -176,8 +178,10 @@ bool CreateNewTable(sql::Connection* db, const char* table_name) {
|
| "avatar_url VARCHAR,"
|
| "federation_url VARCHAR,"
|
| "skip_zero_click INTEGER,"
|
| + "generation_upload_status INTEGER,"
|
| "UNIQUE (origin_url, username_element, username_value, "
|
| - "password_element, signon_realm))", table_name);
|
| + "password_element, signon_realm))",
|
| + table_name);
|
| return db->Execute(query.c_str());
|
| }
|
|
|
| @@ -361,6 +365,12 @@ bool LoginDatabase::MigrateOldVersionsAsNeeded() {
|
| return false;
|
| meta_table_.SetVersionNumber(11);
|
| }
|
| + case 11:
|
| + if (!db_.Execute(
|
| + "ALTER TABLE logins ADD COLUMN "
|
| + "generation_upload_status INTEGER"))
|
| + return false;
|
| + meta_table_.SetVersionNumber(12);
|
| case kCurrentVersionNumber:
|
| // Already up to date
|
| return true;
|
| @@ -511,8 +521,8 @@ PasswordStoreChangeList LoginDatabase::AddLogin(const PasswordForm& form) {
|
| " signon_realm, ssl_valid, preferred, date_created, blacklisted_by_user, "
|
| " scheme, password_type, possible_usernames, times_used, form_data, "
|
| " date_synced, display_name, avatar_url,"
|
| - " federation_url, skip_zero_click) VALUES "
|
| - "(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"));
|
| + " federation_url, skip_zero_click, generation_upload_status) VALUES "
|
| + "(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"));
|
| BindAddStatement(form, encrypted_password, &s);
|
| db_.set_error_callback(base::Bind(&AddCallback));
|
| const bool success = s.Run();
|
| @@ -530,8 +540,8 @@ PasswordStoreChangeList LoginDatabase::AddLogin(const PasswordForm& form) {
|
| " signon_realm, ssl_valid, preferred, date_created, blacklisted_by_user, "
|
| " scheme, password_type, possible_usernames, times_used, form_data, "
|
| " date_synced, display_name, avatar_url,"
|
| - " federation_url, skip_zero_click) VALUES "
|
| - "(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"));
|
| + " federation_url, skip_zero_click, generation_upload_status) VALUES "
|
| + "(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"));
|
| BindAddStatement(form, encrypted_password, &s);
|
| if (s.Run()) {
|
| list.push_back(PasswordStoreChange(PasswordStoreChange::REMOVE, form));
|
| @@ -565,7 +575,8 @@ PasswordStoreChangeList LoginDatabase::UpdateLogin(const PasswordForm& form) {
|
| "display_name = ?, "
|
| "avatar_url = ?, "
|
| "federation_url = ?, "
|
| - "skip_zero_click = ? "
|
| + "skip_zero_click = ?, "
|
| + "generation_upload_status = ? "
|
| "WHERE origin_url = ? AND "
|
| "username_element = ? AND "
|
| "username_value = ? AND "
|
| @@ -589,13 +600,14 @@ PasswordStoreChangeList LoginDatabase::UpdateLogin(const PasswordForm& form) {
|
| s.BindString(13, form.avatar_url.spec());
|
| s.BindString(14, form.federation_url.spec());
|
| s.BindInt(15, form.skip_zero_click);
|
| + s.BindInt(16, form.generation_upload_status);
|
|
|
| // WHERE starts here.
|
| - s.BindString(16, form.origin.spec());
|
| - s.BindString16(17, form.username_element);
|
| - s.BindString16(18, form.username_value);
|
| - s.BindString16(19, form.password_element);
|
| - s.BindString(20, form.signon_realm);
|
| + s.BindString(17, form.origin.spec());
|
| + s.BindString16(18, form.username_element);
|
| + s.BindString16(19, form.username_value);
|
| + s.BindString16(20, form.password_element);
|
| + s.BindString(21, form.signon_realm);
|
|
|
| if (!s.Run())
|
| return PasswordStoreChangeList();
|
| @@ -710,6 +722,13 @@ LoginDatabase::EncryptionResult LoginDatabase::InitPasswordFormFromStatement(
|
| form->avatar_url = GURL(s.ColumnString(COLUMN_AVATAR_URL));
|
| form->federation_url = GURL(s.ColumnString(COLUMN_FEDERATION_URL));
|
| form->skip_zero_click = (s.ColumnInt(COLUMN_SKIP_ZERO_CLICK) > 0);
|
| + int generation_upload_status_int =
|
| + s.ColumnInt(COLUMN_GENERATION_UPLOAD_STATUS);
|
| + DCHECK(generation_upload_status_int >= 0 &&
|
| + generation_upload_status_int <= PasswordForm::UNKNOWN_STATUS);
|
| + form->generation_upload_status =
|
| + static_cast<PasswordForm::GenerationUploadStatus>(
|
| + generation_upload_status_int);
|
| return ENCRYPTION_RESULT_SUCCESS;
|
| }
|
|
|
| @@ -725,7 +744,7 @@ bool LoginDatabase::GetLogins(
|
| "signon_realm, ssl_valid, preferred, date_created, blacklisted_by_user, "
|
| "scheme, password_type, possible_usernames, times_used, form_data, "
|
| "date_synced, display_name, avatar_url, "
|
| - "federation_url, skip_zero_click "
|
| + "federation_url, skip_zero_click, generation_upload_status "
|
| "FROM logins WHERE signon_realm == ? ";
|
| sql::Statement s;
|
| const GURL signon_realm(form.signon_realm);
|
| @@ -823,7 +842,7 @@ bool LoginDatabase::GetLoginsCreatedBetween(
|
| "signon_realm, ssl_valid, preferred, date_created, blacklisted_by_user, "
|
| "scheme, password_type, possible_usernames, times_used, form_data, "
|
| "date_synced, display_name, avatar_url, "
|
| - "federation_url, skip_zero_click FROM logins "
|
| + "federation_url, skip_zero_click, generation_upload_status FROM logins "
|
| "WHERE date_created >= ? AND date_created < ?"
|
| "ORDER BY origin_url"));
|
| s.BindInt64(0, begin.ToInternalValue());
|
| @@ -855,7 +874,7 @@ bool LoginDatabase::GetLoginsSyncedBetween(
|
| "ssl_valid, preferred, date_created, blacklisted_by_user, "
|
| "scheme, password_type, possible_usernames, times_used, form_data, "
|
| "date_synced, display_name, avatar_url, "
|
| - "federation_url, skip_zero_click FROM logins "
|
| + "federation_url, skip_zero_click, generation_upload_status FROM logins "
|
| "WHERE date_synced >= ? AND date_synced < ?"
|
| "ORDER BY origin_url"));
|
| s.BindInt64(0, begin.ToInternalValue());
|
| @@ -899,7 +918,7 @@ bool LoginDatabase::GetAllLoginsWithBlacklistSetting(
|
| "signon_realm, ssl_valid, preferred, date_created, blacklisted_by_user, "
|
| "scheme, password_type, possible_usernames, times_used, form_data, "
|
| "date_synced, display_name, avatar_url, "
|
| - "federation_url, skip_zero_click FROM logins "
|
| + "federation_url, skip_zero_click, generation_upload_status FROM logins "
|
| "WHERE blacklisted_by_user == ? ORDER BY origin_url"));
|
| s.BindInt(0, blacklisted ? 1 : 0);
|
|
|
|
|