Index: components/autofill/core/browser/autofill_profile.cc |
diff --git a/components/autofill/core/browser/autofill_profile.cc b/components/autofill/core/browser/autofill_profile.cc |
index 653060ac7c5ab7bdc0b006e33c0ef82e73ee444e..f1577ed84ee11cd32c31fd861c8357a9e7071f40 100644 |
--- a/components/autofill/core/browser/autofill_profile.cc |
+++ b/components/autofill/core/browser/autofill_profile.cc |
@@ -32,13 +32,12 @@ namespace { |
// Like |AutofillType::GetEquivalentFieldType()|, but also returns |NAME_FULL| |
// for first, middle, and last name field types. |
-AutofillFieldType GetEquivalentFieldTypeCollapsingNames( |
- AutofillFieldType field_type) { |
- if (field_type == NAME_FIRST || field_type == NAME_MIDDLE || |
- field_type == NAME_LAST || field_type == NAME_MIDDLE_INITIAL) |
+ServerFieldType GetEquivalentFieldTypeCollapsingNames(ServerFieldType type) { |
+ if (type == NAME_FIRST || type == NAME_MIDDLE || type == NAME_LAST || |
+ type == NAME_MIDDLE_INITIAL) |
return NAME_FULL; |
- return AutofillType::GetEquivalentFieldType(field_type); |
+ return AutofillType::GetEquivalentFieldType(type); |
} |
// Fills |distinguishing_fields| with a list of fields to use when creating |
@@ -49,10 +48,10 @@ AutofillFieldType GetEquivalentFieldTypeCollapsingNames( |
// |UNKNOWN_TYPE| by convention. The resulting list of fields is sorted in |
// decreasing order of importance. |
void GetFieldsForDistinguishingProfiles( |
- const std::vector<AutofillFieldType>* suggested_fields, |
- AutofillFieldType excluded_field, |
- std::vector<AutofillFieldType>* distinguishing_fields) { |
- static const AutofillFieldType kDefaultDistinguishingFields[] = { |
+ const std::vector<ServerFieldType>* suggested_fields, |
+ ServerFieldType excluded_field, |
+ std::vector<ServerFieldType>* distinguishing_fields) { |
+ static const ServerFieldType kDefaultDistinguishingFields[] = { |
NAME_FULL, |
ADDRESS_HOME_LINE1, |
ADDRESS_HOME_LINE2, |
@@ -75,16 +74,15 @@ void GetFieldsForDistinguishingProfiles( |
// Keep track of which fields we've seen so that we avoid duplicate entries. |
// Always ignore fields of unknown type and the excluded field. |
- std::set<AutofillFieldType> seen_fields; |
+ std::set<ServerFieldType> seen_fields; |
seen_fields.insert(UNKNOWN_TYPE); |
seen_fields.insert(GetEquivalentFieldTypeCollapsingNames(excluded_field)); |
distinguishing_fields->clear(); |
- for (std::vector<AutofillFieldType>::const_iterator it = |
+ for (std::vector<ServerFieldType>::const_iterator it = |
suggested_fields->begin(); |
it != suggested_fields->end(); ++it) { |
- AutofillFieldType suggested_type = |
- GetEquivalentFieldTypeCollapsingNames(*it); |
+ ServerFieldType suggested_type = GetEquivalentFieldTypeCollapsingNames(*it); |
if (seen_fields.insert(suggested_type).second) |
distinguishing_fields->push_back(suggested_type); |
} |
@@ -95,7 +93,7 @@ void GetFieldsForDistinguishingProfiles( |
// distinguish between profiles that are identical except for the name. |
if (excluded_field != NAME_FULL && |
GetEquivalentFieldTypeCollapsingNames(excluded_field) == NAME_FULL) { |
- for (std::vector<AutofillFieldType>::const_iterator it = |
+ for (std::vector<ServerFieldType>::const_iterator it = |
suggested_fields->begin(); |
it != suggested_fields->end(); ++it) { |
if (*it != excluded_field && |
@@ -110,7 +108,7 @@ void GetFieldsForDistinguishingProfiles( |
// A helper function for string streaming. Concatenates multi-valued entries |
// stored for a given |type| into a single string. This string is returned. |
const base::string16 MultiString(const AutofillProfile& p, |
- AutofillFieldType type) { |
+ ServerFieldType type) { |
std::vector<base::string16> values; |
p.GetRawMultiInfo(type, &values); |
base::string16 accumulate; |
@@ -123,15 +121,15 @@ const base::string16 MultiString(const AutofillProfile& p, |
} |
base::string16 GetFormGroupInfo(const FormGroup& form_group, |
- AutofillFieldType type, |
+ const AutofillType& type, |
const std::string& app_locale) { |
return app_locale.empty() ? |
- form_group.GetRawInfo(type) : |
+ form_group.GetRawInfo(type.server_type()) : |
form_group.GetInfo(type, app_locale); |
} |
template <class T> |
-void CopyValuesToItems(AutofillFieldType type, |
+void CopyValuesToItems(ServerFieldType type, |
const std::vector<base::string16>& values, |
std::vector<T>* form_group_items, |
const T& prototype) { |
@@ -146,7 +144,7 @@ void CopyValuesToItems(AutofillFieldType type, |
} |
template <class T> |
-void CopyItemsToValues(AutofillFieldType type, |
+void CopyItemsToValues(const AutofillType& type, |
const std::vector<T>& form_group_items, |
const std::string& app_locale, |
std::vector<base::string16>* values) { |
@@ -158,11 +156,11 @@ void CopyItemsToValues(AutofillFieldType type, |
// Collapse compound field types to their "full" type. I.e. First name |
// collapses to full name, area code collapses to full phone, etc. |
-void CollapseCompoundFieldTypes(FieldTypeSet* type_set) { |
- FieldTypeSet collapsed_set; |
- for (FieldTypeSet::iterator iter = type_set->begin(); iter != type_set->end(); |
- ++iter) { |
- switch (*iter) { |
+void CollapseCompoundFieldTypes(ServerFieldTypeSet* type_set) { |
+ ServerFieldTypeSet collapsed_set; |
+ for (ServerFieldTypeSet::iterator it = type_set->begin(); |
+ it != type_set->end(); ++it) { |
+ switch (*it) { |
case NAME_FIRST: |
case NAME_MIDDLE: |
case NAME_LAST: |
@@ -181,7 +179,7 @@ void CollapseCompoundFieldTypes(FieldTypeSet* type_set) { |
break; |
default: |
- collapsed_set.insert(*iter); |
+ collapsed_set.insert(*it); |
} |
} |
std::swap(*type_set, collapsed_set); |
@@ -267,41 +265,43 @@ AutofillProfile& AutofillProfile::operator=(const AutofillProfile& profile) { |
return *this; |
} |
-void AutofillProfile::GetMatchingTypes(const base::string16& text, |
- const std::string& app_locale, |
- FieldTypeSet* matching_types) const { |
+void AutofillProfile::GetMatchingTypes( |
+ const base::string16& text, |
+ const std::string& app_locale, |
+ ServerFieldTypeSet* matching_types) const { |
FormGroupList info = FormGroups(); |
for (FormGroupList::const_iterator it = info.begin(); it != info.end(); ++it) |
(*it)->GetMatchingTypes(text, app_locale, matching_types); |
} |
-base::string16 AutofillProfile::GetRawInfo(AutofillFieldType type) const { |
- AutofillFieldType return_type = AutofillType::GetEquivalentFieldType(type); |
- const FormGroup* form_group = FormGroupForType(return_type); |
+base::string16 AutofillProfile::GetRawInfo(ServerFieldType type) const { |
+ ServerFieldType return_type = AutofillType::GetEquivalentFieldType(type); |
+ const FormGroup* form_group = FormGroupForType(AutofillType(return_type)); |
if (!form_group) |
return base::string16(); |
return form_group->GetRawInfo(return_type); |
} |
-void AutofillProfile::SetRawInfo(AutofillFieldType type, |
+void AutofillProfile::SetRawInfo(ServerFieldType type, |
const base::string16& value) { |
- FormGroup* form_group = MutableFormGroupForType(type); |
+ FormGroup* form_group = MutableFormGroupForType(AutofillType(type)); |
if (form_group) |
form_group->SetRawInfo(type, CollapseWhitespace(value, false)); |
} |
-base::string16 AutofillProfile::GetInfo(AutofillFieldType type, |
- const std::string& app_locale) const { |
- AutofillFieldType return_type = AutofillType::GetEquivalentFieldType(type); |
- const FormGroup* form_group = FormGroupForType(return_type); |
+base::string16 AutofillProfile::GetInfo(const AutofillType& type, |
+ const std::string& app_locale) const { |
+ ServerFieldType return_type = |
+ AutofillType::GetEquivalentFieldType(type.server_type()); |
+ const FormGroup* form_group = FormGroupForType(AutofillType(return_type)); |
if (!form_group) |
return base::string16(); |
- return form_group->GetInfo(return_type, app_locale); |
+ return form_group->GetInfo(AutofillType(return_type), app_locale); |
} |
-bool AutofillProfile::SetInfo(AutofillFieldType type, |
+bool AutofillProfile::SetInfo(const AutofillType& type, |
const base::string16& value, |
const std::string& app_locale) { |
FormGroup* form_group = MutableFormGroupForType(type); |
@@ -313,7 +313,7 @@ bool AutofillProfile::SetInfo(AutofillFieldType type, |
} |
void AutofillProfile::SetRawMultiInfo( |
- AutofillFieldType type, |
+ ServerFieldType type, |
const std::vector<base::string16>& values) { |
switch (AutofillType(type).group()) { |
case NAME: |
@@ -344,12 +344,12 @@ void AutofillProfile::SetRawMultiInfo( |
} |
void AutofillProfile::GetRawMultiInfo( |
- AutofillFieldType type, |
+ ServerFieldType type, |
std::vector<base::string16>* values) const { |
- GetMultiInfoImpl(type, std::string(), values); |
+ GetMultiInfoImpl(AutofillType(type), std::string(), values); |
} |
-void AutofillProfile::GetMultiInfo(AutofillFieldType type, |
+void AutofillProfile::GetMultiInfo(const AutofillType& type, |
const std::string& app_locale, |
std::vector<base::string16>* values) const { |
GetMultiInfoImpl(type, app_locale, values); |
@@ -359,11 +359,12 @@ void AutofillProfile::FillFormField(const AutofillField& field, |
size_t variant, |
const std::string& app_locale, |
FormFieldData* field_data) const { |
- AutofillFieldType type = field.type(); |
- DCHECK_NE(CREDIT_CARD, AutofillType(type).group()); |
+ AutofillType type = field.Type(); |
+ DCHECK_NE(CREDIT_CARD, type.group()); |
DCHECK(field_data); |
- if (type == PHONE_HOME_NUMBER || type == PHONE_BILLING_NUMBER) { |
+ if (type.server_type() == PHONE_HOME_NUMBER || |
+ type.server_type() == PHONE_BILLING_NUMBER) { |
FillPhoneNumberField(field, variant, app_locale, field_data); |
} else if (field_data->form_control_type == "select-one") { |
FillSelectControl(type, app_locale, field_data); |
@@ -385,7 +386,7 @@ void AutofillProfile::FillPhoneNumberField(const AutofillField& field, |
const std::string& app_locale, |
FormFieldData* field_data) const { |
std::vector<base::string16> values; |
- GetMultiInfo(field.type(), app_locale, &values); |
+ GetMultiInfo(field.Type(), app_locale, &values); |
DCHECK(variant < values.size()); |
// If we are filling a phone number, check to see if the size field |
@@ -412,12 +413,12 @@ const base::string16 AutofillProfile::Label() const { |
} |
bool AutofillProfile::IsEmpty(const std::string& app_locale) const { |
- FieldTypeSet types; |
+ ServerFieldTypeSet types; |
GetNonEmptyTypes(app_locale, &types); |
return types.empty(); |
} |
-bool AutofillProfile::IsPresentButInvalid(AutofillFieldType type) const { |
+bool AutofillProfile::IsPresentButInvalid(ServerFieldType type) const { |
std::string country = UTF16ToUTF8(GetRawInfo(ADDRESS_HOME_COUNTRY)); |
base::string16 data = GetRawInfo(type); |
switch (type) { |
@@ -447,13 +448,13 @@ bool AutofillProfile::IsPresentButInvalid(AutofillFieldType type) const { |
int AutofillProfile::Compare(const AutofillProfile& profile) const { |
- const AutofillFieldType single_value_types[] = { COMPANY_NAME, |
- ADDRESS_HOME_LINE1, |
- ADDRESS_HOME_LINE2, |
- ADDRESS_HOME_CITY, |
- ADDRESS_HOME_STATE, |
- ADDRESS_HOME_ZIP, |
- ADDRESS_HOME_COUNTRY }; |
+ const ServerFieldType single_value_types[] = { COMPANY_NAME, |
+ ADDRESS_HOME_LINE1, |
+ ADDRESS_HOME_LINE2, |
+ ADDRESS_HOME_CITY, |
+ ADDRESS_HOME_STATE, |
+ ADDRESS_HOME_ZIP, |
+ ADDRESS_HOME_COUNTRY }; |
for (size_t i = 0; i < arraysize(single_value_types); ++i) { |
int comparison = GetRawInfo(single_value_types[i]).compare( |
@@ -462,11 +463,11 @@ int AutofillProfile::Compare(const AutofillProfile& profile) const { |
return comparison; |
} |
- const AutofillFieldType multi_value_types[] = { NAME_FIRST, |
- NAME_MIDDLE, |
- NAME_LAST, |
- EMAIL_ADDRESS, |
- PHONE_HOME_WHOLE_NUMBER }; |
+ const ServerFieldType multi_value_types[] = { NAME_FIRST, |
+ NAME_MIDDLE, |
+ NAME_LAST, |
+ EMAIL_ADDRESS, |
+ PHONE_HOME_WHOLE_NUMBER }; |
for (size_t i = 0; i < arraysize(multi_value_types); ++i) { |
std::vector<base::string16> values_a; |
@@ -503,30 +504,30 @@ const base::string16 AutofillProfile::PrimaryValue() const { |
bool AutofillProfile::IsSubsetOf(const AutofillProfile& profile, |
const std::string& app_locale) const { |
- FieldTypeSet types; |
+ ServerFieldTypeSet types; |
GetNonEmptyTypes(app_locale, &types); |
- for (FieldTypeSet::const_iterator iter = types.begin(); iter != types.end(); |
- ++iter) { |
- if (*iter == NAME_FULL) { |
+ for (ServerFieldTypeSet::const_iterator it = types.begin(); it != types.end(); |
+ ++it) { |
+ if (*it == NAME_FULL) { |
// Ignore the compound "full name" field type. We are only interested in |
// comparing the constituent parts. For example, if |this| has a middle |
// name saved, but |profile| lacks one, |profile| could still be a subset |
// of |this|. |
continue; |
- } else if (AutofillType(*iter).group() == PHONE_HOME) { |
+ } else if (AutofillType(*it).group() == PHONE_HOME) { |
// Phone numbers should be canonicalized prior to being compared. |
- if (*iter != PHONE_HOME_WHOLE_NUMBER) { |
+ if (*it != PHONE_HOME_WHOLE_NUMBER) { |
continue; |
} else if (!i18n::PhoneNumbersMatch( |
- GetRawInfo(*iter), |
- profile.GetRawInfo(*iter), |
+ GetRawInfo(*it), |
+ profile.GetRawInfo(*it), |
UTF16ToASCII(GetRawInfo(ADDRESS_HOME_COUNTRY)), |
app_locale)) { |
return false; |
} |
- } else if (StringToLowerASCII(GetRawInfo(*iter)) != |
- StringToLowerASCII(profile.GetRawInfo(*iter))) { |
+ } else if (StringToLowerASCII(GetRawInfo(*it)) != |
+ StringToLowerASCII(profile.GetRawInfo(*it))) { |
return false; |
} |
} |
@@ -540,14 +541,14 @@ void AutofillProfile::OverwriteWithOrAddTo(const AutofillProfile& profile, |
DCHECK(!IsVerified() || profile.IsVerified()); |
set_origin(profile.origin()); |
- FieldTypeSet field_types; |
+ ServerFieldTypeSet field_types; |
profile.GetNonEmptyTypes(app_locale, &field_types); |
// Only transfer "full" types (e.g. full name) and not fragments (e.g. |
// first name, last name). |
CollapseCompoundFieldTypes(&field_types); |
- for (FieldTypeSet::const_iterator iter = field_types.begin(); |
+ for (ServerFieldTypeSet::const_iterator iter = field_types.begin(); |
iter != field_types.end(); ++iter) { |
if (AutofillProfile::SupportsMultiValue(*iter)) { |
std::vector<base::string16> new_values; |
@@ -588,7 +589,7 @@ void AutofillProfile::OverwriteWithOrAddTo(const AutofillProfile& profile, |
} |
// static |
-bool AutofillProfile::SupportsMultiValue(AutofillFieldType type) { |
+bool AutofillProfile::SupportsMultiValue(ServerFieldType type) { |
FieldTypeGroup group = AutofillType(type).group(); |
return group == NAME || |
group == NAME_BILLING || |
@@ -620,14 +621,14 @@ bool AutofillProfile::AdjustInferredLabels( |
// static |
void AutofillProfile::CreateInferredLabels( |
const std::vector<AutofillProfile*>* profiles, |
- const std::vector<AutofillFieldType>* suggested_fields, |
- AutofillFieldType excluded_field, |
+ const std::vector<ServerFieldType>* suggested_fields, |
+ ServerFieldType excluded_field, |
size_t minimal_fields_shown, |
std::vector<base::string16>* created_labels) { |
DCHECK(profiles); |
DCHECK(created_labels); |
- std::vector<AutofillFieldType> fields_to_use; |
+ std::vector<ServerFieldType> fields_to_use; |
GetFieldsForDistinguishingProfiles(suggested_fields, excluded_field, |
&fields_to_use); |
@@ -660,7 +661,8 @@ void AutofillProfile::CreateInferredLabels( |
} |
} |
-void AutofillProfile::GetSupportedTypes(FieldTypeSet* supported_types) const { |
+void AutofillProfile::GetSupportedTypes( |
+ ServerFieldTypeSet* supported_types) const { |
FormGroupList info = FormGroups(); |
for (FormGroupList::const_iterator it = info.begin(); it != info.end(); ++it) |
(*it)->GetSupportedTypes(supported_types); |
@@ -689,10 +691,10 @@ bool AutofillProfile::FillCountrySelectControl( |
} |
void AutofillProfile::GetMultiInfoImpl( |
- AutofillFieldType type, |
+ const AutofillType& type, |
const std::string& app_locale, |
std::vector<base::string16>* values) const { |
- switch (AutofillType(type).group()) { |
+ switch (type.group()) { |
case NAME: |
case NAME_BILLING: |
CopyItemsToValues(type, name_, app_locale, values); |
@@ -726,14 +728,14 @@ void AutofillProfile::AddPhoneIfUnique( |
} |
base::string16 AutofillProfile::ConstructInferredLabel( |
- const std::vector<AutofillFieldType>& included_fields, |
+ const std::vector<ServerFieldType>& included_fields, |
size_t num_fields_to_use) const { |
const base::string16 separator = |
l10n_util::GetStringUTF16(IDS_AUTOFILL_ADDRESS_SUMMARY_SEPARATOR); |
base::string16 label; |
size_t num_fields_used = 0; |
- for (std::vector<AutofillFieldType>::const_iterator it = |
+ for (std::vector<ServerFieldType>::const_iterator it = |
included_fields.begin(); |
it != included_fields.end() && num_fields_used < num_fields_to_use; |
++it) { |
@@ -754,14 +756,14 @@ base::string16 AutofillProfile::ConstructInferredLabel( |
void AutofillProfile::CreateDifferentiatingLabels( |
const std::vector<AutofillProfile*>& profiles, |
const std::list<size_t>& indices, |
- const std::vector<AutofillFieldType>& fields, |
+ const std::vector<ServerFieldType>& fields, |
size_t num_fields_to_include, |
std::vector<base::string16>* created_labels) { |
// For efficiency, we first construct a map of fields to their text values and |
// each value's frequency. |
- std::map<AutofillFieldType, |
+ std::map<ServerFieldType, |
std::map<base::string16, size_t> > field_text_frequencies_by_field; |
- for (std::vector<AutofillFieldType>::const_iterator field = fields.begin(); |
+ for (std::vector<ServerFieldType>::const_iterator field = fields.begin(); |
field != fields.end(); ++field) { |
std::map<base::string16, size_t>& field_text_frequencies = |
field_text_frequencies_by_field[*field]; |
@@ -791,9 +793,9 @@ void AutofillProfile::CreateDifferentiatingLabels( |
it != indices.end(); ++it) { |
const AutofillProfile* profile = profiles[*it]; |
- std::vector<AutofillFieldType> label_fields; |
+ std::vector<ServerFieldType> label_fields; |
bool found_differentiating_field = false; |
- for (std::vector<AutofillFieldType>::const_iterator field = fields.begin(); |
+ for (std::vector<ServerFieldType>::const_iterator field = fields.begin(); |
field != fields.end(); ++field) { |
// Skip over empty fields. |
base::string16 field_text = profile->GetRawInfo(*field); |
@@ -838,36 +840,37 @@ AutofillProfile::FormGroupList AutofillProfile::FormGroups() const { |
} |
const FormGroup* AutofillProfile::FormGroupForType( |
- AutofillFieldType type) const { |
+ const AutofillType& type) const { |
return const_cast<AutofillProfile*>(this)->MutableFormGroupForType(type); |
} |
-FormGroup* AutofillProfile::MutableFormGroupForType(AutofillFieldType type) { |
- FormGroup* form_group = NULL; |
- switch (AutofillType(type).group()) { |
+FormGroup* AutofillProfile::MutableFormGroupForType(const AutofillType& type) { |
+ switch (type.group()) { |
case NAME: |
case NAME_BILLING: |
- form_group = &name_[0]; |
- break; |
+ return &name_[0]; |
+ |
case EMAIL: |
- form_group = &email_[0]; |
- break; |
+ return &email_[0]; |
+ |
case COMPANY: |
- form_group = &company_; |
- break; |
+ return &company_; |
+ |
case PHONE_HOME: |
case PHONE_BILLING: |
- form_group = &phone_number_[0]; |
- break; |
+ return &phone_number_[0]; |
+ |
case ADDRESS_HOME: |
case ADDRESS_BILLING: |
- form_group = &address_; |
- break; |
- default: |
- break; |
+ return &address_; |
+ |
+ case NO_GROUP: |
+ case CREDIT_CARD: |
+ return NULL; |
} |
- return form_group; |
+ NOTREACHED(); |
+ return NULL; |
} |
// So we can compare AutofillProfiles with EXPECT_EQ(). |