| Index: chrome/browser/views/autofill_profiles_view_win.cc
|
| ===================================================================
|
| --- chrome/browser/views/autofill_profiles_view_win.cc (revision 52727)
|
| +++ chrome/browser/views/autofill_profiles_view_win.cc (working copy)
|
| @@ -16,6 +16,7 @@
|
| #include "chrome/browser/browser.h"
|
| #include "chrome/browser/browser_list.h"
|
| #include "chrome/browser/browser_window.h"
|
| +#include "chrome/browser/metrics/user_metrics.h"
|
| #include "chrome/browser/pref_service.h"
|
| #include "chrome/browser/profile.h"
|
| #include "chrome/browser/views/list_background.h"
|
| @@ -62,12 +63,15 @@
|
| AutoFillProfilesView::AutoFillProfilesView(
|
| AutoFillDialogObserver* observer,
|
| PersonalDataManager* personal_data_manager,
|
| + Profile* profile,
|
| PrefService* preferences,
|
| AutoFillProfile* imported_profile,
|
| CreditCard* imported_credit_card)
|
| : observer_(observer),
|
| personal_data_manager_(personal_data_manager),
|
| + profile_(profile),
|
| preferences_(preferences),
|
| + enable_auto_fill_button_(NULL),
|
| add_address_button_(NULL),
|
| add_credit_card_button_(NULL),
|
| edit_button_(NULL),
|
| @@ -100,12 +104,13 @@
|
| int AutoFillProfilesView::Show(gfx::NativeWindow parent,
|
| AutoFillDialogObserver* observer,
|
| PersonalDataManager* personal_data_manager,
|
| + Profile* profile,
|
| PrefService* preferences,
|
| AutoFillProfile* imported_profile,
|
| CreditCard* imported_credit_card) {
|
| if (!instance_) {
|
| instance_ = new AutoFillProfilesView(observer, personal_data_manager,
|
| - preferences, imported_profile, imported_credit_card);
|
| + profile, preferences, imported_profile, imported_credit_card);
|
|
|
| // |instance_| will get deleted once Close() is called.
|
| views::Window::CreateChromeWindow(parent, gfx::Rect(), instance_);
|
| @@ -186,16 +191,30 @@
|
| DCHECK(add_credit_card_button_);
|
| DCHECK(edit_button_);
|
| DCHECK(remove_button_);
|
| + bool autofill_enabled = preferences_->GetBoolean(prefs::kAutoFillEnabled);
|
| + scroll_view_->SetEnabled(autofill_enabled);
|
| add_address_button_->SetEnabled(personal_data_manager_->IsDataLoaded() &&
|
| - !child_dialog_opened_);
|
| + !child_dialog_opened_ && autofill_enabled);
|
| add_credit_card_button_->SetEnabled(personal_data_manager_->IsDataLoaded() &&
|
| - !child_dialog_opened_);
|
| + !child_dialog_opened_ &&
|
| + autofill_enabled);
|
|
|
| int selected_row_count = scroll_view_->SelectedRowCount();
|
| - edit_button_->SetEnabled(selected_row_count == 1 && !child_dialog_opened_);
|
| - remove_button_->SetEnabled(selected_row_count > 0 && !child_dialog_opened_);
|
| + edit_button_->SetEnabled(selected_row_count == 1 && !child_dialog_opened_ &&
|
| + autofill_enabled);
|
| + remove_button_->SetEnabled(selected_row_count > 0 && !child_dialog_opened_ &&
|
| + autofill_enabled);
|
| }
|
|
|
| +void AutoFillProfilesView::UpdateProfileLabels() {
|
| + std::vector<AutoFillProfile*> profiles;
|
| + profiles.resize(profiles_set_.size());
|
| + for (size_t i = 0; i < profiles_set_.size(); ++i) {
|
| + profiles[i] = &(profiles_set_[i].address);
|
| + }
|
| + AutoFillProfile::AdjustInferredLabels(&profiles);
|
| +}
|
| +
|
| void AutoFillProfilesView::ChildWindowOpened() {
|
| child_dialog_opened_ = true;
|
| UpdateButtonState();
|
| @@ -333,6 +352,14 @@
|
| EditClicked();
|
| } else if (sender == remove_button_) {
|
| DeleteClicked();
|
| + } else if (sender == enable_auto_fill_button_) {
|
| + bool enabled = enable_auto_fill_button_->checked();
|
| + UserMetricsAction action(enabled ? "Options_FormAutofill_Enable" :
|
| + "Options_FormAutofill_Disable");
|
| + UserMetrics::RecordAction(action, profile_);
|
| + preferences_->SetBoolean(prefs::kAutoFillEnabled, enabled);
|
| + preferences_->ScheduleSavePersistentPrefs();
|
| + UpdateButtonState();
|
| }
|
| }
|
|
|
| @@ -379,16 +406,19 @@
|
| void AutoFillProfilesView::Init() {
|
| GetData();
|
|
|
| + enable_auto_fill_button_ = new views::Checkbox(
|
| + l10n_util::GetString(IDS_OPTIONS_AUTOFILL_ENABLE));
|
| + enable_auto_fill_button_->set_listener(this);
|
| + enable_auto_fill_button_->SetChecked(
|
| + preferences_->GetBoolean(prefs::kAutoFillEnabled));
|
| +
|
| billing_model_.set_address_labels(&profiles_set_);
|
|
|
| table_model_.reset(new ContentListTableModel(&profiles_set_,
|
| &credit_card_set_));
|
| std::vector<TableColumn> columns;
|
| - columns.resize(2);
|
| - columns[0] = TableColumn(IDS_AUTOFILL_LIST_HEADER_LABEL,
|
| - TableColumn::LEFT, -1, .33f);
|
| - columns.back().sortable = false;
|
| - columns[1] = TableColumn(IDS_AUTOFILL_LIST_HEADER_SUMMARY,
|
| + columns.resize(1);
|
| + columns[0] = TableColumn(IDS_AUTOFILL_LIST_HEADER_SUMMARY,
|
| TableColumn::LEFT, -1, .67f);
|
| columns.back().sortable = false;
|
|
|
| @@ -418,6 +448,11 @@
|
| views::GridLayout::USE_PREF, 0, 0);
|
|
|
| layout->StartRow(0, table_with_buttons_column_view_set_id);
|
| + layout->AddView(enable_auto_fill_button_, 3, 1, views::GridLayout::FILL,
|
| + views::GridLayout::FILL);
|
| + layout->AddPaddingRow(0, kRelatedControlVerticalSpacing);
|
| +
|
| + layout->StartRow(0, table_with_buttons_column_view_set_id);
|
| layout->AddView(scroll_view_, 1, 8, views::GridLayout::FILL,
|
| views::GridLayout::FILL);
|
| layout->AddView(add_address_button_);
|
| @@ -463,6 +498,7 @@
|
| profiles_set_.push_back(EditableSetInfo(*address_it));
|
| }
|
| }
|
| + UpdateProfileLabels();
|
|
|
| if (!imported_data_present) {
|
| credit_card_set_.reserve(personal_data_manager_->credit_cards().size());
|
| @@ -573,7 +609,6 @@
|
| // AutoFillProfilesView::EditableSetViewContents, static data:
|
| AutoFillProfilesView::EditableSetViewContents::TextFieldToAutoFill
|
| AutoFillProfilesView::EditableSetViewContents::address_fields_[] = {
|
| - { AutoFillProfilesView::EditableSetViewContents::TEXT_LABEL, NO_SERVER_DATA },
|
| { AutoFillProfilesView::EditableSetViewContents::TEXT_FULL_NAME,
|
| NAME_FULL },
|
| { AutoFillProfilesView::EditableSetViewContents::TEXT_COMPANY, COMPANY_NAME },
|
| @@ -598,7 +633,6 @@
|
|
|
| AutoFillProfilesView::EditableSetViewContents::TextFieldToAutoFill
|
| AutoFillProfilesView::EditableSetViewContents::credit_card_fields_[] = {
|
| - { AutoFillProfilesView::EditableSetViewContents::TEXT_LABEL, NO_SERVER_DATA },
|
| { AutoFillProfilesView::EditableSetViewContents::TEXT_CC_NAME,
|
| CREDIT_CARD_NAME },
|
| { AutoFillProfilesView::EditableSetViewContents::TEXT_CC_NUMBER,
|
| @@ -614,7 +648,6 @@
|
| std::vector<EditableSetInfo>::iterator field_set)
|
| : editable_fields_set_(field_set),
|
| temporary_info_(*editable_fields_set_),
|
| - label_warning_button_(NULL),
|
| observer_(observer),
|
| billing_model_(billing_model),
|
| combo_box_billing_(NULL),
|
| @@ -651,7 +684,6 @@
|
| kSubViewVerticalInsets, kSubViewHorizotalInsets);
|
| SetLayoutManager(layout);
|
| InitLayoutGrid(layout);
|
| - InitTitle(layout);
|
| if (temporary_info_.is_address)
|
| InitAddressFields(layout);
|
| else
|
| @@ -692,7 +724,7 @@
|
| it != phone_sub_views_.end() && phones_are_valid; ++it)
|
| phones_are_valid = (phones_are_valid && (*it)->IsValid());
|
|
|
| - return phones_are_valid && LabelValid();
|
| + return phones_are_valid;
|
| }
|
| case MessageBoxFlags::DIALOGBUTTON_CANCEL:
|
| return true;
|
| @@ -750,6 +782,8 @@
|
| observer_->table_model_->AddItem(index);
|
| else
|
| observer_->table_model_->UpdateItem(index);
|
| + if (temporary_info_.is_address)
|
| + observer_->UpdateProfileLabels();
|
| return true;
|
| }
|
|
|
| @@ -771,16 +805,10 @@
|
| for (int field = 0; field < arraysize(address_fields_); ++field) {
|
| DCHECK(text_fields_[address_fields_[field].text_field]);
|
| if (text_fields_[address_fields_[field].text_field] == sender) {
|
| - if (address_fields_[field].text_field == TEXT_LABEL) {
|
| - temporary_info_.address.set_label(new_contents);
|
| - // One of the address labels changed - update combo boxes
|
| - billing_model_->LabelChanged();
|
| - } else {
|
| - UpdateContentsPhoneViews(address_fields_[field].text_field,
|
| - sender, new_contents);
|
| - temporary_info_.address.SetInfo(
|
| - AutoFillType(address_fields_[field].type), new_contents);
|
| - }
|
| + UpdateContentsPhoneViews(address_fields_[field].text_field,
|
| + sender, new_contents);
|
| + temporary_info_.address.SetInfo(
|
| + AutoFillType(address_fields_[field].type), new_contents);
|
| UpdateButtons();
|
| return;
|
| }
|
| @@ -789,14 +817,10 @@
|
| for (int field = 0; field < arraysize(credit_card_fields_); ++field) {
|
| DCHECK(text_fields_[credit_card_fields_[field].text_field]);
|
| if (text_fields_[credit_card_fields_[field].text_field] == sender) {
|
| - if (credit_card_fields_[field].text_field == TEXT_LABEL) {
|
| - temporary_info_.credit_card.set_label(new_contents);
|
| - } else {
|
| - UpdateContentsPhoneViews(address_fields_[field].text_field,
|
| - sender, new_contents);
|
| - temporary_info_.credit_card.SetInfo(
|
| - AutoFillType(credit_card_fields_[field].type), new_contents);
|
| - }
|
| + UpdateContentsPhoneViews(address_fields_[field].text_field,
|
| + sender, new_contents);
|
| + temporary_info_.credit_card.SetInfo(
|
| + AutoFillType(credit_card_fields_[field].type), new_contents);
|
| UpdateButtons();
|
| return;
|
| }
|
| @@ -825,8 +849,10 @@
|
| if (new_index == -1) {
|
| NOTREACHED();
|
| } else {
|
| + DCHECK(new_index < static_cast<int>(observer_->profiles_set_.size()));
|
| temporary_info_.credit_card.set_billing_address(
|
| - billing_model_->GetItemAt(new_index));
|
| + IntToString16(
|
| + observer_->profiles_set_[new_index].address.unique_id()));
|
| }
|
| } else if (combo_box == combo_box_month_) {
|
| if (new_index == -1) {
|
| @@ -851,45 +877,11 @@
|
|
|
| /////////////////////////////////////////////////////////////////////////////
|
| // AutoFillProfilesView::EditableSetViewContents, private:
|
| -void AutoFillProfilesView::EditableSetViewContents::InitTitle(
|
| - views::GridLayout* layout) {
|
| - std::wstring title;
|
| - if (temporary_info_.is_address) {
|
| - title = temporary_info_.address.Label();
|
| - if (title.empty())
|
| - title = l10n_util::GetString(IDS_AUTOFILL_NEW_ADDRESS);
|
| - } else {
|
| - title = temporary_info_.credit_card.Label();
|
| - if (title.empty())
|
| - title = l10n_util::GetString(IDS_AUTOFILL_NEW_CREDITCARD);
|
| - }
|
| - label_warning_button_ = new views::ImageButton(this);
|
| - label_warning_button_->SetEnabled(false);
|
| - label_warning_button_->SetImageAlignment(views::ImageButton::ALIGN_LEFT,
|
| - views::ImageButton::ALIGN_MIDDLE);
|
| - text_fields_[TEXT_LABEL] =
|
| - new views::Textfield(views::Textfield::STYLE_DEFAULT);
|
| - text_fields_[TEXT_LABEL]->SetText(temporary_info_.is_address ?
|
| - temporary_info_.address.Label() : temporary_info_.credit_card.Label());
|
| - text_fields_[TEXT_LABEL]->SetController(this);
|
| -
|
| - layout->AddPaddingRow(0, kRelatedControlVerticalSpacing);
|
| - layout->StartRow(0, triple_column_leading_view_set_id_);
|
| - layout->AddView(new views::Label(
|
| - l10n_util::GetString(IDS_AUTOFILL_DIALOG_LABEL)));
|
| -
|
| - layout->StartRow(0, triple_column_fill_view_set_id_);
|
| - layout->AddView(text_fields_[TEXT_LABEL]);
|
| - layout->AddView(label_warning_button_);
|
| -}
|
| -
|
| void AutoFillProfilesView::EditableSetViewContents::InitAddressFields(
|
| views::GridLayout* layout) {
|
| DCHECK(temporary_info_.is_address);
|
|
|
| for (int field = 0; field < arraysize(address_fields_); ++field) {
|
| - if (address_fields_[field].text_field == TEXT_LABEL)
|
| - continue;
|
| DCHECK(!text_fields_[address_fields_[field].text_field]);
|
| text_fields_[address_fields_[field].text_field] =
|
| new views::Textfield(views::Textfield::STYLE_DEFAULT);
|
| @@ -1004,8 +996,6 @@
|
| combo_box_model_year_->set_cb_strings(&model_strings);
|
|
|
| for (int field = 0; field < arraysize(credit_card_fields_); ++field) {
|
| - if (credit_card_fields_[field].text_field == TEXT_LABEL)
|
| - continue;
|
| DCHECK(!text_fields_[credit_card_fields_[field].text_field]);
|
| text_fields_[credit_card_fields_[field].text_field] =
|
| new views::Textfield(views::Textfield::STYLE_DEFAULT);
|
| @@ -1032,9 +1022,9 @@
|
| // Address combo boxes.
|
| combo_box_billing_ = new views::Combobox(billing_model_);
|
| combo_box_billing_->set_listener(this);
|
| - combo_box_billing_->SetSelectedItem(
|
| - billing_model_->GetIndex(
|
| - temporary_info_.credit_card.billing_address()));
|
| + int billing_id = -1;
|
| + if (StringToInt(temporary_info_.credit_card.billing_address(), &billing_id))
|
| + combo_box_billing_->SetSelectedItem(billing_model_->GetIndex(billing_id));
|
| billing_model_->UsedWithComboBox(combo_box_billing_);
|
|
|
| layout->AddPaddingRow(0, kRelatedControlVerticalSpacing);
|
| @@ -1167,22 +1157,7 @@
|
| return label;
|
| }
|
|
|
| -bool AutoFillProfilesView::EditableSetViewContents::LabelValid() const {
|
| - if (temporary_info_.is_address)
|
| - return !temporary_info_.address.Label().empty();
|
| - else
|
| - return !temporary_info_.credit_card.Label().empty();
|
| -}
|
| -
|
| void AutoFillProfilesView::EditableSetViewContents::UpdateButtons() {
|
| - SkBitmap* image = observer_->GetWarningBimap(LabelValid());
|
| - if (LabelValid()) {
|
| - label_warning_button_->SetTooltipText(std::wstring());
|
| - } else {
|
| - label_warning_button_->SetTooltipText(l10n_util::GetString(
|
| - IDS_AUTOFILL_BAD_LABEL_TOOLTIP));
|
| - }
|
| - label_warning_button_->SetImage(views::CustomButton::BS_NORMAL, image);
|
| GetDialogClientView()->UpdateDialogButtons();
|
| }
|
|
|
| @@ -1226,12 +1201,12 @@
|
| (*it)->ModelChanged();
|
| }
|
|
|
| -int AutoFillProfilesView::AddressComboBoxModel::GetIndex(const string16 &s) {
|
| +int AutoFillProfilesView::AddressComboBoxModel::GetIndex(int unique_id) {
|
| int shift = is_billing_ ? 0 : 1;
|
| DCHECK(address_labels_);
|
| for (size_t i = 0; i < address_labels_->size(); ++i) {
|
| DCHECK(address_labels_->at(i).is_address);
|
| - if (address_labels_->at(i).address.Label() == s)
|
| + if (address_labels_->at(i).address.unique_id() == unique_id)
|
| return i + shift;
|
| }
|
| return -1;
|
| @@ -1252,7 +1227,8 @@
|
| if (!is_billing_ && !index)
|
| return l10n_util::GetString(IDS_AUTOFILL_DIALOG_SAME_AS_BILLING);
|
| DCHECK(address_labels_->at(index - shift).is_address);
|
| - std::wstring label = address_labels_->at(index - shift).address.Label();
|
| + std::wstring label =
|
| + address_labels_->at(index - shift).address.Label();
|
| if (label.empty())
|
| label = l10n_util::GetString(IDS_AUTOFILL_NEW_ADDRESS);
|
| return label;
|
| @@ -1322,18 +1298,10 @@
|
| int row, int column_id) {
|
| DCHECK(row < static_cast<int>(profiles_->size() + credit_cards_->size()));
|
| if (row < static_cast<int>(profiles_->size())) {
|
| - if (column_id == IDS_AUTOFILL_LIST_HEADER_LABEL) {
|
| - return profiles_->at(row).address.Label();
|
| - } else {
|
| - return profiles_->at(row).address.PreviewSummary();
|
| - }
|
| + return profiles_->at(row).address.PreviewSummary();
|
| } else {
|
| row -= profiles_->size();
|
| - if (column_id == IDS_AUTOFILL_LIST_HEADER_LABEL) {
|
| - return credit_cards_->at(row).credit_card.Label();
|
| - } else {
|
| - return credit_cards_->at(row).credit_card.PreviewSummary();
|
| - }
|
| + return credit_cards_->at(row).credit_card.PreviewSummary();
|
| }
|
| }
|
|
|
| @@ -1374,6 +1342,6 @@
|
| PersonalDataManager* personal_data_manager =
|
| profile->GetPersonalDataManager();
|
| DCHECK(personal_data_manager);
|
| - AutoFillProfilesView::Show(parent, observer, personal_data_manager,
|
| + AutoFillProfilesView::Show(parent, observer, personal_data_manager, profile,
|
| profile->GetPrefs(), NULL, NULL);
|
| }
|
|
|