Chromium Code Reviews| Index: chrome/browser/autofill/autofill_profile.cc |
| =================================================================== |
| --- chrome/browser/autofill/autofill_profile.cc (revision 84722) |
| +++ chrome/browser/autofill/autofill_profile.cc (working copy) |
| @@ -15,8 +15,8 @@ |
| #include "chrome/browser/autofill/address.h" |
| #include "chrome/browser/autofill/autofill_type.h" |
| #include "chrome/browser/autofill/contact_info.h" |
| -#include "chrome/browser/autofill/fax_number.h" |
| -#include "chrome/browser/autofill/home_phone_number.h" |
| +#include "chrome/browser/autofill/phone_number.h" |
| +#include "chrome/browser/autofill/phone_number_i18n.h" |
| #include "chrome/common/guid.h" |
| #include "grit/generated_resources.h" |
| #include "ui/base/l10n/l10n_util.h" |
| @@ -178,6 +178,9 @@ |
| AutofillProfile::AutofillProfile(const std::string& guid) |
| : guid_(guid), name_(1), email_(1), home_number_(1), fax_number_(1) { |
| + // Set the type of the phones - it is set on first SetInfo() call. |
|
dhollowa
2011/05/13 18:55:35
Better to use the vector initializer to set the ph
GeorgeY
2011/05/18 17:41:45
Done.
|
| + home_number_[0].SetInfo(PHONE_HOME_WHOLE_NUMBER, string16()); |
| + fax_number_[0].SetInfo(PHONE_FAX_WHOLE_NUMBER, string16()); |
| } |
| AutofillProfile::AutofillProfile() |
| @@ -186,6 +189,9 @@ |
| email_(1), |
| home_number_(1), |
| fax_number_(1) { |
| + // Set the type of the phones - it is set on first SetInfo() call. |
|
dhollowa
2011/05/13 18:55:35
Better to use the vector initializer to set the ph
GeorgeY
2011/05/18 17:41:45
Done.
|
| + home_number_[0].SetInfo(PHONE_HOME_WHOLE_NUMBER, string16()); |
| + fax_number_[0].SetInfo(PHONE_FAX_WHOLE_NUMBER, string16()); |
| } |
| AutofillProfile::AutofillProfile(const AutofillProfile& profile) |
| @@ -253,9 +259,15 @@ |
| break; |
| case AutofillType::PHONE_HOME: |
| CopyValuesToItems(type, values, &home_number_); |
|
dhollowa
2011/05/13 18:55:35
Let's keep the initialization logic cohesive withi
GeorgeY
2011/05/18 17:41:45
OK
|
| + // If it was cleared, set the type. |
| + if (values.empty()) |
| + home_number_[0].SetInfo(PHONE_HOME_WHOLE_NUMBER, string16()); |
| break; |
| case AutofillType::PHONE_FAX: |
| CopyValuesToItems(type, values, &fax_number_); |
| + // If it was cleared, set the type. |
| + if (values.empty()) |
| + fax_number_[0].SetInfo(PHONE_FAX_WHOLE_NUMBER, string16()); |
| break; |
| default: |
| if (values.size() == 1) { |
| @@ -463,6 +475,22 @@ |
| GetInfo(ADDRESS_HOME_CITY); |
| } |
| +bool AutofillProfile::NormalizePhones() { |
| + // Successful either if nothing to parse, or everything is parsed correctly. |
| + bool success = true; |
| + for (size_t i = 0; i < home_number_.size(); ++i) { |
| + home_number_[i].set_locale(CountryCode()); |
| + if (!home_number_[i].NormalizePhone()) |
| + success = false; |
| + } |
| + for (size_t i = 0; i < fax_number_.size(); ++i) { |
| + fax_number_[i].set_locale(CountryCode()); |
| + if (!fax_number_[i].NormalizePhone()) |
| + success = false; |
| + } |
| + return success; |
| +} |
| + |
| void AutofillProfile::OverwriteWithOrAddTo(const AutofillProfile& profile) { |
| FieldTypeSet field_types; |
| profile.GetNonEmptyTypes(&field_types); |
| @@ -478,12 +506,33 @@ |
| profile.GetMultiInfo(*iter, &new_values); |
| std::vector<string16> existing_values; |
| GetMultiInfo(*iter, &existing_values); |
| + FieldTypeGroup group = AutofillType(*iter).group(); |
| for (std::vector<string16>::iterator value_iter = new_values.begin(); |
| value_iter != new_values.end(); ++value_iter) { |
| // Don't add duplicates. |
| - if (std::find(existing_values.begin(), existing_values.end(), |
| - *value_iter) == existing_values.end()) { |
| - existing_values.insert(existing_values.end(), *value_iter); |
| + if (group == AutofillType::PHONE_HOME || |
|
dhollowa
2011/05/13 18:55:35
A few things here:
(1) Let's split this logic out
GeorgeY
2011/05/18 17:41:45
Done.
|
| + group == AutofillType::PHONE_FAX) { |
| + // Phones allow "fuzzy" matching, so "1-800-FLOWERS", "18003569377", |
| + // "(800)356-9377" and "356-9377" are considered the same. |
| + std::vector<string16>::const_iterator phone_iter; |
| + for (phone_iter = existing_values.begin(); |
| + phone_iter != existing_values.end(); |
| + ++phone_iter) { |
| + autofill_i18n::PhoneMatch match = autofill_i18n::ComparePhones( |
| + *phone_iter, *value_iter, CountryCode()); |
| + if (match == autofill_i18n::PHONES_EQUAL || |
| + match == autofill_i18n::PHONES_SUBMATCH) { |
| + break; |
| + } |
| + } |
| + // Add phone if it does not match any other. |
| + if (phone_iter == existing_values.end()) |
| + existing_values.insert(existing_values.end(), *value_iter); |
| + } else { |
| + if (std::find(existing_values.begin(), existing_values.end(), |
| + *value_iter) == existing_values.end()) { |
| + existing_values.insert(existing_values.end(), *value_iter); |
| + } |
| } |
| } |
| SetMultiInfo(*iter, existing_values); |