data_model_wrapper.h revision f2477e01787aa58f445919b809d89e252beef54f
1// Copyright (c) 2012 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 CHROME_BROWSER_UI_AUTOFILL_DATA_MODEL_WRAPPER_H_ 6#define CHROME_BROWSER_UI_AUTOFILL_DATA_MODEL_WRAPPER_H_ 7 8#include "base/compiler_specific.h" 9#include "base/strings/string16.h" 10#include "chrome/browser/ui/autofill/autofill_dialog_types.h" 11#include "components/autofill/content/browser/wallet/wallet_items.h" 12#include "components/autofill/core/browser/field_types.h" 13 14namespace gfx { 15class Image; 16} 17 18namespace autofill { 19 20class AutofillDataModel; 21class AutofillProfile; 22class AutofillType; 23class CreditCard; 24class FormStructure; 25 26namespace wallet { 27class Address; 28class FullWallet; 29} 30 31// A glue class that allows uniform interactions with autocomplete data sources, 32// regardless of their type. Implementations are intended to be lightweight and 33// copyable, only holding weak references to their backing model. 34class DataModelWrapper { 35 public: 36 virtual ~DataModelWrapper(); 37 38 // Fills in |inputs| with the data that this model contains (|inputs| is an 39 // out-param). 40 void FillInputs(DetailInputs* inputs); 41 42 // Returns the data for a specific autocomplete type in a format for filling 43 // into a web form. 44 virtual base::string16 GetInfo(const AutofillType& type) const = 0; 45 46 // Returns the data for a specified type in a format optimized for displaying 47 // to the user. 48 virtual base::string16 GetInfoForDisplay(const AutofillType& type) const; 49 50 // Returns the icon, if any, that represents this model. 51 virtual gfx::Image GetIcon(); 52 53 // Gets text to display to the user to summarize this data source. The 54 // default implementation assumes this is an address. Both params are required 55 // to be non-NULL and will be filled in with text that is vertically compact 56 // (but may take up a lot of horizontal space) and horizontally compact (but 57 // may take up a lot of vertical space) respectively. The return value will 58 // be true and the outparams will be filled in only if the data represented is 59 // complete and valid. 60 virtual bool GetDisplayText(base::string16* vertically_compact, 61 base::string16* horizontally_compact); 62 63 // Fills in |form_structure| with the data that this model contains. |inputs| 64 // and |comparator| are used to determine whether each field in the 65 // FormStructure should be filled in or left alone. Returns whether any fields 66 // in |form_structure| were found to be matching. 67 bool FillFormStructure( 68 const DetailInputs& inputs, 69 const InputFieldComparator& compare, 70 FormStructure* form_structure) const; 71 72 protected: 73 DataModelWrapper(); 74 75 private: 76 // Formats address data into a single string using |separator| between 77 // fields. 78 base::string16 GetAddressDisplayText(const base::string16& separator); 79 80 DISALLOW_COPY_AND_ASSIGN(DataModelWrapper); 81}; 82 83// A DataModelWrapper that does not hold data and does nothing when told to 84// fill in a form. 85class EmptyDataModelWrapper : public DataModelWrapper { 86 public: 87 EmptyDataModelWrapper(); 88 virtual ~EmptyDataModelWrapper(); 89 90 virtual base::string16 GetInfo(const AutofillType& type) const OVERRIDE; 91 92 protected: 93 DISALLOW_COPY_AND_ASSIGN(EmptyDataModelWrapper); 94}; 95 96// A DataModelWrapper for Autofill profiles. 97class AutofillProfileWrapper : public DataModelWrapper { 98 public: 99 explicit AutofillProfileWrapper(const AutofillProfile* profile); 100 AutofillProfileWrapper(const AutofillProfile* profile, 101 const AutofillType& variant_type, 102 size_t variant); 103 virtual ~AutofillProfileWrapper(); 104 105 virtual base::string16 GetInfo(const AutofillType& type) const OVERRIDE; 106 virtual base::string16 GetInfoForDisplay(const AutofillType& type) const 107 OVERRIDE; 108 109 protected: 110 // Returns the variant that should be used when dealing with an element that 111 // has the given |type|. 112 size_t GetVariantForType(const AutofillType& type) const; 113 114 private: 115 const AutofillProfile* profile_; 116 117 // The profile variant. |variant_| describes which variant of |variant_group_| 118 // to use in the profile. 119 FieldTypeGroup variant_group_; 120 size_t variant_; 121 122 DISALLOW_COPY_AND_ASSIGN(AutofillProfileWrapper); 123}; 124 125// A DataModelWrapper specifically for shipping address profiles. 126class AutofillShippingAddressWrapper : public AutofillProfileWrapper { 127 public: 128 explicit AutofillShippingAddressWrapper(const AutofillProfile* profile); 129 virtual ~AutofillShippingAddressWrapper(); 130 131 virtual base::string16 GetInfo(const AutofillType& type) const OVERRIDE; 132 133 private: 134 DISALLOW_COPY_AND_ASSIGN(AutofillShippingAddressWrapper); 135}; 136 137// A DataModelWrapper specifically for Autofill CreditCard data. 138class AutofillCreditCardWrapper : public DataModelWrapper { 139 public: 140 explicit AutofillCreditCardWrapper(const CreditCard* card); 141 virtual ~AutofillCreditCardWrapper(); 142 143 virtual base::string16 GetInfo(const AutofillType& type) const OVERRIDE; 144 virtual gfx::Image GetIcon() OVERRIDE; 145 virtual bool GetDisplayText(base::string16* vertically_compact, 146 base::string16* horizontally_compact) OVERRIDE; 147 148 private: 149 const CreditCard* card_; 150 151 DISALLOW_COPY_AND_ASSIGN(AutofillCreditCardWrapper); 152}; 153 154// A DataModelWrapper for Wallet addresses. 155class WalletAddressWrapper : public DataModelWrapper { 156 public: 157 explicit WalletAddressWrapper(const wallet::Address* address); 158 virtual ~WalletAddressWrapper(); 159 160 virtual base::string16 GetInfo(const AutofillType& type) const OVERRIDE; 161 virtual base::string16 GetInfoForDisplay(const AutofillType& type) const 162 OVERRIDE; 163 virtual bool GetDisplayText(base::string16* vertically_compact, 164 base::string16* horizontally_compact) OVERRIDE; 165 166 private: 167 const wallet::Address* address_; 168 169 DISALLOW_COPY_AND_ASSIGN(WalletAddressWrapper); 170}; 171 172// A DataModelWrapper for Wallet instruments. 173class WalletInstrumentWrapper : public DataModelWrapper { 174 public: 175 explicit WalletInstrumentWrapper( 176 const wallet::WalletItems::MaskedInstrument* instrument); 177 virtual ~WalletInstrumentWrapper(); 178 179 virtual base::string16 GetInfo(const AutofillType& type) const OVERRIDE; 180 virtual base::string16 GetInfoForDisplay(const AutofillType& type) const 181 OVERRIDE; 182 virtual gfx::Image GetIcon() OVERRIDE; 183 virtual bool GetDisplayText(base::string16* vertically_compact, 184 base::string16* horizontally_compact) OVERRIDE; 185 186 private: 187 const wallet::WalletItems::MaskedInstrument* instrument_; 188 189 DISALLOW_COPY_AND_ASSIGN(WalletInstrumentWrapper); 190}; 191 192// A DataModelWrapper for FullWallet billing data. 193class FullWalletBillingWrapper : public DataModelWrapper { 194 public: 195 explicit FullWalletBillingWrapper(wallet::FullWallet* full_wallet); 196 virtual ~FullWalletBillingWrapper(); 197 198 virtual base::string16 GetInfo(const AutofillType& type) const OVERRIDE; 199 virtual bool GetDisplayText(base::string16* vertically_compact, 200 base::string16* horizontally_compact) OVERRIDE; 201 202 private: 203 wallet::FullWallet* full_wallet_; 204 205 DISALLOW_COPY_AND_ASSIGN(FullWalletBillingWrapper); 206}; 207 208// A DataModelWrapper for FullWallet shipping data. 209class FullWalletShippingWrapper : public DataModelWrapper { 210 public: 211 explicit FullWalletShippingWrapper(wallet::FullWallet* full_wallet); 212 virtual ~FullWalletShippingWrapper(); 213 214 virtual base::string16 GetInfo(const AutofillType& type) const OVERRIDE; 215 216 private: 217 wallet::FullWallet* full_wallet_; 218 219 DISALLOW_COPY_AND_ASSIGN(FullWalletShippingWrapper); 220}; 221 222// A DataModelWrapper to copy the output of one section to the input of another. 223class FieldMapWrapper : public DataModelWrapper { 224 public: 225 explicit FieldMapWrapper(const FieldValueMap& field_map); 226 virtual ~FieldMapWrapper(); 227 228 virtual base::string16 GetInfo(const AutofillType& type) const OVERRIDE; 229 230 private: 231 const FieldValueMap& field_map_; 232 233 DISALLOW_COPY_AND_ASSIGN(FieldMapWrapper); 234}; 235 236} // namespace autofill 237 238#endif // CHROME_BROWSER_UI_AUTOFILL_DATA_MODEL_WRAPPER_H_ 239