Index: chrome/browser/ui/autofill/autofill_dialog_controller_impl.cc |
diff --git a/chrome/browser/ui/autofill/autofill_dialog_controller_impl.cc b/chrome/browser/ui/autofill/autofill_dialog_controller_impl.cc |
index a2ad411eb6103c197bbb6e6959d6b707bbe00c39..a61b34286527c491f971e9269811828d2e336157 100644 |
--- a/chrome/browser/ui/autofill/autofill_dialog_controller_impl.cc |
+++ b/chrome/browser/ui/autofill/autofill_dialog_controller_impl.cc |
@@ -165,18 +165,21 @@ void GetBillingInfoFromOutputs(const DetailOutputMap& output, |
TrimWhitespace(it->second, TRIM_ALL, &trimmed); |
// Special case CVC as CreditCard just swallows it. |
- if (it->first->type == CREDIT_CARD_VERIFICATION_CODE) { |
- *cvc = trimmed; |
+ if (cvc && it->first->type == CREDIT_CARD_VERIFICATION_CODE) { |
Evan Stade
2013/03/13 01:54:10
shouldn't you put the if (cvc) check inside this b
Dan Beam
2013/03/13 03:05:47
Done.
|
+ cvc->assign(trimmed); |
} else { |
// Copy the credit card name to |profile| in addition to |card| as |
// wallet::Instrument requires a recipient name for its billing address. |
- if (it->first->type == CREDIT_CARD_NAME) |
+ if (profile && it->first->type == CREDIT_CARD_NAME) |
profile->SetRawInfo(NAME_FULL, trimmed); |
- if (AutofillType(it->first->type).group() == AutofillType::CREDIT_CARD) |
- card->SetRawInfo(it->first->type, trimmed); |
- else |
- profile->SetRawInfo(it->first->type, trimmed); |
+ if (AutofillType(it->first->type).group() == AutofillType::CREDIT_CARD) { |
+ if (card) |
+ card->SetRawInfo(it->first->type, trimmed); |
+ } else { |
Evan Stade
2013/03/13 01:54:10
merge else { if into else if
Dan Beam
2013/03/13 03:05:47
Done.
|
+ if (profile) |
+ profile->SetRawInfo(it->first->type, trimmed); |
+ } |
} |
} |
} |
@@ -1330,8 +1333,19 @@ void AutofillDialogControllerImpl::FillOutputForSectionWithComparator( |
return; |
if (!IsManuallyEditingSection(section)) { |
- if (section == SECTION_CC_BILLING) { |
- // TODO(dbeam): implement. |
+ if (IsPayingWithWallet()) { |
+ bool is_billing = section == SECTION_SHIPPING || |
+ section == SECTION_CC_BILLING; |
+ const DetailInputs& inputs = RequestedFieldsForSection(section); |
+ 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)) { |
+ field->value = full_wallet_->GetInfo(field->type(), is_billing); |
+ break; |
+ } |
+ } |
+ } |
} else { |
scoped_ptr<DataModelWrapper> model = CreateWrapper(section); |
// Only fill in data that is associated with this section. |
@@ -1348,34 +1362,33 @@ void AutofillDialogControllerImpl::FillOutputForSectionWithComparator( |
DetailOutputMap output; |
view_->GetUserInput(section, &output); |
- if (IsPayingWithWallet()) { |
- // TODO(dbeam): implement. |
- } else { |
- // Save the info as new or edited data and fill it into |form_structure_|. |
- if (section == SECTION_CC) { |
- CreditCard card; |
- FillFormGroupFromOutputs(output, &card); |
+ scoped_ptr<CreditCard> card; |
+ scoped_ptr<string16> cvc; |
+ if (section == SECTION_CC || section == SECTION_CC_BILLING) { |
+ card.reset(new CreditCard()); |
+ cvc.reset(new string16()); |
+ } |
- if (view_->SaveDetailsLocally()) |
- GetManager()->SaveImportedCreditCard(card); |
+ AutofillProfile profile; |
+ GetBillingInfoFromOutputs(output, card.get(), cvc.get(), &profile); |
- FillFormStructureForSection(card, 0, section, compare); |
+ // TODO(estade): we should probably edit the existing profile in the cases |
+ // where the input data is based on an existing profile (user clicked "Edit" |
+ // or autofill popup filled in the form). |
+ if (card.get()) { |
+ if (view_->SaveDetailsLocally()) |
+ GetManager()->SaveImportedCreditCard(*card); |
- // Again, CVC needs special-casing. Fill it in directly from |output|. |
- SetCvcResult(GetValueForType(output, CREDIT_CARD_VERIFICATION_CODE)); |
- } else { |
- AutofillProfile profile; |
- FillFormGroupFromOutputs(output, &profile); |
+ FillFormStructureForSection(*card, 0, section, compare); |
+ } |
- // TODO(estade): we should probably edit the existing profile in the |
- // cases where the input data is based on an existing profile (user |
- // clicked "Edit" or autofill popup filled in the form). |
- if (view_->SaveDetailsLocally()) |
- GetManager()->SaveImportedProfile(profile); |
+ if (cvc.get() && !cvc->empty()) |
+ SetCvcResult(*cvc); |
- FillFormStructureForSection(profile, 0, section, compare); |
- } |
- } |
+ if (view_->SaveDetailsLocally()) |
+ GetManager()->SaveImportedProfile(profile); |
+ |
+ FillFormStructureForSection(profile, 0, section, compare); |
} |
} |