// 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. #ifndef CHROME_BROWSER_AUTOFILL_PHONE_NUMBER_H_ #define CHROME_BROWSER_AUTOFILL_PHONE_NUMBER_H_ #pragma once #include <vector> #include "base/gtest_prod_util.h" #include "base/string16.h" #include "chrome/browser/autofill/autofill_type.h" #include "chrome/browser/autofill/form_group.h" // A form group that stores phone number information. class PhoneNumber : public FormGroup { public: PhoneNumber(); explicit PhoneNumber(const PhoneNumber& number); virtual ~PhoneNumber(); PhoneNumber& operator=(const PhoneNumber& number); // FormGroup implementation: virtual void GetPossibleFieldTypes(const string16& text, FieldTypeSet* possible_types) const; virtual void GetAvailableFieldTypes(FieldTypeSet* available_types) const; virtual string16 GetInfo(AutofillFieldType type) const; virtual void SetInfo(AutofillFieldType type, const string16& value); // Parses |value| to extract the components of a phone number. |number| // returns the trailing 7 digits, |city_code| returns the next 3 digits, and // |country_code| returns any remaining digits. // Separator characters are stripped before parsing the digits. // Returns true if parsing was successful, false otherwise. static bool ParsePhoneNumber(const string16& value, string16* number, string16* city_code, string16* country_code); // Size and offset of the prefix and suffix portions of phone numbers. static const int kPrefixOffset = 0; static const int kPrefixLength = 3; static const int kSuffixOffset = 3; static const int kSuffixLength = 4; // The following functions should return the field type for each part of the // phone number. Currently, these are either fax or home phone number types. virtual AutofillFieldType GetNumberType() const = 0; virtual AutofillFieldType GetCityCodeType() const = 0; virtual AutofillFieldType GetCountryCodeType() const = 0; virtual AutofillFieldType GetCityAndNumberType() const = 0; virtual AutofillFieldType GetWholeNumberType() const = 0; private: FRIEND_TEST_ALL_PREFIXES(PhoneNumberTest, Matcher); const string16& country_code() const { return country_code_; } const string16& city_code() const { return city_code_; } const string16& number() const { return number_; } const string16& extension() const { return extension_; } string16 CityAndNumber() const { return city_code_ + number_; } // Returns the entire phone number as a string, without punctuation. virtual string16 WholeNumber() const; void set_country_code(const string16& country_code) { country_code_ = country_code; } void set_city_code(const string16& city_code) { city_code_ = city_code; } void set_number(const string16& number); void set_extension(const string16& extension) { extension_ = extension; } void set_whole_number(const string16& whole_number); // The numbers will be digits only (no punctuation), so any call to the IsX() // functions should first call StripPunctuation on the text. bool IsNumber(const string16& text) const; bool IsCityCode(const string16& text) const; bool IsCountryCode(const string16& text) const; bool IsCityAndNumber(const string16& text) const; bool IsWholeNumber(const string16& text) const; // Verifies that |number| is a valid phone number. bool Validate(const string16& number) const; // Removes any punctuation characters from |number|. static void StripPunctuation(string16* number); // The pieces of the phone number. string16 country_code_; string16 city_code_; // city or area code. string16 number_; string16 extension_; }; #endif // CHROME_BROWSER_AUTOFILL_PHONE_NUMBER_H_