| Index: chrome/browser/autofill/wallet/full_wallet.h | 
| diff --git a/chrome/browser/autofill/wallet/full_wallet.h b/chrome/browser/autofill/wallet/full_wallet.h | 
| new file mode 100644 | 
| index 0000000000000000000000000000000000000000..f31778030752554f4a0e0beee3ca800382e56ceb | 
| --- /dev/null | 
| +++ b/chrome/browser/autofill/wallet/full_wallet.h | 
| @@ -0,0 +1,79 @@ | 
| +// Copyright (c) 2012 The Chromium Authors. All rights reserved. | 
| +// Use of this source code is governed by a BSD-style license that can be | 
| +// found in the LICENSE file. | 
| + | 
| +#ifndef CHROME_BROWSER_AUTOFILL_WALLET_FULL_WALLET_H_ | 
| +#define CHROME_BROWSER_AUTOFILL_WALLET_FULL_WALLET_H_ | 
| + | 
| +#include <string> | 
| +#include <vector> | 
| + | 
| +#include "base/basictypes.h" | 
| +#include "base/memory/scoped_ptr.h" | 
| +#include "chrome/browser/autofill/wallet/wallet_address.h" | 
| + | 
| +namespace base { | 
| +class DictionaryValue; | 
| +} | 
| + | 
| +namespace wallet { | 
| + | 
| +// FullWallet contains all the information a merchant requires from a user for | 
| +// that user to make a purchase. | 
| +class FullWallet { | 
| + public: | 
| +  // This constructor is only public for unit testing. | 
| +  FullWallet(int expiration_month, | 
| +             int expiration_year, | 
| +             const std::string& iin, | 
| +             const std::string& encrypted_rest, | 
| +             Address* billing_address, | 
| +             Address* shipping_address, | 
| +             const std::vector<std::string> required_actions); | 
| + | 
| +  ~FullWallet(); | 
| + | 
| +  // Returns null if the input invalid, an empty wallet with required actions if | 
| +  // there are any, or a valid wallet.  The caller owns the returned pointer. | 
| +  static FullWallet* CreateFullWallet(const base::DictionaryValue& dictionary); | 
| + | 
| +  // Decrypts and returns primary account number (PAN) using generated one time | 
| +  // pad (OTP). | 
| +  const std::string GetPan(void* bytes, size_t length); | 
| + | 
| +  // Decrypts and returns card verification number (CVN) using generated one | 
| +  // time pad (OTP). | 
| +  const std::string GetCvn(void* bytes, size_t length); | 
| + | 
| +  bool operator==(const FullWallet& other) const; | 
| +  bool operator!=(const FullWallet& other) const; | 
| + | 
| +  const Address* billing_address() const { return billing_address_.get(); } | 
| +  const Address* shipping_address() const { return shipping_address_.get(); } | 
| +  const std::vector<std::string> required_actions() const { | 
| +    return required_actions_; | 
| +  } | 
| +  int expiration_month() const { return expiration_month_; } | 
| +  int expiration_year() const { return expiration_year_; } | 
| + | 
| + private: | 
| +  void DecryptCardInfo(uint8* otp, size_t length); | 
| +  int expiration_month_; | 
| +  int expiration_year_; | 
| +  // Primary account number (PAN) | 
| +  std::string pan_; | 
| +  // Card verification number (CVN) | 
| +  std::string cvn_; | 
| +  // Issuer identification number (IIN) | 
| +  std::string iin_; | 
| +  // Encrypted concatentation of CVN and PAN without IIN | 
| +  std::string encrypted_rest_; | 
| +  scoped_ptr<Address> billing_address_; | 
| +  scoped_ptr<Address> shipping_address_; | 
| +  std::vector<std::string> required_actions_; | 
| +  DISALLOW_COPY_AND_ASSIGN(FullWallet); | 
| +}; | 
| + | 
| +}  // end namespace wallet | 
| + | 
| +#endif  // CHROME_BROWSER_AUTOFILL_WALLET_FULL_WALLET_H_ | 
|  |