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 5de021e0ea7f70dfed308a45bfe280a20d6961a4..ff7d4da279494411702d1a367111191618c5bbc3 100644 |
--- a/components/password_manager/core/browser/login_database.cc |
+++ b/components/password_manager/core/browser/login_database.cc |
@@ -44,32 +44,26 @@ |
namespace password_manager { |
// The current version number of the login database schema. |
-const int kCurrentVersionNumber = 19; |
+const int kCurrentVersionNumber = 18; |
// The oldest version of the schema such that a legacy Chrome client using that |
// version can still read/write the current database. |
-const int kCompatibleVersionNumber = 19; |
- |
-base::Pickle SerializePossibleUsernamePairs( |
- const autofill::PossibleUsernamesVector& vec) { |
+const int kCompatibleVersionNumber = 18; |
+ |
+base::Pickle SerializeVector(const std::vector<base::string16>& vec) { |
base::Pickle p; |
for (size_t i = 0; i < vec.size(); ++i) { |
- p.WriteString16(vec[i].first); |
- p.WriteString16(vec[i].second); |
+ p.WriteString16(vec[i]); |
} |
return p; |
} |
-autofill::PossibleUsernamesVector DeserializePossibleUsernamePairs( |
- const base::Pickle& p) { |
- autofill::PossibleUsernamesVector ret; |
- base::string16 value; |
- base::string16 field_name; |
+std::vector<base::string16> DeserializeVector(const base::Pickle& p) { |
+ std::vector<base::string16> ret; |
+ base::string16 str; |
base::PickleIterator iterator(p); |
- while (iterator.ReadString16(&value)) { |
- bool name_success = iterator.ReadString16(&field_name); |
- DCHECK(name_success); |
- ret.push_back(autofill::PossibleUsernamePair(value, field_name)); |
+ while (iterator.ReadString16(&str)) { |
+ ret.push_back(str); |
} |
return ret; |
} |
@@ -91,6 +85,7 @@ |
COLUMN_BLACKLISTED_BY_USER, |
COLUMN_SCHEME, |
COLUMN_PASSWORD_TYPE, |
+ COLUMN_POSSIBLE_USERNAMES, |
COLUMN_TIMES_USED, |
COLUMN_FORM_DATA, |
COLUMN_DATE_SYNCED, |
@@ -99,7 +94,6 @@ |
COLUMN_FEDERATION_URL, |
COLUMN_SKIP_ZERO_CLICK, |
COLUMN_GENERATION_UPLOAD_STATUS, |
- COLUMN_POSSIBLE_USERNAME_PAIRS, |
COLUMN_NUM // Keep this last. |
}; |
@@ -137,6 +131,11 @@ |
s->BindInt(COLUMN_BLACKLISTED_BY_USER, form.blacklisted_by_user); |
s->BindInt(COLUMN_SCHEME, form.scheme); |
s->BindInt(COLUMN_PASSWORD_TYPE, form.type); |
+ base::Pickle usernames_pickle = |
+ SerializeVector(form.other_possible_usernames); |
+ s->BindBlob(COLUMN_POSSIBLE_USERNAMES, |
+ usernames_pickle.data(), |
+ usernames_pickle.size()); |
s->BindInt(COLUMN_TIMES_USED, form.times_used); |
base::Pickle form_data_pickle; |
autofill::SerializeFormData(form.form_data, &form_data_pickle); |
@@ -153,10 +152,6 @@ |
: form.federation_origin.Serialize()); |
s->BindInt(COLUMN_SKIP_ZERO_CLICK, form.skip_zero_click); |
s->BindInt(COLUMN_GENERATION_UPLOAD_STATUS, form.generation_upload_status); |
- base::Pickle usernames_pickle = |
- SerializePossibleUsernamePairs(form.other_possible_usernames); |
- s->BindBlob(COLUMN_POSSIBLE_USERNAME_PAIRS, usernames_pickle.data(), |
- usernames_pickle.size()); |
} |
void AddCallback(int err, sql::Statement* /*stmt*/) { |
@@ -435,12 +430,6 @@ |
builder->DropColumn("ssl_valid"); |
version = builder->SealVersion(); |
DCHECK_EQ(18u, version); |
- |
- // Version 19. |
- builder->DropColumn("possible_usernames"); |
- builder->AddColumn("possible_username_pairs", "BLOB"); |
- version = builder->SealVersion(); |
- DCHECK_EQ(19u, version); |
DCHECK_EQ(static_cast<size_t>(COLUMN_NUM), builder->NumberOfColumns()) |
<< "Adjust LoginTableColumns if you change column definitions here."; |
@@ -855,43 +844,37 @@ |
DCHECK(!update_statement_.empty()); |
sql::Statement s( |
db_.GetCachedStatement(SQL_FROM_HERE, update_statement_.c_str())); |
- int next_param = 0; |
- s.BindString(next_param++, form.action.spec()); |
- s.BindBlob(next_param++, encrypted_password.data(), |
+ s.BindString(0, form.action.spec()); |
+ s.BindBlob(1, encrypted_password.data(), |
static_cast<int>(encrypted_password.length())); |
- s.BindString16(next_param++, form.submit_element); |
- s.BindInt(next_param++, form.preferred); |
- s.BindInt64(next_param++, form.date_created.ToInternalValue()); |
- s.BindInt(next_param++, form.blacklisted_by_user); |
- s.BindInt(next_param++, form.scheme); |
- s.BindInt(next_param++, form.type); |
- s.BindInt(next_param++, form.times_used); |
+ s.BindString16(2, form.submit_element); |
+ s.BindInt(3, form.preferred); |
+ s.BindInt64(4, form.date_created.ToInternalValue()); |
+ s.BindInt(5, form.blacklisted_by_user); |
+ s.BindInt(6, form.scheme); |
+ s.BindInt(7, form.type); |
+ base::Pickle pickle = SerializeVector(form.other_possible_usernames); |
+ s.BindBlob(8, pickle.data(), pickle.size()); |
+ s.BindInt(9, form.times_used); |
base::Pickle form_data_pickle; |
autofill::SerializeFormData(form.form_data, &form_data_pickle); |
- s.BindBlob(next_param++, form_data_pickle.data(), form_data_pickle.size()); |
- s.BindInt64(next_param++, form.date_synced.ToInternalValue()); |
- s.BindString16(next_param++, form.display_name); |
- s.BindString(next_param++, form.icon_url.spec()); |
+ s.BindBlob(10, form_data_pickle.data(), form_data_pickle.size()); |
+ s.BindInt64(11, form.date_synced.ToInternalValue()); |
+ s.BindString16(12, form.display_name); |
+ s.BindString(13, form.icon_url.spec()); |
// An empty Origin serializes as "null" which would be strange to store here. |
- s.BindString(next_param++, form.federation_origin.unique() |
- ? std::string() |
- : form.federation_origin.Serialize()); |
- s.BindInt(next_param++, form.skip_zero_click); |
- s.BindInt(next_param++, form.generation_upload_status); |
- base::Pickle username_pickle = |
- SerializePossibleUsernamePairs(form.other_possible_usernames); |
- s.BindBlob(next_param++, username_pickle.data(), username_pickle.size()); |
- // NOTE: Add new fields here unless the field is a part of the unique key. |
- // If so, add new field below. |
+ s.BindString(14, form.federation_origin.unique() |
+ ? std::string() |
+ : form.federation_origin.Serialize()); |
+ s.BindInt(15, form.skip_zero_click); |
+ s.BindInt(16, form.generation_upload_status); |
// WHERE starts here. |
- s.BindString(next_param++, form.origin.spec()); |
- s.BindString16(next_param++, form.username_element); |
- s.BindString16(next_param++, form.username_value); |
- s.BindString16(next_param++, form.password_element); |
- s.BindString(next_param++, form.signon_realm); |
- // NOTE: Add new fields here only if the field is a part of the unique key. |
- // Otherwise, add the field above "WHERE starts here" comment. |
+ 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(); |
@@ -1015,11 +998,11 @@ |
int type_int = s.ColumnInt(COLUMN_PASSWORD_TYPE); |
DCHECK(type_int >= 0 && type_int <= PasswordForm::TYPE_LAST) << type_int; |
form->type = static_cast<PasswordForm::Type>(type_int); |
- if (s.ColumnByteLength(COLUMN_POSSIBLE_USERNAME_PAIRS)) { |
+ if (s.ColumnByteLength(COLUMN_POSSIBLE_USERNAMES)) { |
base::Pickle pickle( |
- static_cast<const char*>(s.ColumnBlob(COLUMN_POSSIBLE_USERNAME_PAIRS)), |
- s.ColumnByteLength(COLUMN_POSSIBLE_USERNAME_PAIRS)); |
- form->other_possible_usernames = DeserializePossibleUsernamePairs(pickle); |
+ static_cast<const char*>(s.ColumnBlob(COLUMN_POSSIBLE_USERNAMES)), |
+ s.ColumnByteLength(COLUMN_POSSIBLE_USERNAMES)); |
+ form->other_possible_usernames = DeserializeVector(pickle); |
} |
form->times_used = s.ColumnInt(COLUMN_TIMES_USED); |
if (s.ColumnByteLength(COLUMN_FORM_DATA)) { |