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

Unified Diff: chrome/browser/autofill/select_control_handler.cc

Issue 6484022: Autofill i18n: Set postal code and state field labels based on the selected country. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Still needs tests Created 9 years, 10 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 side-by-side diff with in-line comments
Download patch
Index: chrome/browser/autofill/select_control_handler.cc
diff --git a/chrome/browser/autofill/select_control_handler.cc b/chrome/browser/autofill/select_control_handler.cc
index 1d0526ec48849ba1c0ee421420b9ae28fbf1d829..738d301c6f8fa1af74d0088f4b49b42f0db75cb3 100644
--- a/chrome/browser/autofill/select_control_handler.cc
+++ b/chrome/browser/autofill/select_control_handler.cc
@@ -11,6 +11,8 @@
#include "base/string_number_conversions.h"
#include "base/string16.h"
#include "base/utf_string_conversions.h"
+#include "chrome/browser/autofill/autofill_country.h"
+#include "chrome/browser/autofill/autofill_profile.h"
#include "chrome/browser/autofill/form_group.h"
#include "webkit/glue/form_field.h"
@@ -99,280 +101,6 @@ string16 State::FullName(const string16& abbreviation) {
return string16();
}
-// Holds valid country names, their 2 letter abbreviation, and maps from
-// the former to the latter
-class Country {
- public:
- const char* name;
- const char* abbreviation;
-
- static const Country all_countries[];
-
- static string16 Abbreviation(const string16 &name);
- static string16 FullName(const string16& abbreviation);
-};
-
-// A list of all English country names and code elements. ISO 3166.
-const Country Country::all_countries[] = {
- { "united states", "us" },
- { "afghanistan", "af" },
- { "aland islands", "ax" },
- { "albania", "al" },
- { "algeria", "dz" },
- { "american samoa", "as" },
- { "andorra", "ad" },
- { "angola", "ao" },
- { "anguilla", "ai" },
- { "antarctica", "aq" },
- { "antigua and barbuda", "ag" },
- { "argentina", "ar" },
- { "armenia", "am" },
- { "aruba", "aw" },
- { "australia", "au" },
- { "austria", "at" },
- { "azerbaijan", "az" },
- { "bahamas", "bs" },
- { "bahrain", "bh" },
- { "bangladesh", "bd" },
- { "barbados", "bb" },
- { "belarus", "by" },
- { "belgium", "be" },
- { "belize", "bz" },
- { "benin", "bj" },
- { "bermuda", "bm" },
- { "bhutan", "bt" },
- { "bolivia", "bo" },
- { "bosnia and herzegovina", "ba" },
- { "botswana", "bw" },
- { "bouvet island", "bv" },
- { "brazil", "br" },
- { "british indian ocean territory", "io" },
- { "brunei darussalam", "bn" },
- { "bulgaria", "bg" },
- { "burkina faso", "bf" },
- { "burundi", "bi" },
- { "cambodia", "kh" },
- { "cameroon", "cm" },
- { "canada", "ca" },
- { "cape verde", "cv" },
- { "cayman islands", "ky" },
- { "central african republic", "cf" },
- { "chad", "td" },
- { "chile", "cl" },
- { "china", "cn" },
- { "christmas island", "cx" },
- { "cocos (keeling) islands", "cc" },
- { "colombia", "co" },
- { "comoros", "km" },
- { "congo", "cg" },
- { "congo (dem. rep.)", "cd" },
- { "cook islands", "ck" },
- { "costa rica", "cr" },
- { "cote d'ivoire", "ci" },
- { "croatia", "hr" },
- { "cuba", "cu" },
- { "cyprus", "cy" },
- { "czech republic", "cz" },
- { "denmark", "dk" },
- { "djibouti", "dj" },
- { "dominica", "dm" },
- { "dominican republic", "do" },
- { "ecuador", "ec" },
- { "egypt", "eg" },
- { "el salvador", "sv" },
- { "equatorial guinea", "gq" },
- { "eritrea", "er" },
- { "estonia", "ee" },
- { "ethiopia", "et" },
- { "falkland islands (malvinas)", "fk" },
- { "faroe islands", "fo" },
- { "fiji", "fj" },
- { "finland", "fi" },
- { "france", "fr" },
- { "french guiana", "gf" },
- { "french polynesia", "pf" },
- { "gabon", "ga" },
- { "gambia", "gm" },
- { "georgia", "ge" },
- { "germany", "de" },
- { "ghana", "gh" },
- { "gibraltar", "gi" },
- { "greece", "gr" },
- { "greenland", "gl" },
- { "grenada", "gd" },
- { "guadeloupe", "gp" },
- { "guam", "gu" },
- { "guatemala", "gt" },
- { "guernsey", "cg" },
- { "guinea", "gn" },
- { "guinea-bissau", "gw" },
- { "guyana", "gy" },
- { "haiti", "ht" },
- { "heard island and mcdonald islands", "hm" },
- { "holy see (vatica city state)", "va" },
- { "honduras", "hn" },
- { "hong kong", "hk" },
- { "hungary", "hu" },
- { "iceland", "is" },
- { "india", "in" },
- { "indonesia", "id" },
- { "iran", "ir" },
- { "iraq", "iq" },
- { "ireland", "ie" },
- { "isle of man", "im" },
- { "israel", "il" },
- { "italy", "it" },
- { "ivory coast", "ci" },
- { "jamaica", "jm" },
- { "japan", "jp" },
- { "jersey", "je" },
- { "jordan", "jo" },
- { "kazakhstan", "kz" },
- { "kenya", "ke" },
- { "kiribati", "ki" },
- { "korea (north)", "kp" },
- { "korea (south)", "kr" },
- { "kuwait", "kw" },
- { "kyrgyzstan", "kg" },
- { "laos", "la" },
- { "latvia", "lv" },
- { "lebanon", "lb" },
- { "lesotho", "ls" },
- { "liberia", "lr" },
- { "libya", "ly" },
- { "liechtenstein", "li" },
- { "lithuania", "lt" },
- { "luxembourg", "lu" },
- { "macao", "mo" },
- { "macedonia", "mk" },
- { "madagascar", "mg" },
- { "malawi", "mw" },
- { "malaysia", "my" },
- { "maldives", "mv" },
- { "mali", "ml" },
- { "malta", "mt" },
- { "marshall islands", "mh" },
- { "martinique", "mq" },
- { "mauritania", "mr" },
- { "mauritius", "mu" },
- { "mayotte", "yt" },
- { "mexico", "mx" },
- { "micronesia", "fm" },
- { "moldova", "md" },
- { "monaco", "mc" },
- { "mongolia", "mn" },
- { "montserrat", "ms" },
- { "morocco", "ma" },
- { "mozambique", "mz" },
- { "myanmar", "mm" },
- { "namibia", "na" },
- { "nepal", "np" },
- { "netherlands", "nl" },
- { "netherlands antilles", "an" },
- { "new caledonia", "nc" },
- { "new zealand", "nz" },
- { "nicaragua", "ni" },
- { "niger", "ne" },
- { "nigeria", "ng" },
- { "niue", "nu" },
- { "norfolk island", "nf" },
- { "northern mariana islands", "mp" },
- { "norway", "no" },
- { "oman", "om" },
- { "pakistan", "pk" },
- { "palau", "pw" },
- { "palestine", "ps" },
- { "panama", "pa" },
- { "papua new guinea", "pg" },
- { "paraguay", "py" },
- { "peru", "pe" },
- { "philippines", "ph" },
- { "pitcairn", "pn" },
- { "poland", "pl" },
- { "portugal", "pt" },
- { "puerto rico", "pr" },
- { "qatar", "qa" },
- { "reunion", "re" },
- { "romania", "ro" },
- { "russia", "ru" },
- { "rwanda", "rw" },
- { "saint helena", "sh" },
- { "saint kitts and nevis", "kn" },
- { "saint lucia", "lc" },
- { "saint pierre and miquelon", "pm" },
- { "saint vincent and the grenadines", "vc" },
- { "samoa", "ws" },
- { "san marino", "sm" },
- { "sao tome and principe", "st" },
- { "saudi arabia", "sa" },
- { "senegal", "sn" },
- { "serbia and montenegro", "cs" },
- { "seychelles", "sc" },
- { "sierra leone", "sl" },
- { "singapore", "sg" },
- { "slovakia", "sk" },
- { "slovenia", "si" },
- { "solomon islands", "sb" },
- { "somalia", "so" },
- { "south africa", "za" },
- { "south georgia and the south sandwich islands", "gs" },
- { "spain", "es" },
- { "sri lanka", "lk" },
- { "sudan", "sd" },
- { "suriname", "sr" },
- { "svalbard and jan mayen", "sj" },
- { "swaziland", "sz" },
- { "sweden", "se" },
- { "switzerland", "ch" },
- { "syria", "sy" },
- { "taiwan", "tw" },
- { "tajikistan", "tj" },
- { "tanzania", "tz" },
- { "thailand", "th" },
- { "timor-leste", "tl" },
- { "togo", "tg" },
- { "tokelau", "tk" },
- { "tonga", "to" },
- { "trinidad and tobago", "tt" },
- { "tunisia", "tn" },
- { "turkey", "tr" },
- { "turkmenistan", "tm" },
- { "turks and caicos islands", "tc" },
- { "tuvalu", "tv" },
- { "uganda", "ug" },
- { "ukraine", "ua" },
- { "united arab emirates", "ae" },
- { "united kingdom", "gb" },
- { "u.s. minor outlying islands", "um" },
- { "uruguay", "uy" },
- { "uzbekistan", "uz" },
- { "vanuatu", "vu" },
- { "venezuela", "ve" },
- { "vietnam", "vn" },
- { "virgin islands, british", "vg" },
- { "virgin islands, u.s.", "vi" },
- { "wallis and futuna", "wf" },
- { "western sahara", "eh" },
- { "yemen", "ye" },
- { "zambia", "zm" },
- { "zimbabwe", "zw" },
- { NULL, NULL }
-};
-
-string16 Country::Abbreviation(const string16& name) {
- for (const Country *s = all_countries ; s->name ; ++s)
- if (LowerCaseEqualsASCII(name, s->name))
- return ASCIIToUTF16(s->abbreviation);
- return string16();
-}
-
-string16 Country::FullName(const string16& abbreviation) {
- for (const Country *s = all_countries ; s->name ; ++s)
- if (LowerCaseEqualsASCII(abbreviation, s->abbreviation))
- return ASCIIToUTF16(s->name);
- return string16();
-}
-
const char* const kMonthsAbbreviated[] = {
NULL, // Padding so index 1 = month 1 = January.
"Jan", "Feb", "Mar", "Apr", "May", "Jun",
@@ -410,9 +138,6 @@ bool SetSelectControlValue(const string16& value,
bool FillStateSelectControl(const string16& value,
webkit_glue::FormField* field) {
dhollowa 2011/02/17 00:55:28 A DCHECK(!value.empty()) might be worthwhile here
Ilya Sherman 2011/02/17 23:09:11 Nothing will go wrong if value is empty -- it'll j
- if (value.empty())
- return false;
-
string16 abbrev, full;
if (value.size() < 4U) {
abbrev = value;
@@ -432,38 +157,27 @@ bool FillStateSelectControl(const string16& value,
return SetSelectControlValue(full, field);
}
-bool FillCountrySelectControl(const string16& value,
+bool FillCountrySelectControl(const FormGroup& form_group,
dhollowa 2011/02/17 00:55:28 This looks very much like |SetSelectControlValue|.
Ilya Sherman 2011/02/17 23:09:11 The caller already tries the full country string.
dhollowa 2011/02/17 23:36:47 Makes sense, ya. On 2011/02/17 23:09:11, Ilya She
webkit_glue::FormField* field) {
- if (value.empty())
- return false;
+ const AutoFillProfile& profile =
+ static_cast<const AutoFillProfile&>(form_group);
+ std::string country_code = profile.CountryCode();
- string16 abbrev, full;
- if (value.size() < 4U) {
- abbrev = value;
- full = Country::FullName(value);
- } else {
- abbrev = Country::Abbreviation(value);
- full = value;
+ for (std::vector<string16>::const_iterator iter =
+ field->option_strings().begin();
+ iter != field->option_strings().end();
+ ++iter) {
+ if (country_code == AutoFillCountry::GetCountryCode(*iter)) {
+ field->set_value(*iter);
+ return true;
+ }
}
- // Try the abbreviation name first.
- if (!abbrev.empty() && SetSelectControlValue(abbrev, field))
- return true;
-
- if (full.empty())
- return false;
-
- return SetSelectControlValue(full, field);
+ return false;
}
bool FillExpirationMonthSelectControl(const string16& value,
webkit_glue::FormField* field) {
dhollowa 2011/02/17 00:55:28 A DCHECK(!value.empty()) might be worthwhile here
Ilya Sherman 2011/02/17 23:09:11 An empty value would just trip the "return false;"
dhollowa 2011/02/17 23:36:47 Ok. On 2011/02/17 23:09:11, Ilya Sherman wrote:
- if (value.empty())
- return false;
-
- if (SetSelectControlValue(value, field))
- return true;
-
int index = 0;
dhollowa 2011/02/17 00:55:28 This no longer tries both the and full month strin
Ilya Sherman 2011/02/17 23:09:11 The caller already tries the full month value.
dhollowa 2011/02/17 23:36:47 Makes sense, ya. On 2011/02/17 23:09:11, Ilya She
if (!base::StringToInt(value, &index) ||
index <= 0 ||
@@ -487,8 +201,11 @@ void FillSelectControl(const FormGroup& form_group,
DCHECK(field);
DCHECK(field->form_control_type() == ASCIIToUTF16("select-one"));
- string16 value;
string16 field_text = form_group.GetFieldText(type);
+ if (field_text.empty())
+ return;
+
+ string16 value;
for (size_t i = 0; i < field->option_strings().size(); ++i) {
if (field_text == field->option_strings()[i]) {
// An exact match, use it.
@@ -514,7 +231,7 @@ void FillSelectControl(const FormGroup& form_group,
FillStateSelectControl(field_text, field);
} else if (type.field_type() == ADDRESS_HOME_COUNTRY ||
type.field_type() == ADDRESS_BILLING_COUNTRY) {
- FillCountrySelectControl(field_text, field);
+ FillCountrySelectControl(form_group, field);
} else if (type.field_type() == CREDIT_CARD_EXP_MONTH) {
FillExpirationMonthSelectControl(field_text, field);
}

Powered by Google App Engine
This is Rietveld 408576698