| Index: chrome/browser/autofill/phone_field.cc
|
| diff --git a/chrome/browser/autofill/phone_field.cc b/chrome/browser/autofill/phone_field.cc
|
| index 7306764f67df9cda053c073fe9543b48e1bc6653..c5045aa141da30cd73c071ad13f4495c22c474e2 100644
|
| --- a/chrome/browser/autofill/phone_field.cc
|
| +++ b/chrome/browser/autofill/phone_field.cc
|
| @@ -9,6 +9,7 @@
|
| #include "base/string16.h"
|
| #include "base/string_util.h"
|
| #include "base/utf_string_conversions.h"
|
| +#include "chrome/browser/autofill/autofill_ecml.h"
|
| #include "chrome/browser/autofill/autofill_field.h"
|
| #include "chrome/browser/autofill/autofill_scanner.h"
|
| #include "chrome/browser/autofill/fax_number.h"
|
| @@ -16,6 +17,8 @@
|
| #include "grit/autofill_resources.h"
|
| #include "ui/base/l10n/l10n_util.h"
|
|
|
| +using autofill::GetEcmlPattern;
|
| +
|
| // Phone field grammars - first matched grammar will be parsed. Grammars are
|
| // separated by { REGEX_SEPARATOR, FIELD_NONE, 0 }. Suffix and extension are
|
| // parsed separately unless they are necessary parts of the match.
|
| @@ -124,7 +127,7 @@ PhoneField* PhoneField::ParseECML(AutofillScanner* scanner) {
|
| string16 pattern(GetEcmlPattern(kEcmlShipToPhone, kEcmlBillToPhone, '|'));
|
|
|
| const AutofillField* field;
|
| - if (ParseText(scanner, pattern, &field)) {
|
| + if (ParseField(scanner, pattern, &field)) {
|
| PhoneField* phone_field = new PhoneField();
|
| phone_field->parsed_phone_fields_[FIELD_PHONE] = field;
|
| return phone_field;
|
| @@ -133,7 +136,12 @@ PhoneField* PhoneField::ParseECML(AutofillScanner* scanner) {
|
| return NULL;
|
| }
|
|
|
| -bool PhoneField::GetFieldInfo(FieldTypeMap* field_type_map) const {
|
| +PhoneField::PhoneField() {
|
| + memset(parsed_phone_fields_, 0, sizeof(parsed_phone_fields_));
|
| + SetPhoneType(HOME_PHONE);
|
| +}
|
| +
|
| +bool PhoneField::ClassifyField(FieldTypeMap* map) const {
|
| bool ok = true;
|
|
|
| DCHECK(parsed_phone_fields_[FIELD_PHONE]); // Phone was correctly parsed.
|
| @@ -142,41 +150,36 @@ bool PhoneField::GetFieldInfo(FieldTypeMap* field_type_map) const {
|
| (parsed_phone_fields_[FIELD_AREA_CODE] != NULL) ||
|
| (parsed_phone_fields_[FIELD_SUFFIX] != NULL)) {
|
| if (parsed_phone_fields_[FIELD_COUNTRY_CODE] != NULL) {
|
| - ok = ok && Add(field_type_map,
|
| - parsed_phone_fields_[FIELD_COUNTRY_CODE],
|
| - number_->GetCountryCodeType());
|
| + ok = ok && AddClassification(parsed_phone_fields_[FIELD_COUNTRY_CODE],
|
| + number_->GetCountryCodeType(),
|
| + map);
|
| }
|
| if (parsed_phone_fields_[FIELD_AREA_CODE] != NULL) {
|
| - ok = ok && Add(field_type_map,
|
| - parsed_phone_fields_[FIELD_AREA_CODE],
|
| - number_->GetCityCodeType());
|
| + ok = ok && AddClassification(parsed_phone_fields_[FIELD_AREA_CODE],
|
| + number_->GetCityCodeType(),
|
| + map);
|
| }
|
| // We tag the prefix as PHONE_HOME_NUMBER, then when filling the form
|
| // we fill only the prefix depending on the size of the input field.
|
| - ok = ok && Add(field_type_map,
|
| - parsed_phone_fields_[FIELD_PHONE],
|
| - number_->GetNumberType());
|
| + ok = ok && AddClassification(parsed_phone_fields_[FIELD_PHONE],
|
| + number_->GetNumberType(),
|
| + 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) {
|
| - ok = ok && Add(field_type_map,
|
| - parsed_phone_fields_[FIELD_SUFFIX],
|
| - number_->GetNumberType());
|
| + ok = ok && AddClassification(parsed_phone_fields_[FIELD_SUFFIX],
|
| + number_->GetNumberType(),
|
| + map);
|
| }
|
| } else {
|
| - ok = Add(field_type_map,
|
| - parsed_phone_fields_[FIELD_PHONE],
|
| - number_->GetWholeNumberType());
|
| + ok = AddClassification(parsed_phone_fields_[FIELD_PHONE],
|
| + number_->GetWholeNumberType(),
|
| + map);
|
| }
|
|
|
| return ok;
|
| }
|
|
|
| -PhoneField::PhoneField() {
|
| - memset(parsed_phone_fields_, 0, sizeof(parsed_phone_fields_));
|
| - SetPhoneType(HOME_PHONE);
|
| -}
|
| -
|
| string16 PhoneField::GetCountryRegex() const {
|
| // This one is the same for Home and Fax numbers.
|
| return l10n_util::GetStringUTF16(IDS_AUTOFILL_COUNTRY_CODE_RE);
|
| @@ -266,9 +269,9 @@ bool PhoneField::ParseInternal(PhoneField *phone_field,
|
| // Attempt to parse according to the next grammar.
|
| for (; i < arraysize(phone_field_grammars_) &&
|
| phone_field_grammars_[i].regex != REGEX_SEPARATOR; ++i) {
|
| - if (!ParseText(scanner,
|
| - phone_field->GetRegExp(phone_field_grammars_[i].regex),
|
| - &parsed_fields[phone_field_grammars_[i].phone_part]))
|
| + if (!ParseField(scanner,
|
| + phone_field->GetRegExp(phone_field_grammars_[i].regex),
|
| + &parsed_fields[phone_field_grammars_[i].phone_part]))
|
| break;
|
| if (phone_field_grammars_[i].max_size &&
|
| (!parsed_fields[phone_field_grammars_[i].phone_part]->max_length ||
|
| @@ -309,16 +312,16 @@ bool PhoneField::ParseInternal(PhoneField *phone_field,
|
|
|
| // Look for a third text box.
|
| if (!phone_field->parsed_phone_fields_[FIELD_SUFFIX]) {
|
| - if (!ParseText(scanner, phone_field->GetSuffixRegex(),
|
| - &phone_field->parsed_phone_fields_[FIELD_SUFFIX])) {
|
| - ParseText(scanner, phone_field->GetSuffixSeparatorRegex(),
|
| - &phone_field->parsed_phone_fields_[FIELD_SUFFIX]);
|
| + if (!ParseField(scanner, phone_field->GetSuffixRegex(),
|
| + &phone_field->parsed_phone_fields_[FIELD_SUFFIX])) {
|
| + ParseField(scanner, phone_field->GetSuffixSeparatorRegex(),
|
| + &phone_field->parsed_phone_fields_[FIELD_SUFFIX]);
|
| }
|
| }
|
|
|
| // Now look for an extension.
|
| - ParseText(scanner, phone_field->GetExtensionRegex(),
|
| - &phone_field->parsed_phone_fields_[FIELD_EXTENSION]);
|
| + ParseField(scanner, phone_field->GetExtensionRegex(),
|
| + &phone_field->parsed_phone_fields_[FIELD_EXTENSION]);
|
|
|
| return true;
|
| }
|
|
|