Commit c33869b6 authored by estade@chromium.org's avatar estade@chromium.org

git add data_model_wrapper.* again

BUG=174937
TBR=raymes@chromium.org

Review URL: https://codereview.chromium.org/12263023

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@182350 0039d316-1c4b-4281-b951-d872f2087c98
parent b5093a79
// 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.
#include "chrome/browser/ui/autofill/data_model_wrapper.h"
#include "base/callback.h"
#include "base/utf_string_conversions.h"
#include "chrome/browser/autofill/autofill_country.h"
#include "chrome/browser/autofill/credit_card.h"
#include "chrome/browser/autofill/form_group.h"
#include "chrome/browser/autofill/form_structure.h"
#include "chrome/browser/autofill/wallet/wallet_address.h"
#include "chrome/browser/autofill/wallet/wallet_address.h"
#include "chrome/browser/autofill/wallet/wallet_items.h"
#include "ui/base/resource/resource_bundle.h"
#include "ui/gfx/image/image.h"
namespace autofill {
DataModelWrapper::~DataModelWrapper() {}
string16 DataModelWrapper::GetDisplayText() {
string16 comma = ASCIIToUTF16(", ");
string16 label = GetInfo(NAME_FULL) + comma + GetInfo(ADDRESS_HOME_LINE1);
string16 address2 = GetInfo(ADDRESS_HOME_LINE2);
if (!address2.empty())
label += comma + address2;
label += ASCIIToUTF16("\n") +
GetInfo(ADDRESS_HOME_CITY) + comma +
GetInfo(ADDRESS_HOME_STATE) + ASCIIToUTF16(" ") +
GetInfo(ADDRESS_HOME_ZIP);
return label;
}
void DataModelWrapper::FillFormStructure(
const DetailInputs& inputs,
const InputFieldComparator& compare,
FormStructure* form_structure) {
for (size_t i = 0; i < form_structure->field_count(); ++i) {
AutofillField* field = form_structure->field(i);
for (size_t j = 0; j < inputs.size(); ++j) {
if (compare.Run(inputs[j], *field)) {
FillFormField(field);
break;
}
}
}
}
// AutofillDataModelWrapper
AutofillDataModelWrapper::AutofillDataModelWrapper(const FormGroup* form_group,
size_t variant)
: form_group_(form_group),
variant_(variant) {}
AutofillDataModelWrapper::~AutofillDataModelWrapper() {}
string16 AutofillDataModelWrapper::GetInfo(AutofillFieldType type) {
return form_group_->GetInfo(type, AutofillCountry::ApplicationLocale());
}
gfx::Image AutofillDataModelWrapper::GetIcon() {
return gfx::Image();
}
void AutofillDataModelWrapper::FillInputs(DetailInputs* inputs) {
// TODO(estade): use |variant_|?
const std::string app_locale = AutofillCountry::ApplicationLocale();
for (size_t j = 0; j < inputs->size(); ++j) {
(*inputs)[j].autofilled_value =
form_group_->GetInfo((*inputs)[j].type, app_locale);
}
}
void AutofillDataModelWrapper::FillFormField(AutofillField* field) {
form_group_->FillFormField(*field, variant_, field);
}
// AutofillCreditCardWrapper
AutofillCreditCardWrapper::AutofillCreditCardWrapper(const CreditCard* card)
: AutofillDataModelWrapper(card, 0),
card_(card) {}
AutofillCreditCardWrapper::~AutofillCreditCardWrapper() {}
gfx::Image AutofillCreditCardWrapper::GetIcon() {
ui::ResourceBundle& rb = ui::ResourceBundle::GetSharedInstance();
return rb.GetImageNamed(card_->IconResourceId());
}
string16 AutofillCreditCardWrapper::GetDisplayText() {
return card_->TypeAndLastFourDigits();
}
// WalletAddressWrapper
WalletAddressWrapper::WalletAddressWrapper(
const wallet::Address* address) : address_(address) {}
WalletAddressWrapper::~WalletAddressWrapper() {}
string16 WalletAddressWrapper::GetInfo(AutofillFieldType type) {
return address_->GetInfo(type);
}
gfx::Image WalletAddressWrapper::GetIcon() {
return gfx::Image();
}
void WalletAddressWrapper::FillInputs(DetailInputs* inputs) {
for (size_t j = 0; j < inputs->size(); ++j) {
(*inputs)[j].autofilled_value = address_->GetInfo((*inputs)[j].type);
}
}
void WalletAddressWrapper::FillFormField(AutofillField* field) {
field->value = GetInfo(field->type());
}
// WalletInstrumentWrapper
WalletInstrumentWrapper::WalletInstrumentWrapper(
const wallet::WalletItems::MaskedInstrument* instrument)
: instrument_(instrument) {}
WalletInstrumentWrapper::~WalletInstrumentWrapper() {}
string16 WalletInstrumentWrapper::GetInfo(AutofillFieldType type) {
// TODO(estade): implement.
return string16(ASCIIToUTF16("foo"));
}
gfx::Image WalletInstrumentWrapper::GetIcon() {
// TODO(estade): implement.
return gfx::Image();
}
void WalletInstrumentWrapper::FillInputs(DetailInputs* inputs) {
// TODO(estade): implement.
}
string16 WalletInstrumentWrapper::GetDisplayText() {
// TODO(estade): implement better.
return UTF8ToUTF16(instrument_->descriptive_name());
}
void WalletInstrumentWrapper::FillFormField(AutofillField* field) {
field->value = GetInfo(field->type());
}
} // namespace autofill
// 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/autofill/field_types.h"
#include "chrome/browser/autofill/wallet/wallet_items.h"
#include "chrome/browser/ui/autofill/autofill_dialog_types.h"
class CreditCard;
class FormGroup;
class FormStructure;
namespace gfx {
class Image;
}
namespace wallet {
class Address;
}
namespace autofill {
// 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) = 0;
// Returns the icon, if any, that represents this model.
virtual gfx::Image GetIcon() = 0;
// Fills in |inputs| with the data that this model contains (|inputs| is an
// out-param).
virtual void FillInputs(DetailInputs* inputs) = 0;
// 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.
void FillFormStructure(
const DetailInputs& inputs,
const InputFieldComparator& compare,
FormStructure* form_structure);
protected:
// Fills in |field| with data from the model.
virtual void FillFormField(AutofillField* field) = 0;
};
// A DataModelWrapper for Autofill data.
class AutofillDataModelWrapper : public DataModelWrapper {
public:
AutofillDataModelWrapper(const FormGroup* form_group, size_t variant);
virtual ~AutofillDataModelWrapper();
virtual string16 GetInfo(AutofillFieldType type) OVERRIDE;
virtual gfx::Image GetIcon() OVERRIDE;
virtual void FillInputs(DetailInputs* inputs) OVERRIDE;
protected:
virtual void FillFormField(AutofillField* field) OVERRIDE;
private:
const FormGroup* form_group_;
const size_t variant_;
};
// A DataModelWrapper specifically for Autofill CreditCard data.
class AutofillCreditCardWrapper : public AutofillDataModelWrapper {
public:
explicit AutofillCreditCardWrapper(const CreditCard* card);
virtual ~AutofillCreditCardWrapper();
virtual gfx::Image GetIcon() OVERRIDE;
virtual string16 GetDisplayText() OVERRIDE;
private:
const CreditCard* card_;
};
// A DataModelWrapper for Wallet addresses.
class WalletAddressWrapper : public DataModelWrapper {
public:
explicit WalletAddressWrapper(const wallet::Address* address);
virtual ~WalletAddressWrapper();
virtual string16 GetInfo(AutofillFieldType type) OVERRIDE;
virtual gfx::Image GetIcon() OVERRIDE;
virtual void FillInputs(DetailInputs* inputs) OVERRIDE;
protected:
virtual void FillFormField(AutofillField* field) OVERRIDE;
private:
const wallet::Address* address_;
};
// A DataModelWrapper for Wallet instruments.
class WalletInstrumentWrapper : public DataModelWrapper {
public:
explicit WalletInstrumentWrapper(
const wallet::WalletItems::MaskedInstrument* instrument);
virtual ~WalletInstrumentWrapper();
virtual string16 GetInfo(AutofillFieldType type) OVERRIDE;
virtual gfx::Image GetIcon() OVERRIDE;
virtual void FillInputs(DetailInputs* inputs) OVERRIDE;
virtual string16 GetDisplayText() OVERRIDE;
protected:
virtual void FillFormField(AutofillField* field) OVERRIDE;
private:
const wallet::WalletItems::MaskedInstrument* instrument_;
};
}
#endif // CHROME_BROWSER_UI_AUTOFILL_DATA_MODEL_WRAPPER_H_
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment