Chromium Code Reviews| 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 4fbd3b2279808b2830ce08fe2a25c987f7337697..641d9a1f83adca91fe3ff73ec18d5908e724ae3f 100644 |
| --- a/components/password_manager/core/browser/login_database.cc |
| +++ b/components/password_manager/core/browser/login_database.cc |
| @@ -25,7 +25,7 @@ using autofill::PasswordForm; |
| namespace password_manager { |
| -static const int kCurrentVersionNumber = 6; |
| +static const int kCurrentVersionNumber = 7; |
| static const int kCompatibleVersionNumber = 1; |
| Pickle SerializeVector(const std::vector<base::string16>& vec) { |
| @@ -69,7 +69,11 @@ enum LoginTableColumns { |
| COLUMN_TIMES_USED, |
| COLUMN_FORM_DATA, |
| COLUMN_USE_ADDITIONAL_AUTH, |
| - COLUMN_DATE_SYNCED |
| + COLUMN_DATE_SYNCED, |
| + COLUMN_DISPLAY_NAME, |
| + COLUMN_AVATAR_URL, |
| + COLUMN_FEDERATION_URL, |
| + COLUMN_ZERO_CLICK, |
| }; |
| void BindAddStatement(const PasswordForm& form, |
| @@ -102,6 +106,10 @@ void BindAddStatement(const PasswordForm& form, |
| form_data_pickle.size()); |
| s->BindInt(COLUMN_USE_ADDITIONAL_AUTH, form.use_additional_authentication); |
| s->BindInt64(COLUMN_DATE_SYNCED, form.date_synced.ToInternalValue()); |
| + s->BindString16(COLUMN_DISPLAY_NAME, form.display_name); |
| + s->BindString(COLUMN_AVATAR_URL, form.avatar_url.spec()); |
| + s->BindString(COLUMN_FEDERATION_URL, form.federation_url.spec()); |
|
Mike West
2014/08/18 18:52:11
How do we deal with invalid URLs here? Perhaps a D
vasilii
2014/08/20 11:45:34
GURL::spec() will assert and return the empty stri
|
| + s->BindInt(COLUMN_ZERO_CLICK, form.is_zero_click); |
|
Mike West
2014/08/18 18:52:11
Nit: I'd suggest standardizing on either "zero cli
vasilii
2014/08/20 11:45:34
Done.
|
| } |
| void AddCallback(int err, sql::Statement* /*stmt*/) { |
| @@ -203,12 +211,21 @@ bool LoginDatabase::MigrateOldVersionsAsNeeded() { |
| meta_table_.SetVersionNumber(5); |
| // Fall through. |
| case 5: |
| - if (!db_.Execute( |
| - "ALTER TABLE logins ADD COLUMN date_synced INTEGER")) { |
| + if (!db_.Execute("ALTER TABLE logins ADD COLUMN date_synced INTEGER")) { |
| return false; |
| } |
| meta_table_.SetVersionNumber(6); |
| // Fall through. |
| + case 6: |
| + if (!db_.Execute("ALTER TABLE logins ADD COLUMN display_name VARCHAR") || |
| + !db_.Execute("ALTER TABLE logins ADD COLUMN avatar_url VARCHAR") || |
| + !db_.Execute("ALTER TABLE logins " |
| + "ADD COLUMN federation_url VARCHAR") || |
| + !db_.Execute("ALTER TABLE logins ADD COLUMN is_zero_click INTEGER")) { |
| + return false; |
| + } |
| + meta_table_.SetVersionNumber(7); |
| + // Fall through. |
| case kCurrentVersionNumber: |
| // Already up to date |
| return true; |
| @@ -240,6 +257,10 @@ bool LoginDatabase::InitLoginsTable() { |
| "form_data BLOB," |
| "use_additional_auth INTEGER," |
| "date_synced INTEGER," |
| + "display_name VARCHAR," |
| + "avatar_url VARCHAR," |
| + "federation_url VARCHAR," |
| + "is_zero_click INTEGER," |
| "UNIQUE " |
| "(origin_url, username_element, " |
| "username_value, password_element, " |
| @@ -344,8 +365,9 @@ 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, date_synced) VALUES " |
| - "(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)")); |
| + " use_additional_auth, date_synced, display_name, avatar_url," |
| + " federation_url, is_zero_click) VALUES " |
| + "(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)")); |
| BindAddStatement(form, encrypted_password, &s); |
| db_.set_error_callback(base::Bind(&AddCallback)); |
| const bool success = s.Run(); |
| @@ -361,8 +383,9 @@ 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, date_synced) VALUES " |
| - "(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)")); |
| + " use_additional_auth, date_synced, display_name, avatar_url," |
| + " federation_url, is_zero_click) VALUES " |
| + "(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)")); |
| BindAddStatement(form, encrypted_password, &s); |
| if (s.Run()) { |
| list.push_back(PasswordStoreChange(PasswordStoreChange::REMOVE, form)); |
| @@ -392,7 +415,11 @@ PasswordStoreChangeList LoginDatabase::UpdateLogin(const PasswordForm& form) { |
| "date_created = ?, " |
| "blacklisted_by_user = ?, " |
| "scheme = ?, " |
| - "password_type = ? " |
| + "password_type = ?, " |
| + "display_name = ?, " |
| + "avatar_url = ?, " |
| + "federation_url = ?, " |
| + "is_zero_click = ? " |
| "WHERE origin_url = ? AND " |
| "username_element = ? AND " |
| "username_value = ? AND " |
| @@ -412,12 +439,16 @@ PasswordStoreChangeList LoginDatabase::UpdateLogin(const PasswordForm& form) { |
| s.BindInt(9, form.blacklisted_by_user); |
| s.BindInt(10, form.scheme); |
| s.BindInt(11, form.type); |
| + s.BindString16(12, form.display_name); |
| + s.BindString(13, form.avatar_url.spec()); |
| + s.BindString(14, form.federation_url.spec()); |
| + s.BindInt(15, form.is_zero_click); |
| - s.BindString(12, form.origin.spec()); |
| - s.BindString16(13, form.username_element); |
| - s.BindString16(14, form.username_value); |
| - s.BindString16(15, form.password_element); |
| - s.BindString(16, form.signon_realm); |
| + s.BindString(16, form.origin.spec()); |
|
Mike West
2014/08/18 18:52:11
Nit: It's probably worth adding a "// WHERE starts
vasilii
2014/08/20 11:45:34
Done.
|
| + s.BindString16(17, form.username_element); |
| + s.BindString16(18, form.username_value); |
| + s.BindString16(19, form.password_element); |
| + s.BindString(20, form.signon_realm); |
| if (!s.Run()) |
| return PasswordStoreChangeList(); |
| @@ -525,6 +556,10 @@ LoginDatabase::EncryptionResult LoginDatabase::InitPasswordFormFromStatement( |
| (s.ColumnInt(COLUMN_USE_ADDITIONAL_AUTH) > 0); |
| form->date_synced = base::Time::FromInternalValue( |
| s.ColumnInt64(COLUMN_DATE_SYNCED)); |
| + form->display_name = s.ColumnString16(COLUMN_DISPLAY_NAME); |
| + form->avatar_url = GURL(s.ColumnString(COLUMN_AVATAR_URL)); |
| + form->federation_url = GURL(s.ColumnString(COLUMN_FEDERATION_URL)); |
|
Mike West
2014/08/18 18:52:11
Nit: Do we do error handling anywhere else for thi
vasilii
2014/08/20 11:45:34
But empty URLs are invalid too.
|
| + form->is_zero_click = (s.ColumnInt(COLUMN_ZERO_CLICK) > 0); |
| return ENCRYPTION_RESULT_SUCCESS; |
| } |
| @@ -537,7 +572,8 @@ 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, date_synced FROM logins WHERE signon_realm == ? "; |
| + "use_additional_auth, date_synced, display_name, avatar_url, " |
| + "federation_url, is_zero_click FROM logins WHERE signon_realm == ? "; |
| sql::Statement s; |
| const GURL signon_realm(form.signon_realm); |
| std::string registered_domain = |
| @@ -632,7 +668,8 @@ 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, date_synced FROM logins " |
| + "use_additional_auth, date_synced, display_name, avatar_url, " |
| + "federation_url, is_zero_click FROM logins " |
| "WHERE date_created >= ? AND date_created < ?" |
| "ORDER BY origin_url")); |
| s.BindInt64(0, begin.ToTimeT()); |
| @@ -663,7 +700,8 @@ bool LoginDatabase::GetLoginsSyncedBetween( |
| "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 " |
| + "use_additional_auth, date_synced, display_name, avatar_url, " |
| + "federation_url, is_zero_click FROM logins " |
| "WHERE date_synced >= ? AND date_synced < ?" |
| "ORDER BY origin_url")); |
| s.BindInt64(0, begin.ToInternalValue()); |
| @@ -704,7 +742,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, date_synced FROM logins " |
| + "use_additional_auth, date_synced, display_name, avatar_url, " |
| + "federation_url, is_zero_click FROM logins " |
| "WHERE blacklisted_by_user == ? ORDER BY origin_url")); |
| s.BindInt(0, blacklisted ? 1 : 0); |