Home | History | Annotate | Download | only in autofill
      1 // Copyright (c) 2011 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 CHROME_BROWSER_AUTOFILL_AUTOFILL_TYPE_H_
      6 #define CHROME_BROWSER_AUTOFILL_AUTOFILL_TYPE_H_
      7 #pragma once
      8 
      9 #include <map>
     10 #include <set>
     11 #include <string>
     12 
     13 #include "base/string16.h"
     14 #include "chrome/browser/autofill/field_types.h"
     15 
     16 // The high-level description of Autofill types, used to categorize form fields
     17 // and for associating form fields with form values in the Web Database.
     18 class AutofillType {
     19  public:
     20   enum FieldTypeGroup {
     21     NO_GROUP,
     22     NAME,
     23     EMAIL,
     24     COMPANY,
     25     ADDRESS_HOME,
     26     ADDRESS_BILLING,
     27     PHONE_HOME,
     28     PHONE_FAX,
     29     CREDIT_CARD,
     30   };
     31 
     32   enum FieldTypeSubGroup {
     33     NO_SUBGROUP,
     34     // Address subgroups.
     35     ADDRESS_LINE1,
     36     ADDRESS_LINE2,
     37     ADDRESS_APT_NUM,
     38     ADDRESS_CITY,
     39     ADDRESS_STATE,
     40     ADDRESS_ZIP,
     41     ADDRESS_COUNTRY,
     42 
     43     // Phone subgroups.
     44     PHONE_NUMBER,
     45     PHONE_CITY_CODE,
     46     PHONE_COUNTRY_CODE,
     47     PHONE_CITY_AND_NUMBER,
     48     PHONE_WHOLE_NUMBER
     49   };
     50 
     51   struct AutofillTypeDefinition {
     52     FieldTypeGroup group;
     53     FieldTypeSubGroup subgroup;
     54   };
     55 
     56   explicit AutofillType(AutofillFieldType field_type);
     57   AutofillType(const AutofillType& autofill_type);
     58   AutofillType& operator=(const AutofillType& autofill_type);
     59 
     60   AutofillFieldType field_type() const;
     61   FieldTypeGroup group() const;
     62   FieldTypeSubGroup subgroup() const;
     63 
     64   // Maps |field_type| to a field type that can be directly stored in a profile
     65   // (in the sense that it makes sense to call |AutofillProfile::SetInfo()| with
     66   // the returned field type as the first parameter).
     67   static AutofillFieldType GetEquivalentFieldType(AutofillFieldType field_type);
     68 
     69   // Utilities for serializing and deserializing an |AutofillFieldType|.
     70   static std::string FieldTypeToString(AutofillFieldType field_type);
     71   static AutofillFieldType StringToFieldType(const std::string& str);
     72 
     73  private:
     74   AutofillFieldType field_type_;
     75 };
     76 
     77 typedef AutofillType::FieldTypeGroup FieldTypeGroup;
     78 typedef AutofillType::FieldTypeSubGroup FieldTypeSubGroup;
     79 typedef std::set<AutofillFieldType> FieldTypeSet;
     80 typedef std::map<string16, AutofillFieldType> FieldTypeMap;
     81 
     82 #endif  // CHROME_BROWSER_AUTOFILL_AUTOFILL_TYPE_H_
     83