| 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 <memory> |
| (...skipping 738 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 749 (*labels)[profile_index] = label; | 749 (*labels)[profile_index] = label; |
| 750 } else { | 750 } else { |
| 751 // We have more than one profile with the same label, so add | 751 // We have more than one profile with the same label, so add |
| 752 // differentiating fields. | 752 // differentiating fields. |
| 753 CreateInferredLabelsHelper(profiles, it.second, fields_to_use, | 753 CreateInferredLabelsHelper(profiles, it.second, fields_to_use, |
| 754 minimal_fields_shown, app_locale, labels); | 754 minimal_fields_shown, app_locale, labels); |
| 755 } | 755 } |
| 756 } | 756 } |
| 757 } | 757 } |
| 758 | 758 |
| 759 void AutofillProfile::GenerateServerProfileIdentifier() { | |
| 760 DCHECK_EQ(SERVER_PROFILE, record_type()); | |
| 761 base::string16 contents = GetRawInfo(NAME_FIRST); | |
| 762 contents.append(GetRawInfo(NAME_MIDDLE)); | |
| 763 contents.append(GetRawInfo(NAME_LAST)); | |
| 764 contents.append(GetRawInfo(EMAIL_ADDRESS)); | |
| 765 contents.append(GetRawInfo(COMPANY_NAME)); | |
| 766 contents.append(GetRawInfo(ADDRESS_HOME_STREET_ADDRESS)); | |
| 767 contents.append(GetRawInfo(ADDRESS_HOME_DEPENDENT_LOCALITY)); | |
| 768 contents.append(GetRawInfo(ADDRESS_HOME_CITY)); | |
| 769 contents.append(GetRawInfo(ADDRESS_HOME_STATE)); | |
| 770 contents.append(GetRawInfo(ADDRESS_HOME_ZIP)); | |
| 771 contents.append(GetRawInfo(ADDRESS_HOME_SORTING_CODE)); | |
| 772 contents.append(GetRawInfo(ADDRESS_HOME_COUNTRY)); | |
| 773 contents.append(GetRawInfo(PHONE_HOME_WHOLE_NUMBER)); | |
| 774 std::string contents_utf8 = UTF16ToUTF8(contents); | |
| 775 contents_utf8.append(language_code()); | |
| 776 server_id_ = base::SHA1HashString(contents_utf8); | |
| 777 } | |
| 778 | |
| 779 void AutofillProfile::RecordAndLogUse() { | |
| 780 UMA_HISTOGRAM_COUNTS_1000("Autofill.DaysSinceLastUse.Profile", | |
| 781 (base::Time::Now() - use_date()).InDays()); | |
| 782 RecordUse(); | |
| 783 } | |
| 784 | |
| 785 // static | |
| 786 base::string16 AutofillProfile::CanonicalizeProfileString( | |
| 787 const base::string16& str) { | |
| 788 // The locale doesn't matter for general string canonicalization. | |
| 789 AutofillProfileComparator comparator("en-US"); | |
| 790 return comparator.NormalizeForComparison(str); | |
| 791 } | |
| 792 | |
| 793 void AutofillProfile::GetSupportedTypes( | |
| 794 ServerFieldTypeSet* supported_types) const { | |
| 795 FormGroupList info = FormGroups(); | |
| 796 for (const auto& it : info) { | |
| 797 it->GetSupportedTypes(supported_types); | |
| 798 } | |
| 799 } | |
| 800 | |
| 801 base::string16 AutofillProfile::ConstructInferredLabel( | 759 base::string16 AutofillProfile::ConstructInferredLabel( |
| 802 const std::vector<ServerFieldType>& included_fields, | 760 const std::vector<ServerFieldType>& included_fields, |
| 803 size_t num_fields_to_use, | 761 size_t num_fields_to_use, |
| 804 const std::string& app_locale) const { | 762 const std::string& app_locale) const { |
| 805 // TODO(estade): use libaddressinput? | 763 // TODO(estade): use libaddressinput? |
| 806 base::string16 separator = | 764 base::string16 separator = |
| 807 l10n_util::GetStringUTF16(IDS_AUTOFILL_ADDRESS_SUMMARY_SEPARATOR); | 765 l10n_util::GetStringUTF16(IDS_AUTOFILL_ADDRESS_SUMMARY_SEPARATOR); |
| 808 | 766 |
| 809 AutofillType region_code_type(HTML_TYPE_COUNTRY_CODE, HTML_MODE_NONE); | 767 AutofillType region_code_type(HTML_TYPE_COUNTRY_CODE, HTML_MODE_NONE); |
| 810 const base::string16& profile_region_code = | 768 const base::string16& profile_region_code = |
| (...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 869 } | 827 } |
| 870 | 828 |
| 871 // If country code is missing, libaddressinput won't be used to format the | 829 // If country code is missing, libaddressinput won't be used to format the |
| 872 // address. In this case the suggestion might include a multi-line street | 830 // address. In this case the suggestion might include a multi-line street |
| 873 // address which needs to be flattened. | 831 // address which needs to be flattened. |
| 874 base::ReplaceChars(label, base::ASCIIToUTF16("\n"), separator, &label); | 832 base::ReplaceChars(label, base::ASCIIToUTF16("\n"), separator, &label); |
| 875 | 833 |
| 876 return label; | 834 return label; |
| 877 } | 835 } |
| 878 | 836 |
| 837 void AutofillProfile::GenerateServerProfileIdentifier() { |
| 838 DCHECK_EQ(SERVER_PROFILE, record_type()); |
| 839 base::string16 contents = GetRawInfo(NAME_FIRST); |
| 840 contents.append(GetRawInfo(NAME_MIDDLE)); |
| 841 contents.append(GetRawInfo(NAME_LAST)); |
| 842 contents.append(GetRawInfo(EMAIL_ADDRESS)); |
| 843 contents.append(GetRawInfo(COMPANY_NAME)); |
| 844 contents.append(GetRawInfo(ADDRESS_HOME_STREET_ADDRESS)); |
| 845 contents.append(GetRawInfo(ADDRESS_HOME_DEPENDENT_LOCALITY)); |
| 846 contents.append(GetRawInfo(ADDRESS_HOME_CITY)); |
| 847 contents.append(GetRawInfo(ADDRESS_HOME_STATE)); |
| 848 contents.append(GetRawInfo(ADDRESS_HOME_ZIP)); |
| 849 contents.append(GetRawInfo(ADDRESS_HOME_SORTING_CODE)); |
| 850 contents.append(GetRawInfo(ADDRESS_HOME_COUNTRY)); |
| 851 contents.append(GetRawInfo(PHONE_HOME_WHOLE_NUMBER)); |
| 852 std::string contents_utf8 = UTF16ToUTF8(contents); |
| 853 contents_utf8.append(language_code()); |
| 854 server_id_ = base::SHA1HashString(contents_utf8); |
| 855 } |
| 856 |
| 857 void AutofillProfile::RecordAndLogUse() { |
| 858 UMA_HISTOGRAM_COUNTS_1000("Autofill.DaysSinceLastUse.Profile", |
| 859 (base::Time::Now() - use_date()).InDays()); |
| 860 RecordUse(); |
| 861 } |
| 862 |
| 863 // static |
| 864 base::string16 AutofillProfile::CanonicalizeProfileString( |
| 865 const base::string16& str) { |
| 866 // The locale doesn't matter for general string canonicalization. |
| 867 AutofillProfileComparator comparator("en-US"); |
| 868 return comparator.NormalizeForComparison(str); |
| 869 } |
| 870 |
| 871 void AutofillProfile::GetSupportedTypes( |
| 872 ServerFieldTypeSet* supported_types) const { |
| 873 FormGroupList info = FormGroups(); |
| 874 for (const auto& it : info) { |
| 875 it->GetSupportedTypes(supported_types); |
| 876 } |
| 877 } |
| 878 |
| 879 // static | 879 // static |
| 880 void AutofillProfile::CreateInferredLabelsHelper( | 880 void AutofillProfile::CreateInferredLabelsHelper( |
| 881 const std::vector<AutofillProfile*>& profiles, | 881 const std::vector<AutofillProfile*>& profiles, |
| 882 const std::list<size_t>& indices, | 882 const std::list<size_t>& indices, |
| 883 const std::vector<ServerFieldType>& fields, | 883 const std::vector<ServerFieldType>& fields, |
| 884 size_t num_fields_to_include, | 884 size_t num_fields_to_include, |
| 885 const std::string& app_locale, | 885 const std::string& app_locale, |
| 886 std::vector<base::string16>* labels) { | 886 std::vector<base::string16>* labels) { |
| 887 // For efficiency, we first construct a map of fields to their text values and | 887 // For efficiency, we first construct a map of fields to their text values and |
| 888 // each value's frequency. | 888 // each value's frequency. |
| (...skipping 130 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1019 << " " << UTF16ToUTF8(profile.GetRawInfo(ADDRESS_HOME_CITY)) << " " | 1019 << " " << UTF16ToUTF8(profile.GetRawInfo(ADDRESS_HOME_CITY)) << " " |
| 1020 << UTF16ToUTF8(profile.GetRawInfo(ADDRESS_HOME_STATE)) << " " | 1020 << UTF16ToUTF8(profile.GetRawInfo(ADDRESS_HOME_STATE)) << " " |
| 1021 << UTF16ToUTF8(profile.GetRawInfo(ADDRESS_HOME_ZIP)) << " " | 1021 << UTF16ToUTF8(profile.GetRawInfo(ADDRESS_HOME_ZIP)) << " " |
| 1022 << UTF16ToUTF8(profile.GetRawInfo(ADDRESS_HOME_SORTING_CODE)) << " " | 1022 << UTF16ToUTF8(profile.GetRawInfo(ADDRESS_HOME_SORTING_CODE)) << " " |
| 1023 << UTF16ToUTF8(profile.GetRawInfo(ADDRESS_HOME_COUNTRY)) << " " | 1023 << UTF16ToUTF8(profile.GetRawInfo(ADDRESS_HOME_COUNTRY)) << " " |
| 1024 << profile.language_code() << " " | 1024 << profile.language_code() << " " |
| 1025 << UTF16ToUTF8(profile.GetRawInfo(PHONE_HOME_WHOLE_NUMBER)); | 1025 << UTF16ToUTF8(profile.GetRawInfo(PHONE_HOME_WHOLE_NUMBER)); |
| 1026 } | 1026 } |
| 1027 | 1027 |
| 1028 } // namespace autofill | 1028 } // namespace autofill |
| OLD | NEW |