1eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch// Copyright 2013 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#ifndef COMPONENTS_AUTOFILL_CORE_BROWSER_CREDIT_CARD_FIELD_H_
6eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#define COMPONENTS_AUTOFILL_CORE_BROWSER_CREDIT_CARD_FIELD_H_
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <vector>
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/basictypes.h"
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/compiler_specific.h"
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/gtest_prod_util.h"
13eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "components/autofill/core/browser/autofill_type.h"
14eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "components/autofill/core/browser/form_field.h"
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
16c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)namespace autofill {
17c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class AutofillField;
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class AutofillScanner;
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class CreditCardField : public FormField {
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  static FormField* Parse(AutofillScanner* scanner);
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected:
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // FormField:
273240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch  virtual bool ClassifyField(ServerFieldTypeMap* map) const OVERRIDE;
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private:
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FRIEND_TEST_ALL_PREFIXES(CreditCardFieldTest, ParseMiniumCreditCard);
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FRIEND_TEST_ALL_PREFIXES(CreditCardFieldTest, ParseFullCreditCard);
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FRIEND_TEST_ALL_PREFIXES(CreditCardFieldTest, ParseCreditCardType);
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FRIEND_TEST_ALL_PREFIXES(CreditCardFieldTest, ParseExpMonthYear);
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FRIEND_TEST_ALL_PREFIXES(CreditCardFieldTest, ParseExpMonthYear2);
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FRIEND_TEST_ALL_PREFIXES(CreditCardFieldTest, ParseExpField);
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FRIEND_TEST_ALL_PREFIXES(CreditCardFieldTest, ParseExpField2DigitYear);
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FRIEND_TEST_ALL_PREFIXES(CreditCardFieldTest,
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                           ParseCreditCardHolderNameWithCCFullName);
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  CreditCardField();
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const AutofillField* cardholder_;  // Optional.
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Occasionally pages have separate fields for the cardholder's first and
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // last names; for such pages cardholder_ holds the first name field and
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // we store the last name field here.
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // (We could store an embedded NameField object here, but we don't do so
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // because the text patterns for matching a cardholder name are different
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // than for ordinary names, and because cardholder names never have titles,
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // middle names or suffixes.)
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const AutofillField* cardholder_last_;
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // TODO(jhawkins): Parse the select control.
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const AutofillField* type_;  // Optional.
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const AutofillField* number_;  // Required.
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // The 3-digit card verification number; we don't currently fill this.
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const AutofillField* verification_;
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Either |expiration_date_| or both |expiration_month_| and
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // |expiration_year_| are required.
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const AutofillField* expiration_month_;
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const AutofillField* expiration_year_;
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const AutofillField* expiration_date_;
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // True if the year is detected to be a 2-digit year; otherwise, we assume
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // a 4-digit year.
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool is_two_digit_year_;
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(CreditCardField);
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
73c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}  // namespace autofill
74c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
75eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#endif  // COMPONENTS_AUTOFILL_CORE_BROWSER_CREDIT_CARD_FIELD_H_
76