blob: 8339f6a653d9a8e2826e26c938736b961018bfe4 [file] [log] [blame]
// 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_UI_AUTOFILL_DATA_MODEL_WRAPPER_H_
#define CHROME_BROWSER_UI_AUTOFILL_DATA_MODEL_WRAPPER_H_
#include "base/compiler_specific.h"
#include "base/string16.h"
#include "chrome/browser/ui/autofill/autofill_dialog_types.h"
#include "components/autofill/browser/field_types.h"
#include "components/autofill/content/browser/wallet/wallet_items.h"
namespace gfx {
class Image;
}
namespace autofill {
class AutofillDataModel;
class AutofillProfile;
class CreditCard;
class FormStructure;
namespace wallet {
class Address;
class FullWallet;
}
// A glue class that allows uniform interactions with autocomplete data sources,
// regardless of their type. Implementations are intended to be lightweight and
// copyable, only holding weak references to their backing model.
class DataModelWrapper {
public:
virtual ~DataModelWrapper();
// Returns the data for a specific autocomplete type.
virtual string16 GetInfo(AutofillFieldType type) const = 0;
// Returns the icon, if any, that represents this model.
virtual gfx::Image GetIcon();
// Fills in |inputs| with the data that this model contains (|inputs| is an
// out-param).
virtual void FillInputs(DetailInputs* inputs);
// Returns text to display to the user to summarize this data source. The
// default implementation assumes this is an address.
virtual string16 GetDisplayText();
// Fills in |form_structure| with the data that this model contains. |inputs|
// and |comparator| are used to determine whether each field in the
// FormStructure should be filled in or left alone. Returns whether any fields
// in |form_structure| were found to be matching.
bool FillFormStructure(
const DetailInputs& inputs,
const InputFieldComparator& compare,
FormStructure* form_structure) const;
protected:
DataModelWrapper();
// Fills in |field| with data from the model.
virtual void FillFormField(AutofillField* field) const;
private:
DISALLOW_COPY_AND_ASSIGN(DataModelWrapper);
};
// A DataModelWrapper that does not hold data and does nothing when told to
// fill in a form.
class EmptyDataModelWrapper : public DataModelWrapper {
public:
EmptyDataModelWrapper();
virtual ~EmptyDataModelWrapper();
virtual string16 GetInfo(AutofillFieldType type) const OVERRIDE;
protected:
virtual void FillFormField(AutofillField* field) const OVERRIDE;
DISALLOW_COPY_AND_ASSIGN(EmptyDataModelWrapper);
};
// A DataModelWrapper for Autofill data.
class AutofillDataModelWrapper : public DataModelWrapper {
public:
AutofillDataModelWrapper(const AutofillDataModel* data_model, size_t variant);
virtual ~AutofillDataModelWrapper();
virtual string16 GetInfo(AutofillFieldType type) const OVERRIDE;
protected:
virtual void FillFormField(AutofillField* field) const OVERRIDE;
size_t variant() const { return variant_; }
private:
const AutofillDataModel* data_model_;
const size_t variant_;
DISALLOW_COPY_AND_ASSIGN(AutofillDataModelWrapper);
};
// A DataModelWrapper for Autofill profiles.
class AutofillProfileWrapper : public AutofillDataModelWrapper {
public:
AutofillProfileWrapper(const AutofillProfile* profile, size_t variant);
virtual ~AutofillProfileWrapper();
virtual void FillInputs(DetailInputs* inputs) OVERRIDE;
private:
const AutofillProfile* profile_;
DISALLOW_COPY_AND_ASSIGN(AutofillProfileWrapper);
};
// A DataModelWrapper specifically for Autofill CreditCard data.
class AutofillCreditCardWrapper : public AutofillDataModelWrapper {
public:
explicit AutofillCreditCardWrapper(const CreditCard* card);
virtual ~AutofillCreditCardWrapper();
virtual string16 GetInfo(AutofillFieldType type) const OVERRIDE;
virtual gfx::Image GetIcon() OVERRIDE;
virtual string16 GetDisplayText() OVERRIDE;
protected:
virtual void FillFormField(AutofillField* field) const OVERRIDE;
private:
const CreditCard* card_;
DISALLOW_COPY_AND_ASSIGN(AutofillCreditCardWrapper);
};
// A DataModelWrapper for Wallet addresses.
class WalletAddressWrapper : public DataModelWrapper {
public:
explicit WalletAddressWrapper(const wallet::Address* address);
virtual ~WalletAddressWrapper();
virtual string16 GetInfo(AutofillFieldType type) const OVERRIDE;
virtual string16 GetDisplayText() OVERRIDE;
private:
const wallet::Address* address_;
DISALLOW_COPY_AND_ASSIGN(WalletAddressWrapper);
};
// A DataModelWrapper for Wallet instruments.
class WalletInstrumentWrapper : public DataModelWrapper {
public:
explicit WalletInstrumentWrapper(
const wallet::WalletItems::MaskedInstrument* instrument);
virtual ~WalletInstrumentWrapper();
virtual string16 GetInfo(AutofillFieldType type) const OVERRIDE;
virtual gfx::Image GetIcon() OVERRIDE;
virtual string16 GetDisplayText() OVERRIDE;
private:
const wallet::WalletItems::MaskedInstrument* instrument_;
DISALLOW_COPY_AND_ASSIGN(WalletInstrumentWrapper);
};
// A DataModelWrapper for FullWallet billing data.
class FullWalletBillingWrapper : public DataModelWrapper {
public:
explicit FullWalletBillingWrapper(wallet::FullWallet* full_wallet);
virtual ~FullWalletBillingWrapper();
virtual string16 GetInfo(AutofillFieldType type) const OVERRIDE;
virtual string16 GetDisplayText() OVERRIDE;
private:
wallet::FullWallet* full_wallet_;
DISALLOW_COPY_AND_ASSIGN(FullWalletBillingWrapper);
};
// A DataModelWrapper for FullWallet shipping data.
class FullWalletShippingWrapper : public DataModelWrapper {
public:
explicit FullWalletShippingWrapper(wallet::FullWallet* full_wallet);
virtual ~FullWalletShippingWrapper();
virtual string16 GetInfo(AutofillFieldType type) const OVERRIDE;
private:
wallet::FullWallet* full_wallet_;
DISALLOW_COPY_AND_ASSIGN(FullWalletShippingWrapper);
};
} // namespace autofill
#endif // CHROME_BROWSER_UI_AUTOFILL_DATA_MODEL_WRAPPER_H_