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

Unified Diff: chrome/browser/autofill/autofill_type.cc

Issue 1789001: AutoFill crash in CreditCard::SetInfo(). (Closed)
Patch Set: Virtual back to original. Created 10 years, 8 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 | « chrome/browser/autofill/autofill_type.h ('k') | chrome/browser/autofill/autofill_type_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/autofill/autofill_type.cc
diff --git a/chrome/browser/autofill/autofill_type.cc b/chrome/browser/autofill/autofill_type.cc
index 46c2aef18c5aa43833ce6af02728821daefb2f76..030b12cbc816c3acad8d039f01f620f1846090af 100644
--- a/chrome/browser/autofill/autofill_type.cc
+++ b/chrome/browser/autofill/autofill_type.cc
@@ -7,99 +7,164 @@
#include "base/basictypes.h"
#include "base/logging.h"
-// TODO(jhawkins) all of the Human Readable names will need to be added to a
-// resource file and localized because they are used in the confirmation
-// dialog.
-AutoFillType::AutoFillTypeDefinition kAutoFillTypeDefinitions[] = {
- { NO_SERVER_DATA, AutoFillType::NO_GROUP, AutoFillType::NO_SUBGROUP, "No Server Data" },
- { UNKNOWN_TYPE, AutoFillType::NO_GROUP, AutoFillType::NO_SUBGROUP, "Unknown Type" },
- { EMPTY_TYPE, AutoFillType::NO_GROUP, AutoFillType::NO_SUBGROUP, "Empty Type" },
-
- { NAME_FIRST, AutoFillType::CONTACT_INFO, AutoFillType::NO_SUBGROUP, "First Name" },
- { NAME_MIDDLE, AutoFillType::CONTACT_INFO, AutoFillType::NO_SUBGROUP, "Middle Name" },
- { NAME_LAST, AutoFillType::CONTACT_INFO, AutoFillType::NO_SUBGROUP, "Last Name" },
- { NAME_MIDDLE_INITIAL, AutoFillType::CONTACT_INFO, AutoFillType::NO_SUBGROUP, "Middle Initial" },
- { NAME_FULL, AutoFillType::CONTACT_INFO, AutoFillType::NO_SUBGROUP, "Full Name" },
- { NAME_SUFFIX, AutoFillType::CONTACT_INFO, AutoFillType::NO_SUBGROUP, "Name Suffix" },
-
- { EMAIL_ADDRESS, AutoFillType::CONTACT_INFO, AutoFillType::NO_SUBGROUP, "Email Address" },
- { COMPANY_NAME, AutoFillType::CONTACT_INFO, AutoFillType::NO_SUBGROUP, "Company Name" },
-
- { PHONE_HOME_NUMBER, AutoFillType::PHONE_HOME, AutoFillType::PHONE_NUMBER, "Home Phone Number" },
- { PHONE_HOME_CITY_CODE, AutoFillType::PHONE_HOME, AutoFillType::PHONE_CITY_CODE, "Home Area Code" },
- { PHONE_HOME_COUNTRY_CODE, AutoFillType::PHONE_HOME, AutoFillType::PHONE_COUNTRY_CODE, "Home Country Code" },
- { PHONE_HOME_CITY_AND_NUMBER, AutoFillType::PHONE_HOME, AutoFillType::PHONE_CITY_AND_NUMBER, "Home Phone Number" },
- { PHONE_HOME_WHOLE_NUMBER, AutoFillType::PHONE_HOME, AutoFillType::PHONE_WHOLE_NUMBER, "Home Phone Number" },
-
- { PHONE_FAX_NUMBER, AutoFillType::PHONE_FAX, AutoFillType::PHONE_NUMBER, "Fax Number" },
- { PHONE_FAX_CITY_CODE, AutoFillType::PHONE_FAX, AutoFillType::PHONE_CITY_CODE, "Fax Area Code" },
- { PHONE_FAX_COUNTRY_CODE, AutoFillType::PHONE_FAX, AutoFillType::PHONE_COUNTRY_CODE, "Fax Country Code" },
- { PHONE_FAX_CITY_AND_NUMBER, AutoFillType::PHONE_FAX, AutoFillType::PHONE_CITY_AND_NUMBER, "Fax Number" },
- { PHONE_FAX_WHOLE_NUMBER, AutoFillType::PHONE_FAX, AutoFillType::PHONE_WHOLE_NUMBER, "Fax Number" },
-
- { ADDRESS_HOME_LINE1, AutoFillType::ADDRESS_HOME, AutoFillType::ADDRESS_LINE1, "Home Address Line 1" },
- { ADDRESS_HOME_LINE2, AutoFillType::ADDRESS_HOME, AutoFillType::ADDRESS_LINE2, "Home Address Line 2" },
- { ADDRESS_HOME_APT_NUM, AutoFillType::ADDRESS_HOME, AutoFillType::ADDRESS_APT_NUM, "Home Address Apartment Number" },
- { ADDRESS_HOME_CITY, AutoFillType::ADDRESS_HOME, AutoFillType::ADDRESS_CITY, "Home Address City" },
- { ADDRESS_HOME_STATE, AutoFillType::ADDRESS_HOME, AutoFillType::ADDRESS_STATE, "Home Address State" },
- { ADDRESS_HOME_ZIP, AutoFillType::ADDRESS_HOME, AutoFillType::ADDRESS_ZIP, "Home Address Zip Code" },
- { ADDRESS_HOME_COUNTRY, AutoFillType::ADDRESS_HOME, AutoFillType::ADDRESS_COUNTRY, "Home Address Country" },
-
- { ADDRESS_BILLING_LINE1, AutoFillType::ADDRESS_BILLING, AutoFillType::ADDRESS_LINE1, "Billing Address Line 1" },
- { ADDRESS_BILLING_LINE2, AutoFillType::ADDRESS_BILLING, AutoFillType::ADDRESS_LINE2, "Billing Address Line 2" },
- { ADDRESS_BILLING_APT_NUM, AutoFillType::ADDRESS_BILLING, AutoFillType::ADDRESS_APT_NUM, "Billing Address Apartment Number" },
- { ADDRESS_BILLING_CITY, AutoFillType::ADDRESS_BILLING, AutoFillType::ADDRESS_CITY, "Billing Address City" },
- { ADDRESS_BILLING_STATE, AutoFillType::ADDRESS_BILLING, AutoFillType::ADDRESS_STATE, "Billing Address State" },
- { ADDRESS_BILLING_ZIP, AutoFillType::ADDRESS_BILLING, AutoFillType::ADDRESS_ZIP, "Billing Address Zip Code" },
- { ADDRESS_BILLING_COUNTRY, AutoFillType::ADDRESS_BILLING, AutoFillType::ADDRESS_COUNTRY, "Billing Address Country" },
-
- { CREDIT_CARD_NAME, AutoFillType::CREDIT_CARD, AutoFillType::NO_SUBGROUP, "Name on Credit Card" },
- { CREDIT_CARD_NUMBER, AutoFillType::CREDIT_CARD, AutoFillType::NO_SUBGROUP, "Credit Card Number" },
- { CREDIT_CARD_EXP_MONTH, AutoFillType::CREDIT_CARD, AutoFillType::NO_SUBGROUP, "Credit Card Expiration Month" },
- { CREDIT_CARD_EXP_2_DIGIT_YEAR, AutoFillType::CREDIT_CARD, AutoFillType::NO_SUBGROUP, "Credit Card Expiration Year" },
- { CREDIT_CARD_EXP_4_DIGIT_YEAR, AutoFillType::CREDIT_CARD, AutoFillType::NO_SUBGROUP, "Credit Card Expiration Year" },
- { CREDIT_CARD_EXP_DATE_2_DIGIT_YEAR, AutoFillType::CREDIT_CARD, AutoFillType::NO_SUBGROUP, "Credit Card Expiration Date" },
- { CREDIT_CARD_EXP_DATE_4_DIGIT_YEAR, AutoFillType::CREDIT_CARD, AutoFillType::NO_SUBGROUP, "Credit Card Expiration Date" },
- { CREDIT_CARD_TYPE, AutoFillType::CREDIT_CARD, AutoFillType::NO_SUBGROUP, "Credit Card Type" },
- { CREDIT_CARD_VERIFICATION_CODE, AutoFillType::CREDIT_CARD, AutoFillType::NO_SUBGROUP, "Credit Card Verification Number" },
-
- { MAX_VALID_FIELD_TYPE, AutoFillType::NO_GROUP, AutoFillType::NO_SUBGROUP, "" },
+namespace {
+
+const AutoFillType::AutoFillTypeDefinition kUnknownAutoFillTypeDefinition = {
+ /* UNKNOWN_TYPE */ AutoFillType::NO_GROUP, AutoFillType::NO_SUBGROUP
};
-bool AutoFillType::initialized_ = false;
-AutoFillType AutoFillType::types_[MAX_VALID_FIELD_TYPE + 1];
+AutoFillType::AutoFillTypeDefinition kAutoFillTypeDefinitions[] = {
+ // NO_SERVER_DATA
+ { AutoFillType::NO_GROUP, AutoFillType::NO_SUBGROUP },
+ // UNKNOWN_TYPE
+ kUnknownAutoFillTypeDefinition,
+ // EMPTY_TYPE
+ { AutoFillType::NO_GROUP, AutoFillType::NO_SUBGROUP },
+
+ // NAME_FIRST
+ { AutoFillType::CONTACT_INFO, AutoFillType::NO_SUBGROUP },
+ // NAME_MIDDLE
+ { AutoFillType::CONTACT_INFO, AutoFillType::NO_SUBGROUP },
+ // NAME_LAST
+ { AutoFillType::CONTACT_INFO, AutoFillType::NO_SUBGROUP },
+ // NAME_MIDDLE_INITIAL
+ { AutoFillType::CONTACT_INFO, AutoFillType::NO_SUBGROUP },
+ // NAME_FULL
+ { AutoFillType::CONTACT_INFO, AutoFillType::NO_SUBGROUP },
+ // NAME_SUFFIX
+ { AutoFillType::CONTACT_INFO, AutoFillType::NO_SUBGROUP },
+
+ // EMAIL_ADDRESS
+ { AutoFillType::CONTACT_INFO, 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.
+ kUnknownAutoFillTypeDefinition,
+ kUnknownAutoFillTypeDefinition,
+ kUnknownAutoFillTypeDefinition,
+ kUnknownAutoFillTypeDefinition,
+ kUnknownAutoFillTypeDefinition,
+
+ // PHONE_FAX_NUMBER
+ { AutoFillType::PHONE_FAX, AutoFillType::PHONE_NUMBER },
+ // PHONE_FAX_CITY_CODE
+ { AutoFillType::PHONE_FAX, AutoFillType::PHONE_CITY_CODE },
+ // PHONE_FAX_COUNTRY_CODE
+ { AutoFillType::PHONE_FAX, AutoFillType::PHONE_COUNTRY_CODE },
+ // PHONE_FAX_CITY_AND_NUMBER
+ { AutoFillType::PHONE_FAX, AutoFillType::PHONE_CITY_AND_NUMBER },
+ // PHONE_FAX_WHOLE_NUMBER
+ { AutoFillType::PHONE_FAX, AutoFillType::PHONE_WHOLE_NUMBER },
+
+ // Cell phone numbers (values [25, 29]) are deprecated.
+ kUnknownAutoFillTypeDefinition,
+ kUnknownAutoFillTypeDefinition,
+ kUnknownAutoFillTypeDefinition,
+ kUnknownAutoFillTypeDefinition,
+ kUnknownAutoFillTypeDefinition,
+
+ // 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.
+ kUnknownAutoFillTypeDefinition,
+ kUnknownAutoFillTypeDefinition,
+ kUnknownAutoFillTypeDefinition,
+ kUnknownAutoFillTypeDefinition,
+ kUnknownAutoFillTypeDefinition,
+ kUnknownAutoFillTypeDefinition,
+ kUnknownAutoFillTypeDefinition,
+
+ // 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::CONTACT_INFO, AutoFillType::NO_SUBGROUP },
+};
-AutoFillType::AutoFillType(AutoFillTypeDefinition* definition)
- : autofill_type_definition_(definition) {
- DCHECK(definition != NULL);
-}
+} // namespace
AutoFillType::AutoFillType(AutoFillFieldType field_type) {
- StaticInitialize();
- DCHECK(initialized_);
-
- if (field_type < 0 || field_type > MAX_VALID_FIELD_TYPE ||
- types_[field_type].autofill_type_definition_ == NULL) {
- field_type = UNKNOWN_TYPE;
- }
+ if ((field_type < NO_SERVER_DATA || field_type >= MAX_VALID_FIELD_TYPE) ||
+ (field_type >= 15 && field_type <= 19) ||
+ (field_type >= 25 && field_type <= 29) ||
+ (field_type >= 44 && field_type <= 50))
+ field_type_ = UNKNOWN_TYPE;
+ else
+ field_type_ = field_type;
+}
- autofill_type_definition_ = types_[field_type].autofill_type_definition_;
+AutoFillType::AutoFillType(const AutoFillType& autofill_type) {
+ *this = autofill_type;
}
-// TODO(jhawkins): refactor this class to not require static initialization.
-void AutoFillType::StaticInitialize() {
- // Can be called more than once (in unit tests for example).
- if (initialized_)
- return;
+AutoFillType& AutoFillType::operator=(const AutoFillType& autofill_type) {
+ if (this != &autofill_type)
+ this->field_type_ = autofill_type.field_type_;
+ return *this;
+}
- initialized_ = true;
+AutoFillFieldType AutoFillType::field_type() const {
+ return field_type_;
+}
- InitializeFieldTypeMap();
+FieldTypeGroup AutoFillType::group() const {
+ return kAutoFillTypeDefinitions[field_type_].group;
}
-void AutoFillType::InitializeFieldTypeMap() {
- for (size_t i = 0; i < arraysize(kAutoFillTypeDefinitions); ++i) {
- AutoFillType type(&kAutoFillTypeDefinitions[i]);
- types_[type.field_type()] = type;
- }
+FieldTypeSubGroup AutoFillType::subgroup() const {
+ return kAutoFillTypeDefinitions[field_type_].subgroup;
}
« no previous file with comments | « chrome/browser/autofill/autofill_type.h ('k') | chrome/browser/autofill/autofill_type_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698