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

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

Issue 1010743007: Autofill: Apply the same field match mask to all phone field subtypes. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 9 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/phone_field.cc
diff --git a/components/autofill/core/browser/phone_field.cc b/components/autofill/core/browser/phone_field.cc
index d7860497378a55090a40234e907f1c4e39ef0f5a..3c6b351e7d2317c514196b59ec73b4dbf4622a1b 100644
--- a/components/autofill/core/browser/phone_field.cc
+++ b/components/autofill/core/browser/phone_field.cc
@@ -17,10 +17,10 @@ namespace autofill {
namespace {
// This string includes all area code separators, including NoText.
-base::string16 GetAreaRegex() {
- base::string16 area_code = base::UTF8ToUTF16(kAreaCodeRe);
- area_code.append(base::ASCIIToUTF16("|")); // Regexp separator.
- area_code.append(base::UTF8ToUTF16(kAreaCodeNotextRe));
+std::string GetAreaRegex() {
+ std::string area_code = kAreaCodeRe;
+ area_code.append("|"); // Regexp separator.
+ area_code.append(kAreaCodeNotextRe);
return area_code;
}
@@ -119,24 +119,23 @@ const PhoneField::Parser PhoneField::kPhoneFieldGrammars[] = {
// static
scoped_ptr<FormField> PhoneField::Parse(AutofillScanner* scanner) {
if (scanner->IsEnd())
- return NULL;
+ return nullptr;
- scanner->SaveCursor();
+ size_t start_cursor = scanner->SaveCursor();
// The form owns the following variables, so they should not be deleted.
AutofillField* parsed_fields[FIELD_MAX];
for (size_t i = 0; i < arraysize(kPhoneFieldGrammars); ++i) {
memset(parsed_fields, 0, sizeof(parsed_fields));
- scanner->SaveCursor();
+ size_t saved_cursor = scanner->SaveCursor();
// Attempt to parse according to the next grammar.
for (; i < arraysize(kPhoneFieldGrammars) &&
kPhoneFieldGrammars[i].regex != REGEX_SEPARATOR; ++i) {
- if (!ParseFieldSpecifics(
+ if (!ParsePhoneField(
scanner,
GetRegExp(kPhoneFieldGrammars[i].regex),
- MATCH_DEFAULT | MATCH_TELEPHONE,
&parsed_fields[kPhoneFieldGrammars[i].phone_part]))
break;
if (kPhoneFieldGrammars[i].max_size &&
@@ -148,8 +147,8 @@ scoped_ptr<FormField> PhoneField::Parse(AutofillScanner* scanner) {
}
if (i >= arraysize(kPhoneFieldGrammars)) {
- scanner->Rewind();
- return NULL; // Parsing failed.
+ scanner->RewindTo(saved_cursor);
+ return nullptr; // Parsing failed.
}
if (kPhoneFieldGrammars[i].regex == REGEX_SEPARATOR)
break; // Parsing succeeded.
@@ -160,17 +159,15 @@ scoped_ptr<FormField> PhoneField::Parse(AutofillScanner* scanner) {
} while (i < arraysize(kPhoneFieldGrammars) &&
kPhoneFieldGrammars[i].regex != REGEX_SEPARATOR);
+ scanner->RewindTo(saved_cursor);
if (i + 1 == arraysize(kPhoneFieldGrammars)) {
- scanner->Rewind();
- return NULL; // Tried through all the possibilities - did not match.
+ return nullptr; // Tried through all the possibilities - did not match.
}
-
- scanner->Rewind();
}
if (!parsed_fields[FIELD_PHONE]) {
- scanner->Rewind();
- return NULL;
+ scanner->RewindTo(start_cursor);
+ return nullptr;
}
scoped_ptr<PhoneField> phone_field(new PhoneField);
@@ -181,16 +178,19 @@ scoped_ptr<FormField> PhoneField::Parse(AutofillScanner* scanner) {
// Look for a third text box.
if (!phone_field->parsed_phone_fields_[FIELD_SUFFIX]) {
- if (!ParseField(scanner, base::UTF8ToUTF16(kPhoneSuffixRe),
- &phone_field->parsed_phone_fields_[FIELD_SUFFIX])) {
- ParseField(scanner, base::UTF8ToUTF16(kPhoneSuffixSeparatorRe),
- &phone_field->parsed_phone_fields_[FIELD_SUFFIX]);
+ if (!ParsePhoneField(scanner, kPhoneSuffixRe,
+ &phone_field->parsed_phone_fields_[FIELD_SUFFIX])) {
+ ParsePhoneField(scanner, kPhoneSuffixSeparatorRe,
+ &phone_field->parsed_phone_fields_[FIELD_SUFFIX]);
}
}
// Now look for an extension.
- ParseField(scanner, base::UTF8ToUTF16(kPhoneExtensionRe),
- &phone_field->parsed_phone_fields_[FIELD_EXTENSION]);
+ // The extension is not actually used, so this just eats the field so other
+ // parsers do not mistaken it for something else.
+ ParsePhoneField(scanner,
+ kPhoneExtensionRe,
+ &phone_field->parsed_phone_fields_[FIELD_EXTENSION]);
return phone_field.Pass();
}
@@ -200,21 +200,21 @@ bool PhoneField::ClassifyField(ServerFieldTypeMap* map) const {
DCHECK(parsed_phone_fields_[FIELD_PHONE]); // Phone was correctly parsed.
- if ((parsed_phone_fields_[FIELD_COUNTRY_CODE] != NULL) ||
- (parsed_phone_fields_[FIELD_AREA_CODE] != NULL) ||
- (parsed_phone_fields_[FIELD_SUFFIX] != NULL)) {
- if (parsed_phone_fields_[FIELD_COUNTRY_CODE] != NULL) {
+ if ((parsed_phone_fields_[FIELD_COUNTRY_CODE]) ||
+ (parsed_phone_fields_[FIELD_AREA_CODE]) ||
+ (parsed_phone_fields_[FIELD_SUFFIX])) {
+ if (parsed_phone_fields_[FIELD_COUNTRY_CODE]) {
ok = ok && AddClassification(parsed_phone_fields_[FIELD_COUNTRY_CODE],
PHONE_HOME_COUNTRY_CODE,
map);
}
ServerFieldType field_number_type = PHONE_HOME_NUMBER;
- if (parsed_phone_fields_[FIELD_AREA_CODE] != NULL) {
+ if (parsed_phone_fields_[FIELD_AREA_CODE]) {
ok = ok && AddClassification(parsed_phone_fields_[FIELD_AREA_CODE],
PHONE_HOME_CITY_CODE,
map);
- } else if (parsed_phone_fields_[FIELD_COUNTRY_CODE] != NULL) {
+ } else if (parsed_phone_fields_[FIELD_COUNTRY_CODE]) {
// Only if we can find country code without city code, it means the phone
// number include city code.
field_number_type = PHONE_HOME_CITY_AND_NUMBER;
@@ -226,7 +226,7 @@ bool PhoneField::ClassifyField(ServerFieldTypeMap* map) const {
map);
// We tag the suffix as PHONE_HOME_NUMBER, then when filling the form
// we fill only the suffix depending on the size of the input field.
- if (parsed_phone_fields_[FIELD_SUFFIX] != NULL) {
+ if (parsed_phone_fields_[FIELD_SUFFIX]) {
ok = ok && AddClassification(parsed_phone_fields_[FIELD_SUFFIX],
PHONE_HOME_NUMBER,
map);
@@ -245,31 +245,41 @@ PhoneField::PhoneField() {
}
// static
-base::string16 PhoneField::GetRegExp(RegexType regex_id) {
+std::string PhoneField::GetRegExp(RegexType regex_id) {
switch (regex_id) {
case REGEX_COUNTRY:
- return base::UTF8ToUTF16(kCountryCodeRe);
+ return kCountryCodeRe;
case REGEX_AREA:
return GetAreaRegex();
case REGEX_AREA_NOTEXT:
- return base::UTF8ToUTF16(kAreaCodeNotextRe);
+ return kAreaCodeNotextRe;
case REGEX_PHONE:
- return base::UTF8ToUTF16(kPhoneRe);
+ return kPhoneRe;
case REGEX_PREFIX_SEPARATOR:
- return base::UTF8ToUTF16(kPhonePrefixSeparatorRe);
+ return kPhonePrefixSeparatorRe;
case REGEX_PREFIX:
- return base::UTF8ToUTF16(kPhonePrefixRe);
+ return kPhonePrefixRe;
case REGEX_SUFFIX_SEPARATOR:
- return base::UTF8ToUTF16(kPhoneSuffixSeparatorRe);
+ return kPhoneSuffixSeparatorRe;
case REGEX_SUFFIX:
- return base::UTF8ToUTF16(kPhoneSuffixRe);
+ return kPhoneSuffixRe;
case REGEX_EXTENSION:
- return base::UTF8ToUTF16(kPhoneExtensionRe);
+ return kPhoneExtensionRe;
default:
NOTREACHED();
break;
}
- return base::string16();
+ return std::string();
+}
+
+// static
+bool PhoneField::ParsePhoneField(AutofillScanner* scanner,
+ const std::string& regex,
+ AutofillField** field) {
+ return ParseFieldSpecifics(scanner,
+ base::UTF8ToUTF16(regex),
+ MATCH_DEFAULT | MATCH_TELEPHONE,
+ field);
}
} // namespace autofill

Powered by Google App Engine
This is Rietveld 408576698