summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorsky@chromium.org <sky@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-08-09 16:33:08 +0000
committersky@chromium.org <sky@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-08-09 16:33:08 +0000
commitf3fa4072e0afc0d39ec2293015cd97af9f9e481a (patch)
treec8ab979482e82c92e25d9e840698e5055cbd0e44
parent92ae3884f0208cdf97e7bf3236379d85b810d8d5 (diff)
downloadchromium_src-f3fa4072e0afc0d39ec2293015cd97af9f9e481a.zip
chromium_src-f3fa4072e0afc0d39ec2293015cd97af9f9e481a.tar.gz
chromium_src-f3fa4072e0afc0d39ec2293015cd97af9f9e481a.tar.bz2
Fixes bug where the billing address combobox would not show newly
created addresses. This also fixes bug where removing address or changing address would not be reflected in billing address combobox. BUG=51217 TEST=see bug Review URL: http://codereview.chromium.org/3038052 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@55408 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r--chrome/browser/views/autofill_profiles_view_win.cc24
-rw-r--r--chrome/browser/views/autofill_profiles_view_win.h16
2 files changed, 26 insertions, 14 deletions
diff --git a/chrome/browser/views/autofill_profiles_view_win.cc b/chrome/browser/views/autofill_profiles_view_win.cc
index f902aa6..6e9901f 100644
--- a/chrome/browser/views/autofill_profiles_view_win.cc
+++ b/chrome/browser/views/autofill_profiles_view_win.cc
@@ -184,6 +184,7 @@ void AutoFillProfilesView::DeleteClicked() {
last_view_row = table_model_->RowCount() - 1;
if (last_view_row >= 0)
scroll_view_->Select(scroll_view_->ViewToModel(last_view_row));
+ UpdateBillingModel();
UpdateButtonState();
}
@@ -218,6 +219,10 @@ void AutoFillProfilesView::UpdateProfileLabels() {
AutoFillProfile::AdjustInferredLabels(&profiles);
}
+void AutoFillProfilesView::UpdateBillingModel() {
+ billing_model_.SetAddressLabels(profiles_set_);
+}
+
void AutoFillProfilesView::ChildWindowOpened() {
child_dialog_opened_ = true;
UpdateButtonState();
@@ -415,7 +420,7 @@ void AutoFillProfilesView::Init() {
enable_auto_fill_button_->SetChecked(
preferences_->GetBoolean(prefs::kAutoFillEnabled));
- billing_model_.set_address_labels(&profiles_set_);
+ billing_model_.SetAddressLabels(profiles_set_);
table_model_.reset(new ContentListTableModel(&profiles_set_,
&credit_card_set_));
@@ -789,6 +794,7 @@ bool AutoFillProfilesView::EditableSetViewContents::Cancel() {
// Remove added item - it is last in the list.
if (temporary_info_.is_address) {
observer_->profiles_set_.pop_back();
+ observer_->UpdateBillingModel();
} else {
observer_->credit_card_set_.pop_back();
}
@@ -809,8 +815,10 @@ bool AutoFillProfilesView::EditableSetViewContents::Accept() {
observer_->table_model_->AddItem(index);
else
observer_->table_model_->UpdateItem(index);
- if (temporary_info_.is_address)
+ if (temporary_info_.is_address) {
observer_->UpdateProfileLabels();
+ observer_->UpdateBillingModel();
+ }
return true;
}
@@ -1222,10 +1230,11 @@ AutoFillProfilesView::AddressComboBoxModel::AddressComboBoxModel(
: is_billing_(is_billing) {
}
-void AutoFillProfilesView::AddressComboBoxModel::set_address_labels(
- const std::vector<EditableSetInfo>* address_labels) {
- for (size_t i = 0; i < address_labels->size(); ++i) {
- const EditableSetInfo& item = address_labels->at(i);
+void AutoFillProfilesView::AddressComboBoxModel::SetAddressLabels(
+ const std::vector<EditableSetInfo>& address_labels) {
+ address_labels_.clear();
+ for (size_t i = 0; i < address_labels.size(); ++i) {
+ const EditableSetInfo& item = address_labels[i];
DCHECK(item.is_address);
FieldTypeSet fields;
item.address.GetAvailableFieldTypes(&fields);
@@ -1242,6 +1251,7 @@ void AutoFillProfilesView::AddressComboBoxModel::set_address_labels(
}
address_labels_.push_back(item);
}
+ NotifyChanged();
}
void AutoFillProfilesView::AddressComboBoxModel::UsedWithComboBox(
@@ -1249,7 +1259,7 @@ void AutoFillProfilesView::AddressComboBoxModel::UsedWithComboBox(
combo_boxes_.push_back(combo_box);
}
-void AutoFillProfilesView::AddressComboBoxModel::LabelChanged() {
+void AutoFillProfilesView::AddressComboBoxModel::NotifyChanged() {
for (std::list<views::Combobox*>::iterator it = combo_boxes_.begin();
it != combo_boxes_.end();
++it)
diff --git a/chrome/browser/views/autofill_profiles_view_win.h b/chrome/browser/views/autofill_profiles_view_win.h
index ced1943..69eb057 100644
--- a/chrome/browser/views/autofill_profiles_view_win.h
+++ b/chrome/browser/views/autofill_profiles_view_win.h
@@ -85,6 +85,10 @@ class AutoFillProfilesView : public views::View,
// Updates inferred labels.
void UpdateProfileLabels();
+ // Updates the billing model. This is invoked any time the profile_set_
+ // changes.
+ void UpdateBillingModel();
+
// Following two functions are called from opened child dialog to
// disable/enable buttons.
void ChildWindowOpened();
@@ -230,7 +234,7 @@ class AutoFillProfilesView : public views::View,
class AddressComboBoxModel;
class StringVectorComboboxModel;
- // Sub-view dealing with addresses.
+ // Sub-view for editing/adding a credit card or address.
class EditableSetViewContents : public views::View,
public views::DialogDelegate,
public views::ButtonListener,
@@ -352,10 +356,8 @@ class AutoFillProfilesView : public views::View,
explicit AddressComboBoxModel(bool is_billing);
virtual ~AddressComboBoxModel() {}
- // Should be called only once. No other function should be called before it.
- // Does not own |address_labels|. To update the model text,
- // update label in one of the profiles and call LabelChanged()
- void set_address_labels(const std::vector<EditableSetInfo>* address_labels);
+ // Updates address_labels_ from |address_labels|.
+ void SetAddressLabels(const std::vector<EditableSetInfo>& address_labels);
// When you add a CB view that relies on this model, call this function
// so the CB can be notified if strings change. Can be called multiple
@@ -367,7 +369,7 @@ class AutoFillProfilesView : public views::View,
void ClearComboBoxes() { combo_boxes_.clear(); }
// Call this function if one of the labels has changed
- void LabelChanged();
+ void NotifyChanged();
// Gets index of the item in the model or -1 if not found.
int GetIndex(int unique_id);
@@ -377,7 +379,7 @@ class AutoFillProfilesView : public views::View,
virtual std::wstring GetItemAt(int index);
private:
- std::list<views::Combobox *> combo_boxes_;
+ std::list<views::Combobox*> combo_boxes_;
std::vector<EditableSetInfo> address_labels_;
bool is_billing_;