| Index: components/autofill/core/browser/phone_number_i18n.cc
|
| diff --git a/components/autofill/core/browser/phone_number_i18n.cc b/components/autofill/core/browser/phone_number_i18n.cc
|
| index 72b2e1f481849956d8091f5bc9adb460ff4ddc0c..8496657f8d54de166314a88e79132ffbb3b57821 100644
|
| --- a/components/autofill/core/browser/phone_number_i18n.cc
|
| +++ b/components/autofill/core/browser/phone_number_i18n.cc
|
| @@ -63,13 +63,37 @@ void FormatValidatedNumber(const PhoneNumber& number,
|
|
|
| PhoneNumberUtil* phone_util = PhoneNumberUtil::GetInstance();
|
| std::string processed_number;
|
| - phone_util->Format(number, format, &processed_number);
|
| +
|
| + std::string region_code;
|
| + phone_util->GetRegionCodeForNumber(number, ®ion_code);
|
| +
|
| + // Formats a phone number in the specified format using default rules.
|
| + // This applies to the following cases:
|
| + // The phone number contains alphabetic letter(s).
|
| + // The phone number has a leading international direct dialing (IDD) code.
|
| + // The phone number does not have a leading '+' sign.
|
| + if (phone_util->IsAlphaNumber(number.raw_input()) ||
|
| + (number.has_country_code_source() &&
|
| + (number.country_code_source() == PhoneNumber::FROM_NUMBER_WITH_IDD ||
|
| + number.country_code_source() ==
|
| + PhoneNumber::FROM_NUMBER_WITHOUT_PLUS_SIGN))) {
|
| + phone_util->Format(number, format, &processed_number);
|
| + } else {
|
| + phone_util->FormatInOriginalFormat(number, region_code, &processed_number);
|
| + }
|
|
|
| if (formatted_number)
|
| *formatted_number = base::UTF8ToUTF16(processed_number);
|
|
|
| if (normalized_number) {
|
| - phone_util->NormalizeDigitsOnly(&processed_number);
|
| + // Keep the leading '+' while normalising numbers, excluding US numbers.
|
| + if (processed_number[0] == '+' && region_code != "US") {
|
| + processed_number = processed_number.substr(1, processed_number.length());
|
| + phone_util->NormalizeDigitsOnly(&processed_number);
|
| + processed_number.insert(processed_number.begin(), '+');
|
| + } else {
|
| + phone_util->NormalizeDigitsOnly(&processed_number);
|
| + }
|
| *normalized_number = base::UTF8ToUTF16(processed_number);
|
| }
|
| }
|
| @@ -100,7 +124,9 @@ bool ParsePhoneNumber(const base::string16& value,
|
|
|
| // The |default_region| should already be sanitized.
|
| DCHECK_EQ(2U, default_region.size());
|
| - if (phone_util->Parse(number_text, default_region, i18n_number) !=
|
| + if (phone_util->ParseAndKeepRawInput(number_text,
|
| + default_region,
|
| + i18n_number) !=
|
| PhoneNumberUtil::NO_PARSING_ERROR) {
|
| return false;
|
| }
|
|
|