Remove FieldTypeSubGroups from the AutofillType class.

BUG=none
TEST=none

Review URL: http://codereview.chromium.org/8169009

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@104583 0039d316-1c4b-4281-b951-d872f2087c98
diff --git a/chrome/browser/autofill/address.cc b/chrome/browser/autofill/address.cc
index 6b2d345..576a314 100644
--- a/chrome/browser/autofill/address.cc
+++ b/chrome/browser/autofill/address.cc
@@ -17,17 +17,6 @@
 
 const char16 kAddressSplitChars[] = {'-', ',', '#', '.', ' ', 0};
 
-const AutofillType::FieldTypeSubGroup kAutofillAddressTypes[] = {
-  AutofillType::ADDRESS_LINE1,
-  AutofillType::ADDRESS_LINE2,
-  AutofillType::ADDRESS_CITY,
-  AutofillType::ADDRESS_STATE,
-  AutofillType::ADDRESS_ZIP,
-  AutofillType::ADDRESS_COUNTRY,
-};
-
-const int kAutofillAddressLength = arraysize(kAutofillAddressTypes);
-
 // Returns the country code corresponding to |country|, which should be a
 // localized country name.
 std::string ToCountryCode(const string16& country) {
@@ -90,18 +79,18 @@
 }
 
 void Address::SetInfo(AutofillFieldType type, const string16& value) {
-  FieldTypeSubGroup subgroup = AutofillType(type).subgroup();
-  if (subgroup == AutofillType::ADDRESS_LINE1)
+  type = AutofillType::GetEquivalentFieldType(type);
+  if (type == ADDRESS_HOME_LINE1)
     line1_ = value;
-  else if (subgroup == AutofillType::ADDRESS_LINE2)
+  else if (type == ADDRESS_HOME_LINE2)
     line2_ = value;
-  else if (subgroup == AutofillType::ADDRESS_CITY)
+  else if (type == ADDRESS_HOME_CITY)
     city_ = value;
-  else if (subgroup == AutofillType::ADDRESS_STATE)
+  else if (type == ADDRESS_HOME_STATE)
     state_ = value;
-  else if (subgroup == AutofillType::ADDRESS_COUNTRY)
+  else if (type == ADDRESS_HOME_COUNTRY)
     country_code_ = ToCountryCode(value);
-  else if (subgroup == AutofillType::ADDRESS_ZIP)
+  else if (type == ADDRESS_HOME_ZIP)
     zip_code_ = value;
   else
     NOTREACHED();
diff --git a/chrome/browser/autofill/autofill_manager.cc b/chrome/browser/autofill/autofill_manager.cc
index 478d035..3f98f44 100644
--- a/chrome/browser/autofill/autofill_manager.cc
+++ b/chrome/browser/autofill/autofill_manager.cc
@@ -1090,7 +1090,7 @@
   DCHECK_NE(AutofillType::CREDIT_CARD, AutofillType(type).group());
   DCHECK(field);
 
-  if (AutofillType(type).subgroup() == AutofillType::PHONE_NUMBER) {
+  if (type == PHONE_HOME_NUMBER) {
     FillPhoneNumberField(profile, cached_field, variant, field);
   } else {
     if (field->form_control_type == ASCIIToUTF16("select-one")) {
diff --git a/chrome/browser/autofill/autofill_metrics.cc b/chrome/browser/autofill/autofill_metrics.cc
index af13ca4..9e24061 100644
--- a/chrome/browser/autofill/autofill_metrics.cc
+++ b/chrome/browser/autofill/autofill_metrics.cc
@@ -120,7 +120,7 @@
       group = EMAIL;
       break;
 
-    case AutofillType::PHONE_HOME:
+    case AutofillType::PHONE:
       group = PHONE;
       break;
 
diff --git a/chrome/browser/autofill/autofill_profile.cc b/chrome/browser/autofill/autofill_profile.cc
index 5f9ac5e..d093d05 100644
--- a/chrome/browser/autofill/autofill_profile.cc
+++ b/chrome/browser/autofill/autofill_profile.cc
@@ -306,7 +306,7 @@
     case AutofillType::EMAIL:
       CopyValuesToItems(type, values, &email_, EmailInfo());
       break;
-    case AutofillType::PHONE_HOME:
+    case AutofillType::PHONE:
       CopyValuesToItems(type,
                         values,
                         &home_number_,
@@ -345,7 +345,7 @@
     case AutofillType::EMAIL:
       CopyItemsToValues(type, email_, canonicalize, values);
       break;
-    case AutofillType::PHONE_HOME:
+    case AutofillType::PHONE:
       CopyItemsToValues(type, home_number_, canonicalize, values);
       break;
     default:
@@ -359,7 +359,7 @@
   AutofillType::FieldTypeGroup group = AutofillType(type).group();
   return group == AutofillType::NAME ||
          group == AutofillType::EMAIL ||
-         group == AutofillType::PHONE_HOME;
+         group == AutofillType::PHONE;
 }
 
 const string16 AutofillProfile::Label() const {
@@ -535,7 +535,7 @@
       // name saved, but |profile| lacks one, |profile| could still be a subset
       // of |this|.
       continue;
-    } else if (AutofillType(*iter).group() == AutofillType::PHONE_HOME) {
+    } else if (AutofillType(*iter).group() == AutofillType::PHONE) {
       // Phone numbers should be canonicalized prior to being compared.
       if (*iter != PHONE_HOME_WHOLE_NUMBER) {
         continue;
@@ -578,7 +578,7 @@
       for (std::vector<string16>::iterator value_iter = new_values.begin();
            value_iter != new_values.end(); ++value_iter) {
         // Don't add duplicates.
-        if (group == AutofillType::PHONE_HOME) {
+        if (group == AutofillType::PHONE) {
           AddPhoneIfUnique(*value_iter, &existing_values);
         } else {
           std::vector<string16>::const_iterator existing_iter = std::find_if(
@@ -739,7 +739,7 @@
     case AutofillType::COMPANY:
       form_group = &company_;
       break;
-    case AutofillType::PHONE_HOME:
+    case AutofillType::PHONE:
       form_group = &home_number_[0];
       break;
     case AutofillType::ADDRESS_HOME:
diff --git a/chrome/browser/autofill/autofill_type.cc b/chrome/browser/autofill/autofill_type.cc
index 8aefd1c..1efe6a9 100644
--- a/chrome/browser/autofill/autofill_type.cc
+++ b/chrome/browser/autofill/autofill_type.cc
@@ -8,128 +8,6 @@
 
 #include "base/logging.h"
 
-namespace {
-
-AutofillType::AutofillTypeDefinition kAutofillTypeDefinitions[] = {
-  // NO_SERVER_DATA
-  { AutofillType::NO_GROUP, AutofillType::NO_SUBGROUP },
-  // UNKNOWN_TYPE
-  { AutofillType::NO_GROUP, AutofillType::NO_SUBGROUP },
-  // EMPTY_TYPE
-  { AutofillType::NO_GROUP, AutofillType::NO_SUBGROUP },
-
-  // NAME_FIRST
-  { AutofillType::NAME, AutofillType::NO_SUBGROUP },
-  // NAME_MIDDLE
-  { AutofillType::NAME, AutofillType::NO_SUBGROUP },
-  // NAME_LAST
-  { AutofillType::NAME, AutofillType::NO_SUBGROUP },
-  // NAME_MIDDLE_INITIAL
-  { AutofillType::NAME, AutofillType::NO_SUBGROUP },
-  // NAME_FULL
-  { AutofillType::NAME, AutofillType::NO_SUBGROUP },
-  // NAME_SUFFIX
-  { AutofillType::NAME, AutofillType::NO_SUBGROUP },
-
-  // EMAIL_ADDRESS
-  { AutofillType::EMAIL, AutofillType::NO_SUBGROUP },
-
-  // PHONE_HOME_NUMBER
-  { AutofillType::PHONE_HOME, AutofillType::PHONE_NUMBER },
-  // PHONE_HOME_CITY_CODE
-  { AutofillType::PHONE_HOME, AutofillType::PHONE_CITY_CODE },
-  // PHONE_HOME_COUNTRY_CODE
-  { AutofillType::PHONE_HOME, AutofillType::PHONE_COUNTRY_CODE },
-  // PHONE_HOME_CITY_AND_NUMBER
-  { AutofillType::PHONE_HOME, AutofillType::PHONE_CITY_AND_NUMBER },
-  // PHONE_HOME_WHOLE_NUMBER
-  { AutofillType::PHONE_HOME, AutofillType::PHONE_WHOLE_NUMBER },
-
-  // Work phone numbers (values [15,19]) are deprecated.
-  { AutofillType::NO_GROUP, AutofillType::NO_SUBGROUP },
-  { AutofillType::NO_GROUP, AutofillType::NO_SUBGROUP },
-  { AutofillType::NO_GROUP, AutofillType::NO_SUBGROUP },
-  { AutofillType::NO_GROUP, AutofillType::NO_SUBGROUP },
-  { AutofillType::NO_GROUP, AutofillType::NO_SUBGROUP },
-
-  // Fax numbers (values [20,24]) are deprecated.
-  { AutofillType::NO_GROUP, AutofillType::NO_SUBGROUP },
-  { AutofillType::NO_GROUP, AutofillType::NO_SUBGROUP },
-  { AutofillType::NO_GROUP, AutofillType::NO_SUBGROUP },
-  { AutofillType::NO_GROUP, AutofillType::NO_SUBGROUP },
-  { AutofillType::NO_GROUP, AutofillType::NO_SUBGROUP },
-
-  // Cell phone numbers (values [25, 29]) are deprecated.
-  { AutofillType::NO_GROUP, AutofillType::NO_SUBGROUP },
-  { AutofillType::NO_GROUP, AutofillType::NO_SUBGROUP },
-  { AutofillType::NO_GROUP, AutofillType::NO_SUBGROUP },
-  { AutofillType::NO_GROUP, AutofillType::NO_SUBGROUP },
-  { AutofillType::NO_GROUP, AutofillType::NO_SUBGROUP },
-
-  // ADDRESS_HOME_LINE1
-  { AutofillType::ADDRESS_HOME, AutofillType::ADDRESS_LINE1 },
-  // ADDRESS_HOME_LINE2
-  { AutofillType::ADDRESS_HOME, AutofillType::ADDRESS_LINE2 },
-  // ADDRESS_HOME_APT_NUM
-  { AutofillType::ADDRESS_HOME, AutofillType::ADDRESS_APT_NUM },
-  // ADDRESS_HOME_CITY
-  { AutofillType::ADDRESS_HOME, AutofillType::ADDRESS_CITY },
-  // ADDRESS_HOME_STATE
-  { AutofillType::ADDRESS_HOME, AutofillType::ADDRESS_STATE },
-  // ADDRESS_HOME_ZIP
-  { AutofillType::ADDRESS_HOME, AutofillType::ADDRESS_ZIP },
-  // ADDRESS_HOME_COUNTRY
-  { AutofillType::ADDRESS_HOME, AutofillType::ADDRESS_COUNTRY },
-
-  // ADDRESS_BILLING_LINE1
-  { AutofillType::ADDRESS_BILLING, AutofillType::ADDRESS_LINE1 },
-  // ADDRESS_BILLING_LINE2
-  { AutofillType::ADDRESS_BILLING, AutofillType::ADDRESS_LINE2 },
-  // ADDRESS_BILLING_APT_NUM
-  { AutofillType::ADDRESS_BILLING, AutofillType::ADDRESS_APT_NUM },
-  // ADDRESS_BILLING_CITY
-  { AutofillType::ADDRESS_BILLING, AutofillType::ADDRESS_CITY },
-  // ADDRESS_BILLING_STATE
-  { AutofillType::ADDRESS_BILLING, AutofillType::ADDRESS_STATE },
-  // ADDRESS_BILLING_ZIP
-  { AutofillType::ADDRESS_BILLING, AutofillType::ADDRESS_ZIP },
-  // ADDRESS_BILLING_COUNTRY
-  { AutofillType::ADDRESS_BILLING, AutofillType::ADDRESS_COUNTRY },
-
-  // ADDRESS_SHIPPING values [44,50] are deprecated.
-  { AutofillType::NO_GROUP, AutofillType::NO_SUBGROUP },
-  { AutofillType::NO_GROUP, AutofillType::NO_SUBGROUP },
-  { AutofillType::NO_GROUP, AutofillType::NO_SUBGROUP },
-  { AutofillType::NO_GROUP, AutofillType::NO_SUBGROUP },
-  { AutofillType::NO_GROUP, AutofillType::NO_SUBGROUP },
-  { AutofillType::NO_GROUP, AutofillType::NO_SUBGROUP },
-  { AutofillType::NO_GROUP, AutofillType::NO_SUBGROUP },
-
-  // CREDIT_CARD_NAME
-  { AutofillType::CREDIT_CARD, AutofillType::NO_SUBGROUP },
-  // CREDIT_CARD_NUMBER
-  { AutofillType::CREDIT_CARD, AutofillType::NO_SUBGROUP },
-  // CREDIT_CARD_EXP_MONTH
-  { AutofillType::CREDIT_CARD, AutofillType::NO_SUBGROUP },
-  // CREDIT_CARD_EXP_2_DIGIT_YEAR
-  { AutofillType::CREDIT_CARD, AutofillType::NO_SUBGROUP },
-  // CREDIT_CARD_EXP_4_DIGIT_YEAR
-  { AutofillType::CREDIT_CARD, AutofillType::NO_SUBGROUP },
-  // CREDIT_CARD_EXP_DATE_2_DIGIT_YEAR
-  { AutofillType::CREDIT_CARD, AutofillType::NO_SUBGROUP },
-  // CREDIT_CARD_EXP_DATE_4_DIGIT_YEAR
-  { AutofillType::CREDIT_CARD, AutofillType::NO_SUBGROUP },
-  // CREDIT_CARD_TYPE
-  { AutofillType::CREDIT_CARD, AutofillType::NO_SUBGROUP },
-  // CREDIT_CARD_VERIFICATION_CODE
-  { AutofillType::CREDIT_CARD, AutofillType::NO_SUBGROUP },
-
-  // COMPANY_NAME
-  { AutofillType::COMPANY, AutofillType::NO_SUBGROUP },
-};
-
-}  // namespace
-
 AutofillType::AutofillType(AutofillFieldType field_type) {
   if ((field_type < NO_SERVER_DATA || field_type >= MAX_VALID_FIELD_TYPE) ||
       (field_type >= 15 && field_type <= 19) ||
@@ -155,11 +33,60 @@
 }
 
 FieldTypeGroup AutofillType::group() const {
-  return kAutofillTypeDefinitions[field_type_].group;
-}
+  switch (field_type_) {
+    case NAME_FIRST:
+    case NAME_MIDDLE:
+    case NAME_LAST:
+    case NAME_MIDDLE_INITIAL:
+    case NAME_FULL:
+    case NAME_SUFFIX:
+      return NAME;
 
-FieldTypeSubGroup AutofillType::subgroup() const {
-  return kAutofillTypeDefinitions[field_type_].subgroup;
+    case EMAIL_ADDRESS:
+      return EMAIL;
+
+    case PHONE_HOME_NUMBER:
+    case PHONE_HOME_CITY_CODE:
+    case PHONE_HOME_COUNTRY_CODE:
+    case PHONE_HOME_CITY_AND_NUMBER:
+    case PHONE_HOME_WHOLE_NUMBER:
+      return PHONE;
+
+    case ADDRESS_HOME_LINE1:
+    case ADDRESS_HOME_LINE2:
+    case ADDRESS_HOME_APT_NUM:
+    case ADDRESS_HOME_CITY:
+    case ADDRESS_HOME_STATE:
+    case ADDRESS_HOME_ZIP:
+    case ADDRESS_HOME_COUNTRY:
+      return ADDRESS_HOME;
+
+    case ADDRESS_BILLING_LINE1:
+    case ADDRESS_BILLING_LINE2:
+    case ADDRESS_BILLING_APT_NUM:
+    case ADDRESS_BILLING_CITY:
+    case ADDRESS_BILLING_STATE:
+    case ADDRESS_BILLING_ZIP:
+    case ADDRESS_BILLING_COUNTRY:
+      return ADDRESS_BILLING;
+
+    case CREDIT_CARD_NAME:
+    case CREDIT_CARD_NUMBER:
+    case CREDIT_CARD_EXP_MONTH:
+    case CREDIT_CARD_EXP_2_DIGIT_YEAR:
+    case CREDIT_CARD_EXP_4_DIGIT_YEAR:
+    case CREDIT_CARD_EXP_DATE_2_DIGIT_YEAR:
+    case CREDIT_CARD_EXP_DATE_4_DIGIT_YEAR:
+    case CREDIT_CARD_TYPE:
+    case CREDIT_CARD_VERIFICATION_CODE:
+      return CREDIT_CARD;
+
+    case COMPANY_NAME:
+      return COMPANY;
+
+    default:
+      return NO_GROUP;
+  }
 }
 
 // static
diff --git a/chrome/browser/autofill/autofill_type.h b/chrome/browser/autofill/autofill_type.h
index b543aca2a..263b5099 100644
--- a/chrome/browser/autofill/autofill_type.h
+++ b/chrome/browser/autofill/autofill_type.h
@@ -24,41 +24,16 @@
     COMPANY,
     ADDRESS_HOME,
     ADDRESS_BILLING,
-    PHONE_HOME,
+    PHONE,
     CREDIT_CARD,
   };
 
-  enum FieldTypeSubGroup {
-    NO_SUBGROUP,
-    // Address subgroups.
-    ADDRESS_LINE1,
-    ADDRESS_LINE2,
-    ADDRESS_APT_NUM,
-    ADDRESS_CITY,
-    ADDRESS_STATE,
-    ADDRESS_ZIP,
-    ADDRESS_COUNTRY,
-
-    // Phone subgroups.
-    PHONE_NUMBER,
-    PHONE_CITY_CODE,
-    PHONE_COUNTRY_CODE,
-    PHONE_CITY_AND_NUMBER,
-    PHONE_WHOLE_NUMBER
-  };
-
-  struct AutofillTypeDefinition {
-    FieldTypeGroup group;
-    FieldTypeSubGroup subgroup;
-  };
-
   explicit AutofillType(AutofillFieldType field_type);
   AutofillType(const AutofillType& autofill_type);
   AutofillType& operator=(const AutofillType& autofill_type);
 
   AutofillFieldType field_type() const;
   FieldTypeGroup group() const;
-  FieldTypeSubGroup subgroup() const;
 
   // Maps |field_type| to a field type that can be directly stored in a profile
   // (in the sense that it makes sense to call |AutofillProfile::SetInfo()| with
@@ -74,7 +49,6 @@
 };
 
 typedef AutofillType::FieldTypeGroup FieldTypeGroup;
-typedef AutofillType::FieldTypeSubGroup FieldTypeSubGroup;
 typedef std::set<AutofillFieldType> FieldTypeSet;
 typedef std::map<string16, AutofillFieldType> FieldTypeMap;
 
diff --git a/chrome/browser/autofill/autofill_type_unittest.cc b/chrome/browser/autofill/autofill_type_unittest.cc
index 4f5d401..f680cb05 100644
--- a/chrome/browser/autofill/autofill_type_unittest.cc
+++ b/chrome/browser/autofill/autofill_type_unittest.cc
@@ -7,54 +7,46 @@
 
 namespace {
 
-TEST(AutofillTypeTest, Basic) {
+TEST(AutofillTypeTest, AutofillTypes) {
   // No server data.
   AutofillType none(NO_SERVER_DATA);
   EXPECT_EQ(NO_SERVER_DATA, none.field_type());
   EXPECT_EQ(AutofillType::NO_GROUP, none.group());
-  EXPECT_EQ(AutofillType::NO_SUBGROUP, none.subgroup());
 
   // Unknown type.
   AutofillType unknown(UNKNOWN_TYPE);
   EXPECT_EQ(UNKNOWN_TYPE, unknown.field_type());
   EXPECT_EQ(AutofillType::NO_GROUP, unknown.group());
-  EXPECT_EQ(AutofillType::NO_SUBGROUP, unknown.subgroup());
 
   // Type with group but no subgroup.
   AutofillType first(NAME_FIRST);
   EXPECT_EQ(NAME_FIRST, first.field_type());
   EXPECT_EQ(AutofillType::NAME, first.group());
-  EXPECT_EQ(AutofillType::NO_SUBGROUP, first.subgroup());
 
   // Type with group and subgroup.
   AutofillType phone(PHONE_HOME_NUMBER);
   EXPECT_EQ(PHONE_HOME_NUMBER, phone.field_type());
-  EXPECT_EQ(AutofillType::PHONE_HOME, phone.group());
-  EXPECT_EQ(AutofillType::PHONE_NUMBER, phone.subgroup());
+  EXPECT_EQ(AutofillType::PHONE, phone.group());
 
   // Last value, to check any offset errors.
   AutofillType last(COMPANY_NAME);
   EXPECT_EQ(COMPANY_NAME, last.field_type());
   EXPECT_EQ(AutofillType::COMPANY, last.group());
-  EXPECT_EQ(AutofillType::NO_SUBGROUP, last.subgroup());
 
   // Boundary (error) condition.
   AutofillType boundary(MAX_VALID_FIELD_TYPE);
   EXPECT_EQ(UNKNOWN_TYPE, boundary.field_type());
   EXPECT_EQ(AutofillType::NO_GROUP, boundary.group());
-  EXPECT_EQ(AutofillType::NO_SUBGROUP, boundary.subgroup());
 
   // Beyond the boundary (error) condition.
   AutofillType beyond(static_cast<AutofillFieldType>(MAX_VALID_FIELD_TYPE+10));
   EXPECT_EQ(UNKNOWN_TYPE, beyond.field_type());
   EXPECT_EQ(AutofillType::NO_GROUP, beyond.group());
-  EXPECT_EQ(AutofillType::NO_SUBGROUP, beyond.subgroup());
 
   // In-between value.  Missing from enum but within range.  Error condition.
   AutofillType between(static_cast<AutofillFieldType>(16));
   EXPECT_EQ(UNKNOWN_TYPE, between.field_type());
   EXPECT_EQ(AutofillType::NO_GROUP, between.group());
-  EXPECT_EQ(AutofillType::NO_SUBGROUP, between.subgroup());
 }
 
 }  // namespace
diff --git a/chrome/browser/autofill/form_structure.cc b/chrome/browser/autofill/form_structure.cc
index 1ee8f7ee..d97f108 100644
--- a/chrome/browser/autofill/form_structure.cc
+++ b/chrome/browser/autofill/form_structure.cc
@@ -932,7 +932,7 @@
       // Forms often ask for multiple phone numbers -- e.g. both a daytime and
       // evening phone number.  Our phone number detection is also generally a
       // little off.  Hence, ignore this field type as a signal here.
-      if (AutofillType(current_type).group() == AutofillType::PHONE_HOME)
+      if (AutofillType(current_type).group() == AutofillType::PHONE)
         already_saw_current_type = false;
 
       // Some forms have adjacent fields of the same type.  Two common examples:
diff --git a/chrome/browser/autofill/phone_number.cc b/chrome/browser/autofill/phone_number.cc
index 5303067..cf0545c 100644
--- a/chrome/browser/autofill/phone_number.cc
+++ b/chrome/browser/autofill/phone_number.cc
@@ -23,16 +23,6 @@
 // The number of digits in an area code.
 const size_t kPhoneCityCodeLength = 3;
 
-const AutofillType::FieldTypeSubGroup kAutofillPhoneTypes[] = {
-  AutofillType::PHONE_NUMBER,
-  AutofillType::PHONE_CITY_CODE,
-  AutofillType::PHONE_COUNTRY_CODE,
-  AutofillType::PHONE_CITY_AND_NUMBER,
-  AutofillType::PHONE_WHOLE_NUMBER,
-};
-
-const int kAutofillPhoneLength = arraysize(kAutofillPhoneTypes);
-
 void StripPunctuation(string16* number) {
   RemoveChars(*number, kPhoneNumberSeparators, number);
 }
@@ -96,9 +86,8 @@
 }
 
 void PhoneNumber::SetInfo(AutofillFieldType type, const string16& value) {
-  FieldTypeSubGroup subgroup = AutofillType(type).subgroup();
-  if (subgroup != AutofillType::PHONE_CITY_AND_NUMBER &&
-      subgroup != AutofillType::PHONE_WHOLE_NUMBER) {
+  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;