Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(66)

Side by Side Diff: components/autofill/browser/autofill_country.cc

Issue 13488009: Remove application locale cache in autofill code. (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: sync Created 7 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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/browser/autofill_country.h" 5 #include "components/autofill/browser/autofill_country.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 #include <stdint.h> 8 #include <stdint.h>
9 #include <map> 9 #include <map>
10 #include <utility> 10 #include <utility>
11 11
12 #include "base/logging.h" 12 #include "base/logging.h"
13 #include "base/memory/scoped_ptr.h" 13 #include "base/memory/scoped_ptr.h"
14 #include "base/memory/singleton.h" 14 #include "base/memory/singleton.h"
15 #include "base/stl_util.h" 15 #include "base/stl_util.h"
16 #include "base/string_util.h" 16 #include "base/string_util.h"
17 #include "base/threading/thread_checker.h" 17 #include "base/threading/thread_checker.h"
18 #include "base/utf_string_conversions.h" 18 #include "base/utf_string_conversions.h"
19 #include "content/public/browser/browser_thread.h"
20 #include "content/public/browser/content_browser_client.h"
21 #include "grit/generated_resources.h" 19 #include "grit/generated_resources.h"
22 #include "third_party/icu/public/common/unicode/locid.h" 20 #include "third_party/icu/public/common/unicode/locid.h"
23 #include "third_party/icu/public/common/unicode/uloc.h" 21 #include "third_party/icu/public/common/unicode/uloc.h"
24 #include "third_party/icu/public/common/unicode/unistr.h" 22 #include "third_party/icu/public/common/unicode/unistr.h"
25 #include "third_party/icu/public/common/unicode/urename.h" 23 #include "third_party/icu/public/common/unicode/urename.h"
26 #include "third_party/icu/public/common/unicode/utypes.h" 24 #include "third_party/icu/public/common/unicode/utypes.h"
27 #include "third_party/icu/public/i18n/unicode/coll.h" 25 #include "third_party/icu/public/i18n/unicode/coll.h"
28 #include "third_party/icu/public/i18n/unicode/ucol.h" 26 #include "third_party/icu/public/i18n/unicode/ucol.h"
29 #include "ui/base/l10n/l10n_util.h" 27 #include "ui/base/l10n/l10n_util.h"
30 28
31 using content::BrowserThread;
32
33 namespace { 29 namespace {
34 30
35 // The maximum capacity needed to store a locale up to the country code. 31 // The maximum capacity needed to store a locale up to the country code.
36 const size_t kLocaleCapacity = 32 const size_t kLocaleCapacity =
37 ULOC_LANG_CAPACITY + ULOC_SCRIPT_CAPACITY + ULOC_COUNTRY_CAPACITY + 1; 33 ULOC_LANG_CAPACITY + ULOC_SCRIPT_CAPACITY + ULOC_COUNTRY_CAPACITY + 1;
38 34
39 struct CountryData { 35 struct CountryData {
40 int postal_code_label_id; 36 int postal_code_label_id;
41 int state_label_id; 37 int state_label_id;
42 AddressRequiredFields address_required_fields; 38 AddressRequiredFields address_required_fields;
(...skipping 795 matching lines...) Expand 10 before | Expand all | Expand 10 after
838 const std::string& country_code) { 834 const std::string& country_code) {
839 return GetInstance()->country_data_.find(country_code); 835 return GetInstance()->country_data_.find(country_code);
840 } 836 }
841 837
842 // A singleton class that encapsulates mappings from country names to their 838 // A singleton class that encapsulates mappings from country names to their
843 // corresponding country codes. 839 // corresponding country codes.
844 class CountryNames { 840 class CountryNames {
845 public: 841 public:
846 static CountryNames* GetInstance(); 842 static CountryNames* GetInstance();
847 843
848 // Returns the application locale.
849 const std::string ApplicationLocale();
850
851 // Returns the country code corresponding to |country|, which should be a 844 // Returns the country code corresponding to |country|, which should be a
852 // country code or country name localized to |locale|. 845 // country code or country name localized to |locale|.
853 const std::string GetCountryCode(const string16& country, 846 const std::string GetCountryCode(const string16& country,
854 const std::string& locale); 847 const std::string& locale);
855 848
856 private: 849 private:
857 CountryNames(); 850 CountryNames();
858 ~CountryNames(); 851 ~CountryNames();
859 friend struct DefaultSingletonTraits<CountryNames>; 852 friend struct DefaultSingletonTraits<CountryNames>;
860 853
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
892 // to the target localized country name. 885 // to the target localized country name.
893 std::map<std::string, std::map<std::string, std::string> > 886 std::map<std::string, std::map<std::string, std::string> >
894 locales_to_localized_names_; 887 locales_to_localized_names_;
895 888
896 // Maps ICU locale names to their corresponding collators. 889 // Maps ICU locale names to their corresponding collators.
897 std::map<std::string, icu::Collator*> collators_; 890 std::map<std::string, icu::Collator*> collators_;
898 891
899 // Verifies thread-safety of accesses to the application locale. 892 // Verifies thread-safety of accesses to the application locale.
900 base::ThreadChecker thread_checker_; 893 base::ThreadChecker thread_checker_;
901 894
902 // Caches the application locale, for thread-safe access.
903 std::string application_locale_;
904
905 DISALLOW_COPY_AND_ASSIGN(CountryNames); 895 DISALLOW_COPY_AND_ASSIGN(CountryNames);
906 }; 896 };
907 897
908 // static 898 // static
909 CountryNames* CountryNames::GetInstance() { 899 CountryNames* CountryNames::GetInstance() {
910 return Singleton<CountryNames>::get(); 900 return Singleton<CountryNames>::get();
911 } 901 }
912 902
913 const std::string CountryNames::ApplicationLocale() {
914 if (application_locale_.empty()) {
915 // In production code, this class is always constructed on the UI thread, so
916 // the two conditions in the below DCHECK are identical. In test code,
917 // sometimes there is a UI thread, and sometimes there is just the unnamed
918 // main thread. Since this class is a singleton, it needs to support both
919 // cases. Hence, the somewhat strange looking DCHECK below.
920 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI) ||
921 thread_checker_.CalledOnValidThread());
922 application_locale_ =
923 content::GetContentClient()->browser()->GetApplicationLocale();
924 }
925
926 return application_locale_;
927 }
928
929 CountryNames::CountryNames() { 903 CountryNames::CountryNames() {
930 // Add 2- and 3-letter ISO country codes. 904 // Add 2- and 3-letter ISO country codes.
931 for (CountryDataMap::Iterator it = CountryDataMap::Begin(); 905 for (CountryDataMap::Iterator it = CountryDataMap::Begin();
932 it != CountryDataMap::End(); 906 it != CountryDataMap::End();
933 ++it) { 907 ++it) {
934 const std::string& country_code = it->first; 908 const std::string& country_code = it->first;
935 std::string iso3_country_code = 909 std::string iso3_country_code =
936 icu::Locale(NULL, country_code.c_str()).getISO3Country(); 910 icu::Locale(NULL, country_code.c_str()).getISO3Country();
937 911
938 common_names_.insert(std::make_pair(country_code, country_code)); 912 common_names_.insert(std::make_pair(country_code, country_code));
(...skipping 180 matching lines...) Expand 10 before | Expand all | Expand 10 after
1119 1093
1120 return country_code; 1094 return country_code;
1121 } 1095 }
1122 1096
1123 // static 1097 // static
1124 const std::string AutofillCountry::GetCountryCode(const string16& country, 1098 const std::string AutofillCountry::GetCountryCode(const string16& country,
1125 const std::string& locale) { 1099 const std::string& locale) {
1126 return CountryNames::GetInstance()->GetCountryCode(country, locale); 1100 return CountryNames::GetInstance()->GetCountryCode(country, locale);
1127 } 1101 }
1128 1102
1129 // static
1130 const std::string AutofillCountry::ApplicationLocale() {
1131 return CountryNames::GetInstance()->ApplicationLocale();
1132 }
1133
1134 AutofillCountry::AutofillCountry(const std::string& country_code, 1103 AutofillCountry::AutofillCountry(const std::string& country_code,
1135 const string16& name, 1104 const string16& name,
1136 const string16& postal_code_label, 1105 const string16& postal_code_label,
1137 const string16& state_label) 1106 const string16& state_label)
1138 : country_code_(country_code), 1107 : country_code_(country_code),
1139 name_(name), 1108 name_(name),
1140 postal_code_label_(postal_code_label), 1109 postal_code_label_(postal_code_label),
1141 state_label_(state_label) { 1110 state_label_(state_label) {
1142 } 1111 }
OLDNEW
« no previous file with comments | « components/autofill/browser/autofill_country.h ('k') | components/autofill/browser/autofill_ie_toolbar_import_win.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698