| 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 e9eaa73638de8f9ab1a94c4e655dcb9ffe32bfa2..754ec0175be74bfcf416f6c51d84048fdc0f2eaf 100644
|
| --- a/components/autofill/core/browser/autofill_field.cc
|
| +++ b/components/autofill/core/browser/autofill_field.cc
|
| @@ -544,7 +544,7 @@ bool AutofillField::FillFormField(const AutofillField& field,
|
| return false;
|
| }
|
|
|
| - if (type.GetStorableType() == PHONE_HOME_NUMBER) {
|
| + if (type.group() == PHONE_HOME) {
|
| FillPhoneNumberField(field, value, field_data);
|
| return true;
|
| } else if (field_data->form_control_type == "select-one") {
|
| @@ -563,27 +563,42 @@ bool AutofillField::FillFormField(const AutofillField& field,
|
| return true;
|
| }
|
|
|
| +// TODO(crbug.com/581514): Add support for filling only the prefix/suffix for
|
| +// phone numbers with 10 or 11 digits.
|
| base::string16 AutofillField::GetPhoneNumberValue(
|
| const AutofillField& field,
|
| const base::string16& number,
|
| const FormFieldData& field_data) {
|
| - // Check to see if the size field matches the "prefix" or "suffix" size.
|
| - // If so, return the appropriate substring.
|
| - if (number.length() !=
|
| - PhoneNumber::kPrefixLength + PhoneNumber::kSuffixLength) {
|
| - return number;
|
| - }
|
| + // TODO(crbug.com/581485): Investigate the use of libphonenumber here.
|
| + // Check to see if the |field| size matches the "prefix" or "suffix" size or
|
| + // if
|
| + // the field was labeled as such. If so, return the appropriate substring.
|
| + if (number.length() ==
|
| + PhoneNumber::kPrefixLength + PhoneNumber::kSuffixLength) {
|
| + if (field.phone_part() == AutofillField::PHONE_PREFIX ||
|
| + field_data.max_length == PhoneNumber::kPrefixLength) {
|
| + return number.substr(PhoneNumber::kPrefixOffset,
|
| + PhoneNumber::kPrefixLength);
|
| + }
|
|
|
| - if (field.phone_part() == AutofillField::PHONE_PREFIX ||
|
| - field_data.max_length == PhoneNumber::kPrefixLength) {
|
| - return
|
| - number.substr(PhoneNumber::kPrefixOffset, PhoneNumber::kPrefixLength);
|
| + if (field.phone_part() == AutofillField::PHONE_SUFFIX ||
|
| + field_data.max_length == PhoneNumber::kSuffixLength) {
|
| + return number.substr(PhoneNumber::kSuffixOffset,
|
| + PhoneNumber::kSuffixLength);
|
| + }
|
| }
|
|
|
| - if (field.phone_part() == AutofillField::PHONE_SUFFIX ||
|
| - field_data.max_length == PhoneNumber::kSuffixLength) {
|
| - return
|
| - number.substr(PhoneNumber::kSuffixOffset, PhoneNumber::kSuffixLength);
|
| + // If no max length was specified, return the complete number.
|
| + if (field_data.max_length == 0)
|
| + return number;
|
| +
|
| + // If |number| exceeds the maximum size of the field, cut the first part to
|
| + // provide a valid number for the field. For example, the number 15142365264
|
| + // with a field with a max length of 10 would return 5142365264, thus removing
|
| + // the country code and remaining valid.
|
| + if (number.length() > field_data.max_length) {
|
| + return number.substr(number.length() - field_data.max_length,
|
| + field_data.max_length);
|
| }
|
|
|
| return number;
|
|
|