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

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

Issue 355823007: Adjust autofill phone number format. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Update test code. Created 6 years, 5 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_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..7f092a23fd0275780ec062cbea039416f197f1ba 100644
--- a/components/autofill/core/browser/phone_number_i18n.cc
+++ b/components/autofill/core/browser/phone_number_i18n.cc
@@ -63,13 +63,44 @@ void FormatValidatedNumber(const PhoneNumber& number,
PhoneNumberUtil* phone_util = PhoneNumberUtil::GetInstance();
std::string processed_number;
- phone_util->Format(number, format, &processed_number);
- if (formatted_number)
- *formatted_number = base::UTF8ToUTF16(processed_number);
+ std::string region_code;
+ phone_util->GetRegionCodeForNumber(number, &region_code);
+
+ // Formats a phone number using the original phone number format that the
+ // number is parsed from.
+ // This applies to the following cases:
+ // The phone number is an international phone number and has a leading '+'
+ // sign.
+ // The number is from the default country. This happens mostly for numbers
+ // written in the nation format.
Ilya Sherman 2014/07/11 03:43:40 nit: "nation" -> "national"
+ if (number.has_country_code_source() &&
+ ((number.country_code_source() ==
+ PhoneNumber::FROM_NUMBER_WITH_PLUS_SIGN &&
+ format == PhoneNumberUtil::INTERNATIONAL) ||
+ number.country_code_source() ==
+ PhoneNumber::FROM_DEFAULT_COUNTRY)) {
+ phone_util->FormatInOriginalFormat(number, region_code, &processed_number);
+ } else {
+ phone_util->Format(number, format, &processed_number);
+ }
+
+ if (formatted_number) {
+ *formatted_number = (processed_number[0] == '+' && region_code == "US" ?
Ilya Sherman 2014/07/11 03:43:40 Please add comments to explain why the US is speci
+ base::UTF8ToUTF16(processed_number.substr(1,
+ processed_number.length())) :
+ base::UTF8ToUTF16(processed_number));
Ilya Sherman 2014/07/11 03:43:40 Hmm, this ternary expression is a bit hard to read
+ }
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 +131,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;
}

Powered by Google App Engine
This is Rietveld 408576698