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

Unified Diff: components/autofill/core/browser/credit_card.cc

Issue 1080883002: Remove some more bad ASCII-centric autofill code. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: relative patch Created 5 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 side-by-side diff with in-line comments
Download patch
Index: components/autofill/core/browser/credit_card.cc
diff --git a/components/autofill/core/browser/credit_card.cc b/components/autofill/core/browser/credit_card.cc
index 85bad41ffd98eca579d1f5e42657e5b029d2f539..fe6b492e69677f5cf1e48ea247f3a5859d44d238 100644
--- a/components/autofill/core/browser/credit_card.cc
+++ b/components/autofill/core/browser/credit_card.cc
@@ -23,6 +23,7 @@
#include "components/autofill/core/browser/autofill_regexes.h"
#include "components/autofill/core/browser/autofill_type.h"
#include "components/autofill/core/browser/validation.h"
+#include "components/autofill/core/common/autofill_l10n_util.h"
#include "components/autofill/core/common/form_field_data.h"
#include "grit/components_scaled_resources.h"
#include "grit/components_strings.h"
@@ -51,58 +52,6 @@ bool ConvertYear(const base::string16& year, int* num) {
return false;
}
-bool ConvertMonth(const base::string16& month,
- const std::string& app_locale,
- int* num) {
- // If the |month| is empty, clear the stored value.
- if (month.empty()) {
- *num = 0;
- return true;
- }
-
- // Try parsing the |month| as a number.
- if (base::StringToInt(month, num))
- return true;
-
- // If the locale is unknown, give up.
- if (app_locale.empty())
- return false;
-
- // Otherwise, try parsing the |month| as a named month, e.g. "January" or
- // "Jan".
- base::string16 lowercased_month = base::StringToLowerASCII(month);
-
- UErrorCode status = U_ZERO_ERROR;
- icu::Locale locale(app_locale.c_str());
- icu::DateFormatSymbols date_format_symbols(locale, status);
- DCHECK(status == U_ZERO_ERROR || status == U_USING_FALLBACK_WARNING ||
- status == U_USING_DEFAULT_WARNING);
-
- int32_t num_months;
- const icu::UnicodeString* months = date_format_symbols.getMonths(num_months);
- for (int32_t i = 0; i < num_months; ++i) {
- const base::string16 icu_month = base::string16(months[i].getBuffer(),
- months[i].length());
- if (lowercased_month == base::StringToLowerASCII(icu_month)) {
- *num = i + 1; // Adjust from 0-indexed to 1-indexed.
- return true;
- }
- }
-
- months = date_format_symbols.getShortMonths(num_months);
- for (int32_t i = 0; i < num_months; ++i) {
- const base::string16 icu_month = base::string16(months[i].getBuffer(),
- months[i].length());
- if (lowercased_month == base::StringToLowerASCII(icu_month)) {
- *num = i + 1; // Adjust from 0-indexed to 1-indexed.
- return true;
- }
- }
-
- *num = 0;
- return false;
-}
-
base::string16 TypeForFill(const std::string& type) {
if (type == kAmericanExpressCard)
return l10n_util::GetStringUTF16(IDS_AUTOFILL_CC_AMEX);
@@ -757,6 +706,61 @@ void CreditCard::SetNumber(const base::string16& number) {
type_ = GetCreditCardType(StripSeparators(number_));
}
+// static
+bool CreditCard::ConvertMonth(const base::string16& month,
+ const std::string& app_locale,
+ int* num) {
+ // If the |month| is empty, clear the stored value.
+ if (month.empty()) {
+ *num = 0;
+ return true;
Lei Zhang 2015/04/13 19:59:13 I wonder if this should return false. It's not a s
Evan Stade 2015/04/13 21:34:13 good point. It makes more sense if this check is m
+ }
+
+ // Try parsing the |month| as a number.
+ if (base::StringToInt(month, num))
+ return true;
+
+ // If the locale is unknown, give up.
+ if (app_locale.empty())
+ return false;
+
+ // Otherwise, try parsing the |month| as a named month, e.g. "January" or
+ // "Jan".
+ l10n::CaseInsensitiveCompare compare;
+ UErrorCode status = U_ZERO_ERROR;
+ icu::Locale locale(app_locale.c_str());
+ icu::DateFormatSymbols date_format_symbols(locale, status);
+ DCHECK(status == U_ZERO_ERROR || status == U_USING_FALLBACK_WARNING ||
+ status == U_USING_DEFAULT_WARNING);
+
+ int32_t num_months;
+ const icu::UnicodeString* months = date_format_symbols.getMonths(num_months);
+ for (int32_t i = 0; i < num_months; ++i) {
+ const base::string16 icu_month(months[i].getBuffer(), months[i].length());
+ if (compare.StringsEqual(icu_month, month)) {
+ *num = i + 1; // Adjust from 0-indexed to 1-indexed.
+ return true;
+ }
+ }
+
+ months = date_format_symbols.getShortMonths(num_months);
+ // Some abbreviations have . at the end (e.g., "janv." in French). We don't
+ // care about matching that.
+ base::string16 trimmed_month;
+ base::TrimString(month, base::ASCIIToUTF16("."), &trimmed_month);
+ for (int32_t i = 0; i < num_months; ++i) {
+ base::string16 icu_month(months[i].getBuffer(), months[i].length());
+ base::TrimString(icu_month, base::ASCIIToUTF16("."), &icu_month);
+ if (compare.StringsEqual(icu_month, trimmed_month)) {
+ *num = i + 1; // Adjust from 0-indexed to 1-indexed.
+ return true;
+ }
+ }
+
+ *num = 0;
+ return false;
+}
+
// So we can compare CreditCards with EXPECT_EQ().
std::ostream& operator<<(std::ostream& os, const CreditCard& credit_card) {
return os
« no previous file with comments | « components/autofill/core/browser/credit_card.h ('k') | components/autofill/core/browser/credit_card_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698