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_WALLET_ITEMS_H_ 6868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#define COMPONENTS_AUTOFILL_CONTENT_BROWSER_WALLET_WALLET_ITEMS_H_ 72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 8116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include <set> 92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include <string> 102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include <vector> 112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/basictypes.h" 132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/gtest_prod_util.h" 142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/logging.h" 152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/memory/scoped_ptr.h" 162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/memory/scoped_vector.h" 17868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/string16.h" 18868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "components/autofill/content/browser/wallet/required_action.h" 19868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "components/autofill/content/browser/wallet/wallet_address.h" 207dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "url/gurl.h" 212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace base { 232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class DictionaryValue; 242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace gfx { 272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class Image; 282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace autofill { 312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 323240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdochclass AutofillType; 333240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch 342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)FORWARD_DECLARE_TEST(WalletInstrumentWrapperTest, GetInfoCreditCardExpMonth); 35c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)FORWARD_DECLARE_TEST(WalletInstrumentWrapperTest, 36c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) GetDisplayTextEmptyWhenExpired); 372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace wallet { 392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 40a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)class GaiaAccount; 412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class WalletItemsTest; 422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)enum AmexPermission { 4468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) AMEX_ALLOWED, 4568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) AMEX_DISALLOWED, 4668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)}; 4768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// WalletItems is a collection of cards and addresses that a user picks from to 492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// construct a full wallet. However, it also provides a transaction ID which 502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// must be used throughout all API calls being made using this data. 512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Additionally, user actions may be required before a purchase can be completed 522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// using Online Wallet and those actions are present in the object as well. 532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class WalletItems { 542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public: 552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Container for all information about a credit card except for it's card 562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // verfication number (CVN) and it's complete primary account number (PAN). 572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) class MaskedInstrument { 582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public: 592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) enum Type { 602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) AMEX, 612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DISCOVER, 622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) MAESTRO, 632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) MASTER_CARD, 642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SOLO, 652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SWITCH, 662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) UNKNOWN, // Catch all type. 672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) VISA, 682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) }; 692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) enum Status { 702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) AMEX_NOT_SUPPORTED, 712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) BILLING_INCOMPLETE, 722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DECLINED, 732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DISABLED_FOR_THIS_MERCHANT, // Deprecated. 742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPIRED, 752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) INAPPLICABLE, // Catch all status. 762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) PENDING, 772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) UNSUPPORTED_COUNTRY, 782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) VALID, 792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) }; 802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ~MaskedInstrument(); 822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Returns an empty scoped_ptr if input is invalid or a valid masked 842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // instrument. 852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) static scoped_ptr<MaskedInstrument> 862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CreateMaskedInstrument(const base::DictionaryValue& dictionary); 872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool operator==(const MaskedInstrument& other) const; 892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool operator!=(const MaskedInstrument& other) const; 902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Gets an image to display for this instrument. 922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const gfx::Image& CardIcon() const; 932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Returns a pair of strings that summarizes this CC, 952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // suitable for display to the user. 96c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::string16 DisplayName() const; 97c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::string16 DisplayNameDetail() const; 982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Gets info that corresponds with |type|. 1003240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch base::string16 GetInfo(const AutofillType& type, 1013240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch const std::string& app_locale) const; 102c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 103c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Returns the display type of the and last four digits (e.g. Visa - 4444). 104c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::string16 TypeAndLastFourDigits() const; 1052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 106c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const base::string16& descriptive_name() const { return descriptive_name_; } 1072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const Type& type() const { return type_; } 108c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const base::string16& last_four_digits() const { return last_four_digits_; } 1092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int expiration_month() const { return expiration_month_; } 1102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int expiration_year() const { return expiration_year_; } 1112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const Address& address() const { return *address_; } 1122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const Status& status() const { return status_; } 1132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const std::string& object_id() const { return object_id_; } 1142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private: 1162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) friend class WalletItemsTest; 11790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) friend scoped_ptr<MaskedInstrument> GetTestMaskedInstrumentWithDetails( 1185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const std::string& id, 1195d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) scoped_ptr<Address> address, 1205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) Type type, 1215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) Status status); 1222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) FRIEND_TEST_ALL_PREFIXES(::autofill::WalletInstrumentWrapperTest, 1232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetInfoCreditCardExpMonth); 124c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) FRIEND_TEST_ALL_PREFIXES(::autofill::WalletInstrumentWrapperTest, 125c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) GetDisplayTextEmptyWhenExpired); 1262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) FRIEND_TEST_ALL_PREFIXES(WalletItemsTest, CreateMaskedInstrument); 1272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) FRIEND_TEST_ALL_PREFIXES(WalletItemsTest, CreateWalletItems); 1282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1297dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch MaskedInstrument(const base::string16& descriptive_name, 1302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const Type& type, 131c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const base::string16& last_four_digits, 1322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int expiration_month, 1332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int expiration_year, 1342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<Address> address, 1352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const Status& status, 1362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const std::string& object_id); 1372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // A user-provided description of the instrument. For example, "Google Visa 1392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Card". 140c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::string16 descriptive_name_; 1412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // The payment network of the instrument. For example, Visa. 1432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Type type_; 1442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // The last four digits of the primary account number of the instrument. 146c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::string16 last_four_digits_; 1472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // |expiration month_| should be 1-12. 1492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int expiration_month_; 1502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // |expiration_year_| should be a 4-digit year. 1522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int expiration_year_; 1532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // The billing address for the instrument. 1552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<Address> address_; 1562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // The current status of the instrument. For example, expired or declined. 1582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Status status_; 1592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Externalized Online Wallet id for this instrument. 1612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string object_id_; 1622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(MaskedInstrument); 1642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) }; 1652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Class representing a legal document that the user must accept before they 1672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // can use Online Wallet. 1682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) class LegalDocument { 1692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public: 1702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ~LegalDocument(); 1712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 172c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Returns null if input is invalid or a valid legal document. 1732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) static scoped_ptr<LegalDocument> 1742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CreateLegalDocument(const base::DictionaryValue& dictionary); 1752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 176c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Returns a document for the privacy policy (acceptance of which is not 177c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // tracked by the server). 178c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) static scoped_ptr<LegalDocument> CreatePrivacyPolicyDocument(); 1792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool operator==(const LegalDocument& other) const; 1812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool operator!=(const LegalDocument& other) const; 1822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 183c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const std::string& id() { return id_; } 184c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const GURL& url() const { return url_; } 185c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const base::string16& display_name() const { return display_name_; } 1862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private: 1882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) friend class WalletItemsTest; 1892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) FRIEND_TEST_ALL_PREFIXES(WalletItemsTest, CreateLegalDocument); 1902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) FRIEND_TEST_ALL_PREFIXES(WalletItemsTest, CreateWalletItems); 191c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) FRIEND_TEST_ALL_PREFIXES(WalletItemsTest, LegalDocumentUrl); 192c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) FRIEND_TEST_ALL_PREFIXES(WalletItemsTest, LegalDocumentEmptyId); 193c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) LegalDocument(const std::string& id, 194c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const base::string16& display_name); 195c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) LegalDocument(const GURL& url, 196c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const base::string16& display_name); 197c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 198c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Externalized Online Wallet id for the document, or an empty string for 199c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // documents not tracked by the server (such as the privacy policy). 200c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::string id_; 201c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // The human-visitable URL that displays the document. 202c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) GURL url_; 2032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // User displayable name for the document. 204c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::string16 display_name_; 2052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(LegalDocument); 2062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) }; 2072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ~WalletItems(); 2092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Returns null on invalid input, an empty wallet items with required 2112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // actions if any are present, and a populated wallet items otherwise. Caller 2122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // owns returned pointer. 2132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) static scoped_ptr<WalletItems> 2142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CreateWalletItems(const base::DictionaryValue& dictionary); 2152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool operator==(const WalletItems& other) const; 2172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool operator!=(const WalletItems& other) const; 2182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 219a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) void AddAccount(scoped_ptr<GaiaAccount> account); 2202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void AddInstrument(scoped_ptr<MaskedInstrument> instrument) { 221a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) DCHECK(instrument); 2222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) instruments_.push_back(instrument.release()); 2232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 2242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void AddAddress(scoped_ptr<Address> address) { 225a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) DCHECK(address); 2262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) addresses_.push_back(address.release()); 2272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 2282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void AddLegalDocument(scoped_ptr<LegalDocument> legal_document) { 229a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) DCHECK(legal_document); 2302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) legal_documents_.push_back(legal_document.release()); 2312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 232116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch void AddAllowedShippingCountry(const std::string& country_code) { 233116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch allowed_shipping_countries_.insert(country_code); 234116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch } 2352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 236c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Return the corresponding instrument for |id| or NULL if it doesn't exist. 237c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const WalletItems::MaskedInstrument* GetInstrumentById( 238c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const std::string& object_id) const; 239c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 2402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Whether or not |action| is in |required_actions_|. 2412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool HasRequiredAction(RequiredAction action) const; 2422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2431e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // Checks whether |card_number| is supported by Wallet for this merchant and 2441e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // if not, fills in |message| with a user-visible explanation. 2451e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) bool SupportsCard(const base::string16& card_number, 2461e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) base::string16* message) const; 2471e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 248a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const std::vector<GaiaAccount*>& gaia_accounts() const { 249a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) return gaia_accounts_.get(); 250a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) } 2512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const std::vector<RequiredAction>& required_actions() const { 2522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return required_actions_; 2532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 2542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const std::string& google_transaction_id() const { 2552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return google_transaction_id_; 2562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 2572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const std::vector<MaskedInstrument*>& instruments() const { 2582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return instruments_.get(); 2592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 2602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const std::string& default_instrument_id() const { 2612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return default_instrument_id_; 2622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 2632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const std::vector<Address*>& addresses() const { return addresses_.get(); } 2642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const std::string& default_address_id() const { return default_address_id_; } 265a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // Returns the GAIA id of the active account, or an empty string if no account 266a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // is active. 267a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) std::string ObfuscatedGaiaId() const; 268f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) size_t active_account_index() const { return active_account_index_; } 2692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const std::vector<LegalDocument*>& legal_documents() const { 2702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return legal_documents_.get(); 2712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 272116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const std::set<std::string>& allowed_shipping_countries() const { 273116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch return allowed_shipping_countries_; 274116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch } 2752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private: 2772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) friend class WalletItemsTest; 2785d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) friend scoped_ptr<WalletItems> GetTestWalletItemsWithDetails( 2795d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const std::vector<RequiredAction>& required_actions, 2805d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const std::string& default_instrument_id, 2815d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const std::string& default_address_id, 2825d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) AmexPermission amex_permission); 2830f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) friend scoped_ptr<WalletItems> GetTestWalletItemsWithDefaultIds( 2840f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) RequiredAction action); 2852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) FRIEND_TEST_ALL_PREFIXES(WalletItemsTest, CreateWalletItems); 2862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) FRIEND_TEST_ALL_PREFIXES(WalletItemsTest, 2872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CreateWalletItemsWithRequiredActions); 2882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WalletItems(const std::vector<RequiredAction>& required_actions, 2902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const std::string& google_transaction_id, 2912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const std::string& default_instrument_id, 2922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const std::string& default_address_id, 293a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) AmexPermission amex_permission); 2942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Actions that must be completed by the user before a FullWallet can be 2962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // issued to them by the Online Wallet service. 2972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::vector<RequiredAction> required_actions_; 2982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // The id for this transaction issued by Google. 3002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string google_transaction_id_; 3012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // The id of the user's default instrument. 3032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string default_instrument_id_; 3042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // The id of the user's default address. 3062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string default_address_id_; 3072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 308f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // The index into |gaia_accounts_| of the account for which this object 309f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // holds data. 310f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) size_t active_account_index_; 311f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 312a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // The complete set of logged in GAIA accounts. 313a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) ScopedVector<GaiaAccount> gaia_accounts_; 314a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 3152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // The user's backing instruments. 3162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ScopedVector<MaskedInstrument> instruments_; 3172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // The user's shipping addresses. 3192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ScopedVector<Address> addresses_; 3202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Legal documents the user must accept before using Online Wallet. 3222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ScopedVector<LegalDocument> legal_documents_; 3232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 324116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // Country codes for allowed Wallet shipping destinations. 325116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch std::set<std::string> allowed_shipping_countries_; 326116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 32768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) // Whether Google Wallet allows American Express card for this merchant. 32868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) AmexPermission amex_permission_; 32968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 3302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(WalletItems); 3312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}; 3322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // namespace wallet 3342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // namespace autofill 3352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 336868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#endif // COMPONENTS_AUTOFILL_CONTENT_BROWSER_WALLET_WALLET_ITEMS_H_ 337