Index: components/autofill/core/browser/autofill_field.cc |
diff --git a/components/autofill/core/browser/autofill_field.cc b/components/autofill/core/browser/autofill_field.cc |
index 75a0d0a4220a61e4f8f9c92a523bbb12363974cf..aafd72013e2f7f51504f938c4be476dec23aa55b 100644 |
--- a/components/autofill/core/browser/autofill_field.cc |
+++ b/components/autofill/core/browser/autofill_field.cc |
@@ -248,26 +248,10 @@ bool FillYearSelectControl(const base::string16& value, |
// given |field|. |
bool FillCreditCardTypeSelectControl(const base::string16& value, |
FormFieldData* field) { |
- // Try stripping off spaces. |
- base::string16 value_stripped; |
- base::RemoveChars(base::StringToLowerASCII(value), base::kWhitespaceUTF16, |
- &value_stripped); |
- |
- for (size_t i = 0; i < field->option_values.size(); ++i) { |
- base::string16 option_value_lowercase; |
- base::RemoveChars(base::StringToLowerASCII(field->option_values[i]), |
- base::kWhitespaceUTF16, &option_value_lowercase); |
- base::string16 option_contents_lowercase; |
- base::RemoveChars(base::StringToLowerASCII(field->option_contents[i]), |
- base::kWhitespaceUTF16, &option_contents_lowercase); |
- |
- // Perform a case-insensitive comparison; but fill the form with the |
- // original text, not the lowercased version. |
- if (value_stripped == option_value_lowercase || |
- value_stripped == option_contents_lowercase) { |
- field->value = field->option_values[i]; |
- return true; |
- } |
+ size_t idx; |
+ if (AutofillField::FindValueInCreditTypeSelectControl(*field, value, &idx)) { |
+ field->value = field->option_values[idx]; |
+ return true; |
} |
// For American Express, also try filling as "AmEx". |
@@ -541,4 +525,32 @@ base::string16 AutofillField::GetPhoneNumberValue( |
return number; |
} |
+// static |
+bool AutofillField::FindValueInCreditTypeSelectControl( |
Evan Stade
2015/03/25 21:25:51
nothing about this looks credit card specific (?)
Lei Zhang
2015/03/25 22:18:48
Done.
|
+ const FormFieldData& field, |
+ const base::string16& value, |
+ size_t* index) { |
+ // Try stripping off spaces. |
+ base::string16 value_stripped; |
+ base::RemoveChars(base::StringToLowerASCII(value), base::kWhitespaceUTF16, |
+ &value_stripped); |
+ for (size_t i = 0; i < field.option_values.size(); ++i) { |
+ base::string16 option_value_lowercase; |
+ base::RemoveChars(base::StringToLowerASCII(field.option_values[i]), |
+ base::kWhitespaceUTF16, &option_value_lowercase); |
+ base::string16 option_contents_lowercase; |
+ base::RemoveChars(base::StringToLowerASCII(field.option_contents[i]), |
Evan Stade
2015/03/25 21:25:51
I don't think assuming this is ASCII and failing o
Lei Zhang
2015/03/25 22:18:48
base::StringToLowerASCII() doesn't fail if it enco
Evan Stade
2015/03/25 22:23:08
my point is that upper case accented character won
Lei Zhang
2015/03/25 22:39:03
Sure, that's a valid point, but I just want to mov
Evan Stade
2015/03/25 22:39:53
seems like it would only take about 5 minutes of e
|
+ base::kWhitespaceUTF16, &option_contents_lowercase); |
+ |
+ // Perform a case-insensitive comparison. |
+ if (value_stripped == option_value_lowercase || |
+ value_stripped == option_contents_lowercase) { |
+ if (index) |
+ *index = i; |
+ return true; |
+ } |
+ } |
+ return false; |
+} |
+ |
} // namespace autofill |