| 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 a7406ad0ff8f434b1e73a0779cdfef9cadd1564d..123c6461c468a5ebc05c798c0c0fc18a5485cc9e 100644
|
| --- a/chrome/browser/ui/autofill/autofill_dialog_controller_impl.cc
|
| +++ b/chrome/browser/ui/autofill/autofill_dialog_controller_impl.cc
|
| @@ -481,6 +481,26 @@ gfx::Image GetGeneratedCardImage(const string16& card_number) {
|
| return gfx::Image(skia);
|
| }
|
|
|
| +// Returns the ID of the address or instrument that should be selected in the
|
| +// UI, given that the |default_id| is currently the default ID on the Wallet
|
| +// server, |previous_default_id| was the default ID prior to re-fetching the
|
| +// Wallet data, and |previously_selected_id| was the ID of the item selected in
|
| +// the dialog prior to re-fetching the Wallet data.
|
| +std::string GetIdToSelect(const std::string& default_id,
|
| + const std::string& previous_default_id,
|
| + const std::string& previously_selected_id) {
|
| + // If the default ID changed since the last fetch of the Wallet data, select
|
| + // it rather than the previously selected item, as the user's intention in
|
| + // changing the default was probably to use it.
|
| + if (default_id != previous_default_id)
|
| + return default_id;
|
| +
|
| + // Otherwise, prefer the previously selected item, if there was one.
|
| + return !previously_selected_id.empty() ? previously_selected_id : default_id;
|
| +}
|
| +
|
| +
|
| +
|
| } // namespace
|
|
|
| AutofillDialogViewDelegate::~AutofillDialogViewDelegate() {}
|
| @@ -842,13 +862,18 @@ bool AutofillDialogControllerImpl::IsSubmitPausedOn(
|
| }
|
|
|
| void AutofillDialogControllerImpl::GetWalletItems() {
|
| - DCHECK(previously_selected_instrument_id_.empty());
|
| - DCHECK(previously_selected_shipping_address_id_.empty());
|
| ScopedViewUpdates updates(view_.get());
|
|
|
| + previously_selected_instrument_id_.clear();
|
| + previously_selected_shipping_address_id_.clear();
|
| if (wallet_items_) {
|
| - if (ActiveInstrument())
|
| - previously_selected_instrument_id_ = ActiveInstrument()->object_id();
|
| + previous_default_instrument_id_ = wallet_items_->default_instrument_id();
|
| + previous_default_shipping_address_id_ = wallet_items_->default_address_id();
|
| +
|
| + const wallet::WalletItems::MaskedInstrument* instrument =
|
| + ActiveInstrument();
|
| + if (instrument)
|
| + previously_selected_instrument_id_ = instrument->object_id();
|
|
|
| const wallet::Address* address = ActiveShippingAddress();
|
| if (address)
|
| @@ -2387,13 +2412,12 @@ void AutofillDialogControllerImpl::SuggestionsUpdated() {
|
| addresses[i]->DisplayNameDetail());
|
|
|
| const std::string default_shipping_address_id =
|
| - !previously_selected_shipping_address_id_.empty() ?
|
| - previously_selected_shipping_address_id_ :
|
| - wallet_items_->default_address_id();
|
| + GetIdToSelect(wallet_items_->default_address_id(),
|
| + previous_default_shipping_address_id_,
|
| + previously_selected_shipping_address_id_);
|
| if (addresses[i]->object_id() == default_shipping_address_id)
|
| suggested_shipping_.SetCheckedItem(key);
|
| }
|
| - previously_selected_shipping_address_id_.clear();
|
|
|
| if (!IsSubmitPausedOn(wallet::VERIFY_CVV)) {
|
| const std::vector<wallet::WalletItems::MaskedInstrument*>& instruments =
|
| @@ -2423,14 +2447,13 @@ void AutofillDialogControllerImpl::SuggestionsUpdated() {
|
| first_active_instrument_key = key;
|
|
|
| const std::string default_instrument_id =
|
| - !previously_selected_instrument_id_.empty() ?
|
| - previously_selected_instrument_id_ :
|
| - wallet_items_->default_instrument_id();
|
| + GetIdToSelect(wallet_items_->default_instrument_id(),
|
| + previous_default_instrument_id_,
|
| + previously_selected_instrument_id_);
|
| if (instruments[i]->object_id() == default_instrument_id)
|
| default_instrument_key = key;
|
| }
|
| }
|
| - previously_selected_instrument_id_.clear();
|
|
|
| // TODO(estade): this should have a URL sublabel.
|
| suggested_cc_billing_.AddKeyedItem(
|
|
|