summaryrefslogtreecommitdiffstats
path: root/chrome/browser/autofill/phone_number.cc
diff options
context:
space:
mode:
Diffstat (limited to 'chrome/browser/autofill/phone_number.cc')
-rw-r--r--chrome/browser/autofill/phone_number.cc61
1 files changed, 23 insertions, 38 deletions
diff --git a/chrome/browser/autofill/phone_number.cc b/chrome/browser/autofill/phone_number.cc
index d426396..57d44a1 100644
--- a/chrome/browser/autofill/phone_number.cc
+++ b/chrome/browser/autofill/phone_number.cc
@@ -54,7 +54,7 @@ PhoneNumber& PhoneNumber::operator=(const PhoneNumber& number) {
return *this;
number_ = number.number_;
phone_group_ = number.phone_group_;
- ClearCachedNumbers();
+ cached_parsed_phone_ = number.cached_parsed_phone_;
return *this;
}
@@ -63,20 +63,20 @@ void PhoneNumber::GetMatchingTypes(const string16& text,
string16 stripped_text(text);
StripPunctuation(&stripped_text);
- if (!UpdateCacheIfNeeded())
+ if (!cached_parsed_phone_.IsValidNumber())
return;
- if (IsNumber(stripped_text, cached_local_number_))
+ if (IsNumber(stripped_text, cached_parsed_phone_.GetNumber()))
matching_types->insert(GetNumberType());
- if (stripped_text == cached_city_code_)
+ if (stripped_text == cached_parsed_phone_.GetCityCode())
matching_types->insert(GetCityCodeType());
- if (stripped_text == cached_country_code_)
+ if (stripped_text == cached_parsed_phone_.GetCountryCode())
matching_types->insert(GetCountryCodeType());
- string16 city_and_local(cached_city_code_);
- city_and_local.append(cached_local_number_);
+ string16 city_and_local(cached_parsed_phone_.GetCityCode());
+ city_and_local.append(cached_parsed_phone_.GetNumber());
if (stripped_text == city_and_local)
matching_types->insert(GetCityAndNumberType());
@@ -94,37 +94,38 @@ void PhoneNumber::GetNonEmptyTypes(FieldTypeSet* non_empty_types) const {
non_empty_types->insert(GetWholeNumberType());
- if (!UpdateCacheIfNeeded())
+ if (!cached_parsed_phone_.IsValidNumber())
return;
non_empty_types->insert(GetNumberType());
- if (!cached_city_code_.empty()) {
+ if (!cached_parsed_phone_.GetCityCode().empty()) {
non_empty_types->insert(GetCityCodeType());
non_empty_types->insert(GetCityAndNumberType());
}
- if (!cached_country_code_.empty())
+ if (!cached_parsed_phone_.GetCountryCode().empty())
non_empty_types->insert(GetCountryCodeType());
}
string16 PhoneNumber::GetInfo(AutofillFieldType type) const {
if (type == GetWholeNumberType())
return number_;
- if (!UpdateCacheIfNeeded())
+
+ if (!cached_parsed_phone_.IsValidNumber())
return string16();
if (type == GetNumberType())
- return cached_local_number_;
+ return cached_parsed_phone_.GetNumber();
if (type == GetCityCodeType())
- return cached_city_code_;
+ return cached_parsed_phone_.GetCityCode();
if (type == GetCountryCodeType())
- return cached_country_code_;
+ return cached_parsed_phone_.GetCountryCode();
- string16 city_and_local(cached_city_code_);
- city_and_local.append(cached_local_number_);
+ string16 city_and_local(cached_parsed_phone_.GetCityCode());
+ city_and_local.append(cached_parsed_phone_.GetNumber());
if (type == GetCityAndNumberType())
return city_and_local;
@@ -136,7 +137,6 @@ void PhoneNumber::SetInfo(AutofillFieldType type, const string16& value) {
FieldTypeGroup group = AutofillType(type).group();
if (phone_group_ == AutofillType::NO_GROUP)
phone_group_ = group; // First call on empty phone - set the group.
- ClearCachedNumbers();
if (subgroup == AutofillType::PHONE_NUMBER) {
// Should not be set directly.
NOTREACHED();
@@ -149,6 +149,7 @@ void PhoneNumber::SetInfo(AutofillFieldType type, const string16& value) {
} else if (subgroup == AutofillType::PHONE_CITY_AND_NUMBER ||
subgroup == AutofillType::PHONE_WHOLE_NUMBER) {
number_ = value;
+ cached_parsed_phone_ = autofill_i18n::PhoneObject(number_, locale_);
StripPunctuation(&number_);
} else {
NOTREACHED();
@@ -160,14 +161,14 @@ bool PhoneNumber::NormalizePhone() {
if (number_.empty())
return true;
- ClearCachedNumbers();
- number_ = autofill_i18n::NormalizePhoneNumber(number_, locale_);
+ number_ = cached_parsed_phone_.GetWholeNumber();
return !number_.empty();
}
void PhoneNumber::set_locale(const std::string& locale) {
locale_ = locale;
- ClearCachedNumbers();
+ if (!number_.empty() && cached_parsed_phone_.GetLocale() != locale_)
+ cached_parsed_phone_ = autofill_i18n::PhoneObject(number_, locale_);
}
AutofillFieldType PhoneNumber::GetNumberType() const {
@@ -269,27 +270,11 @@ bool PhoneNumber::IsNumber(const string16& text, const string16& number) const {
}
bool PhoneNumber::IsWholeNumber(const string16& text) const {
- return autofill_i18n::ComparePhones(text, number_, locale_) ==
- autofill_i18n::PHONES_EQUAL;
+ return cached_parsed_phone_.ComparePhones(text) ==
+ autofill_i18n::PHONES_EQUAL;
}
// Static.
void PhoneNumber::StripPunctuation(string16* number) {
RemoveChars(*number, kPhoneNumberSeparators, number);
}
-
-void PhoneNumber::ClearCachedNumbers() const {
- cached_country_code_.clear();
- cached_city_code_.clear();
- cached_local_number_.clear();
-}
-
-bool PhoneNumber::UpdateCacheIfNeeded() const {
- if (cached_local_number_.empty() && !number_.empty()) {
- return autofill_i18n::ParsePhoneNumber(
- number_, locale_, &cached_country_code_, &cached_city_code_,
- &cached_local_number_);
- } else {
- return true;
- }
-}