| 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/personal_data_manager.h" | 5 #include "components/autofill/core/browser/personal_data_manager.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 #include <functional> | 8 #include <functional> |
| 9 #include <iterator> | 9 #include <iterator> |
| 10 | 10 |
| (...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 82 // required as determined by its country code. | 82 // required as determined by its country code. |
| 83 // No verification of validity of the contents is preformed. This is an | 83 // No verification of validity of the contents is preformed. This is an |
| 84 // existence check only. | 84 // existence check only. |
| 85 bool IsMinimumAddress(const AutofillProfile& profile, | 85 bool IsMinimumAddress(const AutofillProfile& profile, |
| 86 const std::string& app_locale) { | 86 const std::string& app_locale) { |
| 87 // All countries require at least one address line. | 87 // All countries require at least one address line. |
| 88 if (profile.GetRawInfo(ADDRESS_HOME_LINE1).empty()) | 88 if (profile.GetRawInfo(ADDRESS_HOME_LINE1).empty()) |
| 89 return false; | 89 return false; |
| 90 | 90 |
| 91 std::string country_code = | 91 std::string country_code = |
| 92 UTF16ToASCII(profile.GetRawInfo(ADDRESS_HOME_COUNTRY)); | 92 base::UTF16ToASCII(profile.GetRawInfo(ADDRESS_HOME_COUNTRY)); |
| 93 if (country_code.empty()) | 93 if (country_code.empty()) |
| 94 country_code = AutofillCountry::CountryCodeForLocale(app_locale); | 94 country_code = AutofillCountry::CountryCodeForLocale(app_locale); |
| 95 | 95 |
| 96 AutofillCountry country(country_code, app_locale); | 96 AutofillCountry country(country_code, app_locale); |
| 97 | 97 |
| 98 if (country.requires_city() && profile.GetRawInfo(ADDRESS_HOME_CITY).empty()) | 98 if (country.requires_city() && profile.GetRawInfo(ADDRESS_HOME_CITY).empty()) |
| 99 return false; | 99 return false; |
| 100 | 100 |
| 101 if (country.requires_state() && | 101 if (country.requires_state() && |
| 102 profile.GetRawInfo(ADDRESS_HOME_STATE).empty()) | 102 profile.GetRawInfo(ADDRESS_HOME_STATE).empty()) |
| (...skipping 660 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 763 return guid; | 763 return guid; |
| 764 } | 764 } |
| 765 | 765 |
| 766 bool PersonalDataManager::IsCountryOfInterest(const std::string& country_code) | 766 bool PersonalDataManager::IsCountryOfInterest(const std::string& country_code) |
| 767 const { | 767 const { |
| 768 DCHECK_EQ(2U, country_code.size()); | 768 DCHECK_EQ(2U, country_code.size()); |
| 769 | 769 |
| 770 const std::vector<AutofillProfile*>& profiles = web_profiles(); | 770 const std::vector<AutofillProfile*>& profiles = web_profiles(); |
| 771 std::list<std::string> country_codes; | 771 std::list<std::string> country_codes; |
| 772 for (size_t i = 0; i < profiles.size(); ++i) { | 772 for (size_t i = 0; i < profiles.size(); ++i) { |
| 773 country_codes.push_back(StringToLowerASCII(UTF16ToASCII( | 773 country_codes.push_back(StringToLowerASCII(base::UTF16ToASCII( |
| 774 profiles[i]->GetRawInfo(ADDRESS_HOME_COUNTRY)))); | 774 profiles[i]->GetRawInfo(ADDRESS_HOME_COUNTRY)))); |
| 775 } | 775 } |
| 776 | 776 |
| 777 std::string timezone_country = CountryCodeForCurrentTimezone(); | 777 std::string timezone_country = CountryCodeForCurrentTimezone(); |
| 778 if (!timezone_country.empty()) | 778 if (!timezone_country.empty()) |
| 779 country_codes.push_back(StringToLowerASCII(timezone_country)); | 779 country_codes.push_back(StringToLowerASCII(timezone_country)); |
| 780 | 780 |
| 781 // Only take the locale into consideration if all else fails. | 781 // Only take the locale into consideration if all else fails. |
| 782 if (country_codes.empty()) { | 782 if (country_codes.empty()) { |
| 783 country_codes.push_back(StringToLowerASCII( | 783 country_codes.push_back(StringToLowerASCII( |
| (...skipping 262 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1046 return std::string(); | 1046 return std::string(); |
| 1047 | 1047 |
| 1048 // Count up country codes from existing profiles. | 1048 // Count up country codes from existing profiles. |
| 1049 std::map<std::string, int> votes; | 1049 std::map<std::string, int> votes; |
| 1050 // TODO(estade): can we make this GetProfiles() instead? It seems to cause | 1050 // TODO(estade): can we make this GetProfiles() instead? It seems to cause |
| 1051 // errors in tests on mac trybots. See http://crbug.com/57221 | 1051 // errors in tests on mac trybots. See http://crbug.com/57221 |
| 1052 const std::vector<AutofillProfile*>& profiles = web_profiles(); | 1052 const std::vector<AutofillProfile*>& profiles = web_profiles(); |
| 1053 std::vector<std::string> country_codes; | 1053 std::vector<std::string> country_codes; |
| 1054 AutofillCountry::GetAvailableCountries(&country_codes); | 1054 AutofillCountry::GetAvailableCountries(&country_codes); |
| 1055 for (size_t i = 0; i < profiles.size(); ++i) { | 1055 for (size_t i = 0; i < profiles.size(); ++i) { |
| 1056 std::string country_code = StringToUpperASCII(UTF16ToASCII( | 1056 std::string country_code = StringToUpperASCII(base::UTF16ToASCII( |
| 1057 profiles[i]->GetRawInfo(ADDRESS_HOME_COUNTRY))); | 1057 profiles[i]->GetRawInfo(ADDRESS_HOME_COUNTRY))); |
| 1058 | 1058 |
| 1059 if (std::find(country_codes.begin(), country_codes.end(), country_code) != | 1059 if (std::find(country_codes.begin(), country_codes.end(), country_code) != |
| 1060 country_codes.end()) { | 1060 country_codes.end()) { |
| 1061 // Verified profiles count 100x more than unverified ones. | 1061 // Verified profiles count 100x more than unverified ones. |
| 1062 votes[country_code] += profiles[i]->IsVerified() ? 100 : 1; | 1062 votes[country_code] += profiles[i]->IsVerified() ? 100 : 1; |
| 1063 } | 1063 } |
| 1064 } | 1064 } |
| 1065 | 1065 |
| 1066 // Take the most common country code. | 1066 // Take the most common country code. |
| 1067 if (!votes.empty()) { | 1067 if (!votes.empty()) { |
| 1068 std::map<std::string, int>::iterator iter = | 1068 std::map<std::string, int>::iterator iter = |
| 1069 std::max_element(votes.begin(), votes.end(), CompareVotes); | 1069 std::max_element(votes.begin(), votes.end(), CompareVotes); |
| 1070 return iter->first; | 1070 return iter->first; |
| 1071 } | 1071 } |
| 1072 | 1072 |
| 1073 return std::string(); | 1073 return std::string(); |
| 1074 } | 1074 } |
| 1075 | 1075 |
| 1076 void PersonalDataManager::EnabledPrefChanged() { | 1076 void PersonalDataManager::EnabledPrefChanged() { |
| 1077 default_country_code_.clear(); | 1077 default_country_code_.clear(); |
| 1078 NotifyPersonalDataChanged(); | 1078 NotifyPersonalDataChanged(); |
| 1079 } | 1079 } |
| 1080 | 1080 |
| 1081 } // namespace autofill | 1081 } // namespace autofill |
| OLD | NEW |