summaryrefslogtreecommitdiffstats
path: root/chrome/browser/views/autofill_profiles_view_win.cc
diff options
context:
space:
mode:
authorsky@chromium.org <sky@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-07-22 19:38:28 +0000
committersky@chromium.org <sky@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-07-22 19:38:28 +0000
commit1b38d0b4a83aee2e741297b97181fdded474da82 (patch)
treef3f56b1770cf50edabd376ff8984d366f6e6d480 /chrome/browser/views/autofill_profiles_view_win.cc
parent3e7ffcc5a9a5c606b2b3d3f9746e3657855272b5 (diff)
downloadchromium_src-1b38d0b4a83aee2e741297b97181fdded474da82.zip
chromium_src-1b38d0b4a83aee2e741297b97181fdded474da82.tar.gz
chromium_src-1b38d0b4a83aee2e741297b97181fdded474da82.tar.bz2
Makes the auto fill editor on windows only enable the ok button if at
least one field has text. Also, fixes crash if you double click and the table is empty. BUG=47742 TEST=create a new address/credit card in the autofill profile manager and make sure the ok button is only enabled if at least one field has text. Review URL: http://codereview.chromium.org/2809070 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@53368 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/views/autofill_profiles_view_win.cc')
-rw-r--r--chrome/browser/views/autofill_profiles_view_win.cc53
1 files changed, 40 insertions, 13 deletions
diff --git a/chrome/browser/views/autofill_profiles_view_win.cc b/chrome/browser/views/autofill_profiles_view_win.cc
index 1ea9457..e7ebf7a 100644
--- a/chrome/browser/views/autofill_profiles_view_win.cc
+++ b/chrome/browser/views/autofill_profiles_view_win.cc
@@ -151,6 +151,8 @@ void AutoFillProfilesView::AddClicked(int group_type) {
void AutoFillProfilesView::EditClicked() {
DCHECK(scroll_view_);
int index = scroll_view_->FirstSelectedRow();
+ if (index == -1)
+ return; // Happens if user double clicks and the table is empty.
DCHECK(index >= 0);
DCHECK(index < static_cast<int>(profiles_set_.size() +
credit_card_set_.size()));
@@ -717,19 +719,44 @@ AutoFillProfilesView::EditableSetViewContents::GetDialogButtonLabel(
bool AutoFillProfilesView::EditableSetViewContents::IsDialogButtonEnabled(
MessageBoxFlags::DialogButton button) const {
switch (button) {
- case MessageBoxFlags::DIALOGBUTTON_OK: {
- bool phones_are_valid = true;
- for (std::vector<PhoneSubView*>::const_iterator it =
- phone_sub_views_.begin();
- it != phone_sub_views_.end() && phones_are_valid; ++it)
- phones_are_valid = (phones_are_valid && (*it)->IsValid());
-
- return phones_are_valid;
- }
- case MessageBoxFlags::DIALOGBUTTON_CANCEL:
- return true;
- default:
- break;
+ case MessageBoxFlags::DIALOGBUTTON_OK: {
+ // Enable the ok button if at least one non-phone number field has text,
+ // or the phone numbers are valid.
+ bool valid = false;
+ TextFieldToAutoFill* fields;
+ int field_count;
+ if (temporary_info_.is_address) {
+ fields = address_fields_;
+ field_count = arraysize(address_fields_);
+ } else {
+ fields = credit_card_fields_;
+ field_count = arraysize(credit_card_fields_);
+ }
+ for (int i = 0; i < field_count; ++i) {
+ DCHECK(text_fields_[fields[i].text_field]);
+ // Phone and fax are handled separately.
+ if (fields[i].text_field != TEXT_PHONE_PHONE &&
+ fields[i].text_field != TEXT_FAX_PHONE &&
+ !text_fields_[fields[i].text_field]->text().empty()) {
+ valid = true;
+ break;
+ }
+ }
+ for (std::vector<PhoneSubView*>::const_iterator i =
+ phone_sub_views_.begin(); i != phone_sub_views_.end(); ++i) {
+ if (!(*i)->IsValid()) {
+ valid = false;
+ break;
+ } else if (!valid && !(*i)->text_phone()->text().empty()) {
+ valid = true;
+ }
+ }
+ return valid;
+ }
+ case MessageBoxFlags::DIALOGBUTTON_CANCEL:
+ return true;
+ default:
+ break;
}
NOTREACHED();
return false;