1868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved.
22a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
32a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// found in the LICENSE file.
42a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
5868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#ifndef COMPONENTS_AUTOFILL_CONTENT_BROWSER_WALLET_INSTRUMENT_H_
6868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#define COMPONENTS_AUTOFILL_CONTENT_BROWSER_WALLET_INSTRUMENT_H_
72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include <string>
92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/basictypes.h"
102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/memory/scoped_ptr.h"
11868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/string16.h"
122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace base {
142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class DictionaryValue;
152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace autofill {
18c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
19c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)class AutofillProfile;
20c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)class CreditCard;
21c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace wallet {
232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class Address;
252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// This class contains all the data necessary to save a new instrument to a
272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// user's Google Wallet using WalletClient::SaveInstrument or
282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// WalletClient::SaveInstrumentAndAddress.
292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class Instrument {
302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public:
312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  enum FormOfPayment {
322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    UNKNOWN,
332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    VISA,
342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    MASTER_CARD,
352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    AMEX,
362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    DISCOVER,
372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    JCB,
382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  };
392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Convert the info in |card| to an Instrument using |profile| for address.
412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  Instrument(const CreditCard& card,
42c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)             const base::string16& card_verification_number,
432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)             const AutofillProfile& profile);
442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
45c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  Instrument(const base::string16& primary_account_number,
46c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)             const base::string16& card_verification_number,
472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)             int expiration_month,
482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)             int expiration_year,
492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)             FormOfPayment form_of_payment,
502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)             scoped_ptr<Address> address);
512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  Instrument(const Instrument& instrument);
532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ~Instrument();
552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  scoped_ptr<base::DictionaryValue> ToDictionary() const;
572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
58c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  const base::string16& primary_account_number() const {
592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    return primary_account_number_;
602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
61c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  const base::string16& card_verification_number() const {
622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    return card_verification_number_;
632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  int expiration_month() const { return expiration_month_; }
652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  int expiration_year() const { return expiration_year_; }
66ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  const Address* address() const { return address_.get(); }
672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  FormOfPayment form_of_payment() const { return form_of_payment_; }
687dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  const base::string16& last_four_digits() const { return last_four_digits_; }
69ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  const std::string& object_id() const { return object_id_; }
702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private:
722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void Init();
732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // |primary_account_number_| is expected to be \d{12-19}.
75c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  base::string16 primary_account_number_;
762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // |card_verification_number_| is expected to be \d{3-4}.
78c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  base::string16 card_verification_number_;
792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // |expiration month_| should be 1-12.
812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  int expiration_month_;
822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // |expiration_year_| should be a 4-digit year.
842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  int expiration_year_;
852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // The payment network of the instrument, e.g. Visa.
872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  FormOfPayment form_of_payment_;
882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // The billing address of the instrument.
902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  scoped_ptr<Address> address_;
912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // The last four digits of |primary_account_number_|.
93c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  base::string16 last_four_digits_;
942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
95ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  // Externalized Online Wallet id for this instrument.
96ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  std::string object_id_;
97ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch
982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  DISALLOW_ASSIGN(Instrument);
992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)};
1002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}  // namespace wallet
1022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}  // namespace autofill
1032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
104868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#endif  // COMPONENTS_AUTOFILL_CONTENT_BROWSER_WALLET_INSTRUMENT_H_
105