Home | History | Annotate | Download | only in browser
      1 // Copyright 2013 The Chromium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 #ifndef COMPONENTS_AUTOFILL_CORE_BROWSER_PHONE_NUMBER_H_
      6 #define COMPONENTS_AUTOFILL_CORE_BROWSER_PHONE_NUMBER_H_
      7 
      8 #include <string>
      9 #include <vector>
     10 
     11 #include "base/gtest_prod_util.h"
     12 #include "base/strings/string16.h"
     13 #include "components/autofill/core/browser/form_group.h"
     14 #include "components/autofill/core/browser/phone_number_i18n.h"
     15 
     16 namespace autofill {
     17 
     18 class AutofillProfile;
     19 
     20 // A form group that stores phone number information.
     21 class PhoneNumber : public FormGroup {
     22  public:
     23   explicit PhoneNumber(AutofillProfile* profile);
     24   PhoneNumber(const PhoneNumber& number);
     25   virtual ~PhoneNumber();
     26 
     27   PhoneNumber& operator=(const PhoneNumber& number);
     28 
     29   void set_profile(AutofillProfile* profile) { profile_ = profile; }
     30 
     31   // FormGroup implementation:
     32   virtual void GetMatchingTypes(
     33       const base::string16& text,
     34       const std::string& app_locale,
     35       ServerFieldTypeSet* matching_types) const OVERRIDE;
     36   virtual base::string16 GetRawInfo(ServerFieldType type) const OVERRIDE;
     37   virtual void SetRawInfo(ServerFieldType type,
     38                           const base::string16& value) OVERRIDE;
     39   virtual base::string16 GetInfo(const AutofillType& type,
     40                            const std::string& app_locale) const OVERRIDE;
     41   virtual bool SetInfo(const AutofillType& type,
     42                        const base::string16& value,
     43                        const std::string& app_locale) OVERRIDE;
     44 
     45   // Size and offset of the prefix and suffix portions of phone numbers.
     46   static const size_t kPrefixOffset = 0;
     47   static const size_t kPrefixLength = 3;
     48   static const size_t kSuffixOffset = 3;
     49   static const size_t kSuffixLength = 4;
     50 
     51   // The class used to combine home phone parts into a whole number.
     52   class PhoneCombineHelper {
     53    public:
     54     PhoneCombineHelper();
     55     ~PhoneCombineHelper();
     56 
     57     // If |type| is a phone field type, saves the |value| accordingly and
     58     // returns true.  For all other field types returs false.
     59     bool SetInfo(const AutofillType& type, const base::string16& value);
     60 
     61     // Parses the number built up from pieces stored via SetInfo() according to
     62     // the specified |profile|'s country code, falling back to the given
     63     // |app_locale| if the |profile| has no associated country code.  Returns
     64     // true if parsing was successful, false otherwise.
     65     bool ParseNumber(const AutofillProfile& profile,
     66                      const std::string& app_locale,
     67                      base::string16* value);
     68 
     69     // Returns true if both |phone_| and |whole_number_| are empty.
     70     bool IsEmpty() const;
     71 
     72    private:
     73     base::string16 country_;
     74     base::string16 city_;
     75     base::string16 phone_;
     76     base::string16 whole_number_;
     77   };
     78 
     79  private:
     80   // FormGroup:
     81   virtual void GetSupportedTypes(
     82       ServerFieldTypeSet* supported_types) const OVERRIDE;
     83 
     84   // Updates the cached parsed number if the profile's region has changed
     85   // since the last time the cache was updated.
     86   void UpdateCacheIfNeeded(const std::string& app_locale) const;
     87 
     88   // The phone number.
     89   base::string16 number_;
     90   // Profile which stores the region used as hint when normalizing the number.
     91   const AutofillProfile* profile_;  // WEAK
     92 
     93   // Cached number.
     94   mutable i18n::PhoneObject cached_parsed_phone_;
     95 };
     96 
     97 }  // namespace autofill
     98 
     99 #endif  // COMPONENTS_AUTOFILL_CORE_BROWSER_PHONE_NUMBER_H_
    100