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

Unified Diff: components/autofill/browser/phone_number.cc

Issue 17392006: In components/autofill, move browser/ to core/browser/ (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Rebase to fix conflicts Created 7 years, 6 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
« no previous file with comments | « components/autofill/browser/phone_number.h ('k') | components/autofill/browser/phone_number_i18n.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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
« no previous file with comments | « components/autofill/browser/phone_number.h ('k') | components/autofill/browser/phone_number_i18n.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698