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_CREDIT_CARD_FIELD_H_ 6 #define COMPONENTS_AUTOFILL_CORE_BROWSER_CREDIT_CARD_FIELD_H_ 7 8 #include <vector> 9 10 #include "base/basictypes.h" 11 #include "base/compiler_specific.h" 12 #include "base/gtest_prod_util.h" 13 #include "components/autofill/core/browser/autofill_type.h" 14 #include "components/autofill/core/browser/form_field.h" 15 16 namespace autofill { 17 18 class AutofillField; 19 class AutofillScanner; 20 21 class CreditCardField : public FormField { 22 public: 23 virtual ~CreditCardField(); 24 static FormField* Parse(AutofillScanner* scanner); 25 26 protected: 27 // FormField: 28 virtual bool ClassifyField(ServerFieldTypeMap* map) const OVERRIDE; 29 30 private: 31 friend class CreditCardFieldTest; 32 33 CreditCardField(); 34 35 // For the combined expiration field we return |exp_year_type_|; otherwise if 36 // |expiration_year_| is having year with |max_length| of 2-digits we return 37 // |CREDIT_CARD_EXP_2_DIGIT_YEAR|; otherwise |CREDIT_CARD_EXP_4_DIGIT_YEAR|. 38 ServerFieldType GetExpirationYearType() const; 39 40 AutofillField* cardholder_; // Optional. 41 42 // Occasionally pages have separate fields for the cardholder's first and 43 // last names; for such pages |cardholder_| holds the first name field and 44 // we store the last name field here. 45 // (We could store an embedded |NameField| object here, but we don't do so 46 // because the text patterns for matching a cardholder name are different 47 // than for ordinary names, and because cardholder names never have titles, 48 // middle names or suffixes.) 49 AutofillField* cardholder_last_; 50 51 // TODO(jhawkins): Parse the select control. 52 AutofillField* type_; // Optional. 53 std::vector<AutofillField*> numbers_; // Required. 54 55 // The 3-digit card verification number; we don't currently fill this. 56 AutofillField* verification_; 57 58 // Either |expiration_date_| or both |expiration_month_| and 59 // |expiration_year_| are required. 60 AutofillField* expiration_month_; 61 AutofillField* expiration_year_; 62 AutofillField* expiration_date_; 63 64 // For combined expiration field having year as 2-digits we store here 65 // |CREDIT_CARD_EXP_DATE_2_DIGIT_YEAR|; otherwise we store 66 // |CREDIT_CARD_EXP_DATE_4_DIGIT_YEAR|. 67 ServerFieldType exp_year_type_; 68 69 DISALLOW_COPY_AND_ASSIGN(CreditCardField); 70 }; 71 72 } // namespace autofill 73 74 #endif // COMPONENTS_AUTOFILL_CORE_BROWSER_CREDIT_CARD_FIELD_H_ 75