OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "components/autofill/core/browser/autofill_profile.h" | 5 #include "components/autofill/core/browser/autofill_profile.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 #include <functional> | 8 #include <functional> |
9 #include <map> | 9 #include <map> |
| 10 #include <memory> |
10 #include <ostream> | 11 #include <ostream> |
11 #include <set> | 12 #include <set> |
12 | 13 |
13 #include "base/guid.h" | 14 #include "base/guid.h" |
14 #include "base/i18n/case_conversion.h" | 15 #include "base/i18n/case_conversion.h" |
15 #include "base/i18n/char_iterator.h" | 16 #include "base/i18n/char_iterator.h" |
16 #include "base/logging.h" | 17 #include "base/logging.h" |
17 #include "base/macros.h" | 18 #include "base/macros.h" |
18 #include "base/metrics/histogram_macros.h" | 19 #include "base/metrics/histogram_macros.h" |
19 #include "base/sha1.h" | 20 #include "base/sha1.h" |
(...skipping 294 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
314 void AutofillProfile::SetRawInfo(ServerFieldType type, | 315 void AutofillProfile::SetRawInfo(ServerFieldType type, |
315 const base::string16& value) { | 316 const base::string16& value) { |
316 FormGroup* form_group = MutableFormGroupForType(AutofillType(type)); | 317 FormGroup* form_group = MutableFormGroupForType(AutofillType(type)); |
317 if (form_group) | 318 if (form_group) |
318 form_group->SetRawInfo(type, value); | 319 form_group->SetRawInfo(type, value); |
319 } | 320 } |
320 | 321 |
321 base::string16 AutofillProfile::GetInfo(const AutofillType& type, | 322 base::string16 AutofillProfile::GetInfo(const AutofillType& type, |
322 const std::string& app_locale) const { | 323 const std::string& app_locale) const { |
323 if (type.html_type() == HTML_TYPE_FULL_ADDRESS) { | 324 if (type.html_type() == HTML_TYPE_FULL_ADDRESS) { |
324 scoped_ptr<AddressData> address_data = | 325 std::unique_ptr<AddressData> address_data = |
325 i18n::CreateAddressDataFromAutofillProfile(*this, app_locale); | 326 i18n::CreateAddressDataFromAutofillProfile(*this, app_locale); |
326 if (!addressinput::HasAllRequiredFields(*address_data)) | 327 if (!addressinput::HasAllRequiredFields(*address_data)) |
327 return base::string16(); | 328 return base::string16(); |
328 | 329 |
329 std::vector<std::string> lines; | 330 std::vector<std::string> lines; |
330 ::i18n::addressinput::GetFormattedNationalAddress(*address_data, &lines); | 331 ::i18n::addressinput::GetFormattedNationalAddress(*address_data, &lines); |
331 return base::UTF8ToUTF16(base::JoinString(lines, "\n")); | 332 return base::UTF8ToUTF16(base::JoinString(lines, "\n")); |
332 } | 333 } |
333 | 334 |
334 const FormGroup* form_group = FormGroupForType(type); | 335 const FormGroup* form_group = FormGroupForType(type); |
(...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
438 const std::string& app_locale) const { | 439 const std::string& app_locale) const { |
439 ServerFieldTypeSet types; | 440 ServerFieldTypeSet types; |
440 GetSupportedTypes(&types); | 441 GetSupportedTypes(&types); |
441 return IsSubsetOfForFieldSet(profile, app_locale, types); | 442 return IsSubsetOfForFieldSet(profile, app_locale, types); |
442 } | 443 } |
443 | 444 |
444 bool AutofillProfile::IsSubsetOfForFieldSet( | 445 bool AutofillProfile::IsSubsetOfForFieldSet( |
445 const AutofillProfile& profile, | 446 const AutofillProfile& profile, |
446 const std::string& app_locale, | 447 const std::string& app_locale, |
447 const ServerFieldTypeSet& types) const { | 448 const ServerFieldTypeSet& types) const { |
448 scoped_ptr<l10n::CaseInsensitiveCompare> compare; | 449 std::unique_ptr<l10n::CaseInsensitiveCompare> compare; |
449 | 450 |
450 for (ServerFieldType type : types) { | 451 for (ServerFieldType type : types) { |
451 base::string16 value = GetRawInfo(type); | 452 base::string16 value = GetRawInfo(type); |
452 if (value.empty()) | 453 if (value.empty()) |
453 continue; | 454 continue; |
454 | 455 |
455 if (type == NAME_FULL || type == ADDRESS_HOME_STREET_ADDRESS) { | 456 if (type == NAME_FULL || type == ADDRESS_HOME_STREET_ADDRESS) { |
456 // Ignore the compound "full name" field type. We are only interested in | 457 // Ignore the compound "full name" field type. We are only interested in |
457 // comparing the constituent parts. For example, if |this| has a middle | 458 // comparing the constituent parts. For example, if |this| has a middle |
458 // name saved, but |profile| lacks one, |profile| could still be a subset | 459 // name saved, but |profile| lacks one, |profile| could still be a subset |
(...skipping 403 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
862 | 863 |
863 AutofillType autofill_type(*it); | 864 AutofillType autofill_type(*it); |
864 base::string16 field_value = GetInfo(autofill_type, app_locale); | 865 base::string16 field_value = GetInfo(autofill_type, app_locale); |
865 if (field_value.empty()) | 866 if (field_value.empty()) |
866 continue; | 867 continue; |
867 | 868 |
868 trimmed_profile.SetInfo(autofill_type, field_value, app_locale); | 869 trimmed_profile.SetInfo(autofill_type, field_value, app_locale); |
869 --num_fields_to_use; | 870 --num_fields_to_use; |
870 } | 871 } |
871 | 872 |
872 scoped_ptr<AddressData> address_data = | 873 std::unique_ptr<AddressData> address_data = |
873 i18n::CreateAddressDataFromAutofillProfile(trimmed_profile, app_locale); | 874 i18n::CreateAddressDataFromAutofillProfile(trimmed_profile, app_locale); |
874 std::string address_line; | 875 std::string address_line; |
875 ::i18n::addressinput::GetFormattedNationalAddressLine( | 876 ::i18n::addressinput::GetFormattedNationalAddressLine( |
876 *address_data, &address_line); | 877 *address_data, &address_line); |
877 base::string16 label = base::UTF8ToUTF16(address_line); | 878 base::string16 label = base::UTF8ToUTF16(address_line); |
878 | 879 |
879 for (std::vector<ServerFieldType>::const_iterator it = | 880 for (std::vector<ServerFieldType>::const_iterator it = |
880 remaining_fields.begin(); | 881 remaining_fields.begin(); |
881 it != remaining_fields.end() && num_fields_to_use > 0; | 882 it != remaining_fields.end() && num_fields_to_use > 0; |
882 ++it) { | 883 ++it) { |
(...skipping 165 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1048 << " " << UTF16ToUTF8(profile.GetRawInfo(ADDRESS_HOME_CITY)) << " " | 1049 << " " << UTF16ToUTF8(profile.GetRawInfo(ADDRESS_HOME_CITY)) << " " |
1049 << UTF16ToUTF8(profile.GetRawInfo(ADDRESS_HOME_STATE)) << " " | 1050 << UTF16ToUTF8(profile.GetRawInfo(ADDRESS_HOME_STATE)) << " " |
1050 << UTF16ToUTF8(profile.GetRawInfo(ADDRESS_HOME_ZIP)) << " " | 1051 << UTF16ToUTF8(profile.GetRawInfo(ADDRESS_HOME_ZIP)) << " " |
1051 << UTF16ToUTF8(profile.GetRawInfo(ADDRESS_HOME_SORTING_CODE)) << " " | 1052 << UTF16ToUTF8(profile.GetRawInfo(ADDRESS_HOME_SORTING_CODE)) << " " |
1052 << UTF16ToUTF8(profile.GetRawInfo(ADDRESS_HOME_COUNTRY)) << " " | 1053 << UTF16ToUTF8(profile.GetRawInfo(ADDRESS_HOME_COUNTRY)) << " " |
1053 << profile.language_code() << " " | 1054 << profile.language_code() << " " |
1054 << UTF16ToUTF8(profile.GetRawInfo(PHONE_HOME_WHOLE_NUMBER)); | 1055 << UTF16ToUTF8(profile.GetRawInfo(PHONE_HOME_WHOLE_NUMBER)); |
1055 } | 1056 } |
1056 | 1057 |
1057 } // namespace autofill | 1058 } // namespace autofill |
OLD | NEW |