Index: components/autofill/browser/phone_number.cc |
diff --git a/components/autofill/browser/phone_number.cc b/components/autofill/browser/phone_number.cc |
deleted file mode 100644 |
index 41f6364b02e312ad0d4cd429171de233f366367e..0000000000000000000000000000000000000000 |
--- a/components/autofill/browser/phone_number.cc |
+++ /dev/null |
@@ -1,246 +0,0 @@ |
-// Copyright (c) 2011 The Chromium Authors. All rights reserved. |
-// Use of this source code is governed by a BSD-style license that can be |
-// found in the LICENSE file. |
- |
-#include "components/autofill/browser/phone_number.h" |
- |
-#include "base/basictypes.h" |
-#include "base/strings/string_number_conversions.h" |
-#include "base/strings/string_util.h" |
-#include "base/strings/utf_string_conversions.h" |
-#include "components/autofill/browser/autofill_country.h" |
-#include "components/autofill/browser/autofill_profile.h" |
-#include "components/autofill/browser/autofill_type.h" |
-#include "components/autofill/browser/field_types.h" |
-#include "components/autofill/browser/phone_number_i18n.h" |
- |
-namespace autofill { |
-namespace { |
- |
-const char16 kPhoneNumberSeparators[] = { ' ', '.', '(', ')', '-', 0 }; |
- |
-// The number of digits in a phone number. |
-const size_t kPhoneNumberLength = 7; |
- |
-// The number of digits in an area code. |
-const size_t kPhoneCityCodeLength = 3; |
- |
-void StripPunctuation(base::string16* number) { |
- RemoveChars(*number, kPhoneNumberSeparators, number); |
-} |
- |
-// Returns the region code for this phone number, which is an ISO 3166 2-letter |
-// country code. The returned value is based on the |profile|; if the |profile| |
-// does not have a country code associated with it, falls back to the country |
-// code corresponding to the |app_locale|. |
-std::string GetRegion(const AutofillProfile& profile, |
- const std::string& app_locale) { |
- base::string16 country_code = profile.GetRawInfo(ADDRESS_HOME_COUNTRY); |
- if (!country_code.empty()) |
- return UTF16ToASCII(country_code); |
- |
- return AutofillCountry::CountryCodeForLocale(app_locale); |
-} |
- |
-} // namespace |
- |
-PhoneNumber::PhoneNumber(AutofillProfile* profile) |
- : profile_(profile) { |
-} |
- |
-PhoneNumber::PhoneNumber(const PhoneNumber& number) |
- : profile_(NULL) { |
- *this = number; |
-} |
- |
-PhoneNumber::~PhoneNumber() {} |
- |
-PhoneNumber& PhoneNumber::operator=(const PhoneNumber& number) { |
- if (this == &number) |
- return *this; |
- |
- number_ = number.number_; |
- profile_ = number.profile_; |
- cached_parsed_phone_ = number.cached_parsed_phone_; |
- return *this; |
-} |
- |
-void PhoneNumber::GetSupportedTypes(FieldTypeSet* supported_types) const { |
- supported_types->insert(PHONE_HOME_WHOLE_NUMBER); |
- supported_types->insert(PHONE_HOME_NUMBER); |
- supported_types->insert(PHONE_HOME_CITY_CODE); |
- supported_types->insert(PHONE_HOME_CITY_AND_NUMBER); |
- supported_types->insert(PHONE_HOME_COUNTRY_CODE); |
-} |
- |
-base::string16 PhoneNumber::GetRawInfo(AutofillFieldType type) const { |
- type = AutofillType::GetEquivalentFieldType(type); |
- if (type == PHONE_HOME_WHOLE_NUMBER) |
- return number_; |
- |
- // Only the whole number is available as raw data. All of the other types are |
- // parsed from this raw info, and parsing requires knowledge of the phone |
- // number's region, which is only available via GetInfo(). |
- return base::string16(); |
-} |
- |
-void PhoneNumber::SetRawInfo(AutofillFieldType type, |
- const base::string16& value) { |
- type = AutofillType::GetEquivalentFieldType(type); |
- if (type != PHONE_HOME_CITY_AND_NUMBER && |
- type != PHONE_HOME_WHOLE_NUMBER) { |
- // Only full phone numbers should be set directly. The remaining field |
- // field types are read-only. |
- return; |
- } |
- |
- number_ = value; |
- |
- // Invalidate the cached number. |
- cached_parsed_phone_ = i18n::PhoneObject(); |
-} |
- |
-// Normalize phones if |type| is a whole number: |
-// (650)2345678 -> 6502345678 |
-// 1-800-FLOWERS -> 18003569377 |
-// If the phone cannot be normalized, returns the stored value verbatim. |
-base::string16 PhoneNumber::GetInfo(AutofillFieldType type, |
- const std::string& app_locale) const { |
- type = AutofillType::GetEquivalentFieldType(type); |
- UpdateCacheIfNeeded(app_locale); |
- |
- // Queries for whole numbers will return the non-normalized number if |
- // normalization for the number fails. All other field types require |
- // normalization. |
- if (type != PHONE_HOME_WHOLE_NUMBER && !cached_parsed_phone_.IsValidNumber()) |
- return base::string16(); |
- |
- switch (type) { |
- case PHONE_HOME_WHOLE_NUMBER: |
- return cached_parsed_phone_.GetWholeNumber(); |
- |
- case PHONE_HOME_NUMBER: |
- return cached_parsed_phone_.number(); |
- |
- case PHONE_HOME_CITY_CODE: |
- return cached_parsed_phone_.city_code(); |
- |
- case PHONE_HOME_COUNTRY_CODE: |
- return cached_parsed_phone_.country_code(); |
- |
- case PHONE_HOME_CITY_AND_NUMBER: |
- return |
- cached_parsed_phone_.city_code() + cached_parsed_phone_.number(); |
- |
- default: |
- NOTREACHED(); |
- return base::string16(); |
- } |
-} |
- |
-bool PhoneNumber::SetInfo(AutofillFieldType type, |
- const base::string16& value, |
- const std::string& app_locale) { |
- type = AutofillType::GetEquivalentFieldType(type); |
- SetRawInfo(type, value); |
- |
- if (number_.empty()) |
- return true; |
- |
- // Store a formatted (i.e., pretty printed) version of the number. |
- UpdateCacheIfNeeded(app_locale); |
- number_ = cached_parsed_phone_.GetFormattedNumber(); |
- return !number_.empty(); |
-} |
- |
-void PhoneNumber::GetMatchingTypes(const base::string16& text, |
- const std::string& app_locale, |
- FieldTypeSet* matching_types) const { |
- base::string16 stripped_text = text; |
- StripPunctuation(&stripped_text); |
- FormGroup::GetMatchingTypes(stripped_text, app_locale, matching_types); |
- |
- // For US numbers, also compare to the three-digit prefix and the four-digit |
- // suffix, since web sites often split numbers into these two fields. |
- base::string16 number = GetInfo(PHONE_HOME_NUMBER, app_locale); |
- if (GetRegion(*profile_, app_locale) == "US" && |
- number.size() == (kPrefixLength + kSuffixLength)) { |
- base::string16 prefix = number.substr(kPrefixOffset, kPrefixLength); |
- base::string16 suffix = number.substr(kSuffixOffset, kSuffixLength); |
- if (text == prefix || text == suffix) |
- matching_types->insert(PHONE_HOME_NUMBER); |
- } |
- |
- base::string16 whole_number = GetInfo(PHONE_HOME_WHOLE_NUMBER, app_locale); |
- if (!whole_number.empty()) { |
- base::string16 normalized_number = |
- i18n::NormalizePhoneNumber(text, GetRegion(*profile_, app_locale)); |
- if (normalized_number == whole_number) |
- matching_types->insert(PHONE_HOME_WHOLE_NUMBER); |
- } |
-} |
- |
-void PhoneNumber::UpdateCacheIfNeeded(const std::string& app_locale) const { |
- std::string region = GetRegion(*profile_, app_locale); |
- if (!number_.empty() && cached_parsed_phone_.region() != region) |
- cached_parsed_phone_ = i18n::PhoneObject(number_, region); |
-} |
- |
-PhoneNumber::PhoneCombineHelper::PhoneCombineHelper() { |
-} |
- |
-PhoneNumber::PhoneCombineHelper::~PhoneCombineHelper() { |
-} |
- |
-bool PhoneNumber::PhoneCombineHelper::SetInfo(AutofillFieldType field_type, |
- const base::string16& value) { |
- field_type = AutofillType::GetEquivalentFieldType(field_type); |
- if (field_type == PHONE_HOME_COUNTRY_CODE) { |
- country_ = value; |
- return true; |
- } |
- |
- if (field_type == PHONE_HOME_CITY_CODE) { |
- city_ = value; |
- return true; |
- } |
- |
- if (field_type == PHONE_HOME_CITY_AND_NUMBER) { |
- phone_ = value; |
- return true; |
- } |
- |
- if (field_type == PHONE_HOME_WHOLE_NUMBER) { |
- whole_number_ = value; |
- return true; |
- } |
- |
- if (field_type == PHONE_HOME_NUMBER) { |
- phone_.append(value); |
- return true; |
- } |
- |
- return false; |
-} |
- |
-bool PhoneNumber::PhoneCombineHelper::ParseNumber( |
- const AutofillProfile& profile, |
- const std::string& app_locale, |
- base::string16* value) { |
- if (IsEmpty()) |
- return false; |
- |
- if (!whole_number_.empty()) { |
- *value = whole_number_; |
- return true; |
- } |
- |
- return i18n::ConstructPhoneNumber( |
- country_, city_, phone_, GetRegion(profile, app_locale), value); |
-} |
- |
-bool PhoneNumber::PhoneCombineHelper::IsEmpty() const { |
- return phone_.empty() && whole_number_.empty(); |
-} |
- |
-} // namespace autofill |