Chromium Code Reviews| Index: chrome/browser/ui/autofill/autofill_dialog_models.cc |
| diff --git a/chrome/browser/ui/autofill/autofill_dialog_models.cc b/chrome/browser/ui/autofill/autofill_dialog_models.cc |
| index 78d7d35aa792fe7427dd444487c760d40e2b0436..4e153b9179fcdba134449af83f87f87601368c24 100644 |
| --- a/chrome/browser/ui/autofill/autofill_dialog_models.cc |
| +++ b/chrome/browser/ui/autofill/autofill_dialog_models.cc |
| @@ -98,8 +98,9 @@ void SuggestionsMenuModel::ExecuteCommand(int command_id, int event_flags) { |
| // AccountChooserModel --------------------------------------------------------- |
| -const int AccountChooserModel::kWalletItemId = 0; |
| +const int AccountChooserModel::kContentAreaWalletItemId = 0; |
|
Evan Stade
2013/03/29 23:08:45
I do not understand this variable name or its purp
aruslan
2013/03/30 00:07:47
Done.
|
| const int AccountChooserModel::kAutofillItemId = 1; |
| +const int AccountChooserModel::kFirstAccountItemId = 2; |
| AccountChooserModelDelegate::~AccountChooserModelDelegate() {} |
| @@ -109,32 +110,58 @@ AccountChooserModel::AccountChooserModel( |
| : ALLOW_THIS_IN_INITIALIZER_LIST(ui::SimpleMenuModel(this)), |
| account_delegate_(delegate), |
| prefs_(prefs), |
| - checked_item_(kWalletItemId), |
| + checked_item_(kContentAreaWalletItemId), |
| had_wallet_error_(false) { |
| pref_change_registrar_.Init(prefs); |
| pref_change_registrar_.Add( |
| prefs::kAutofillDialogPayWithoutWallet, |
| base::Bind(&AccountChooserModel::PrefChanged, base::Unretained(this))); |
| - |
| - // TODO(estade): proper strings and l10n. |
| - AddCheckItem(kWalletItemId, ASCIIToUTF16("Google Wallet")); |
| - SetIcon( |
| - kWalletItemId, |
| - ui::ResourceBundle::GetSharedInstance().GetImageNamed(IDR_WALLET_ICON)); |
| - AddCheckItemWithStringId(kAutofillItemId, |
| - IDS_AUTOFILL_DIALOG_PAY_WITHOUT_WALLET); |
| UpdateCheckmarkFromPref(); |
| + ReconstructMenuItems(); |
| } |
| AccountChooserModel::~AccountChooserModel() { |
| } |
| +void AccountChooserModel::ForceWalletAccountSelected() { |
| + if (checked_item_ == kContentAreaWalletItemId) return; |
|
Evan Stade
2013/03/29 23:08:45
please put return on a new line.
aruslan
2013/03/30 00:07:47
Done.
|
| + checked_item_ = kContentAreaWalletItemId; |
| + account_delegate_->AccountChoiceChanged(); |
| +} |
| + |
| +bool AccountChooserModel::HasAccountsToChoose() const { |
| + return !had_wallet_error_ && |
| + !(current_username_.empty() && available_accounts_.empty()); |
| +} |
| + |
| +void AccountChooserModel::SetAvailableAccounts( |
| + const std::vector<std::string>& accounts) { |
| + available_accounts_ = accounts; |
| + ReconstructMenuItems(); |
| +} |
| + |
| +void AccountChooserModel::SetCurrentlySignedInAccount( |
| + const std::string& account) { |
| + current_username_ = account; |
| + ReconstructMenuItems(); |
| +} |
| + |
| +std::string AccountChooserModel::GetCurrentlySignedInAccount() const { |
| + return current_username_; |
| +} |
| + |
| +void AccountChooserModel::ResetCurrentlySignedInAccount() { |
| + current_username_.clear(); |
| + ReconstructMenuItems(); |
| +} |
| + |
| bool AccountChooserModel::IsCommandIdChecked(int command_id) const { |
| return command_id == checked_item_; |
| } |
| bool AccountChooserModel::IsCommandIdEnabled(int command_id) const { |
| - if (command_id == kWalletItemId && had_wallet_error_) |
| + // Currently, _any_ (non-sign-in) error disables _all_ Wallet accounts. |
| + if (command_id != kAutofillItemId && had_wallet_error_) |
| return false; |
| return true; |
| @@ -155,18 +182,25 @@ void AccountChooserModel::ExecuteCommand(int command_id, int event_flags) { |
| } |
| void AccountChooserModel::SetHadWalletError() { |
| + // Any non-sign-in error disables all Wallet accounts. |
| had_wallet_error_ = true; |
| checked_item_ = kAutofillItemId; |
| + ResetCurrentlySignedInAccount(); |
| account_delegate_->AccountChoiceChanged(); |
| } |
| void AccountChooserModel::SetHadWalletSigninError() { |
| checked_item_ = kAutofillItemId; |
| + ResetCurrentlySignedInAccount(); |
| account_delegate_->AccountChoiceChanged(); |
| } |
| bool AccountChooserModel::WalletIsSelected() const { |
| - return checked_item_ == kWalletItemId; |
| + return checked_item_ != kAutofillItemId; |
| +} |
| + |
| +bool AccountChooserModel::IsCurrentlySignedInAccountSelected() const { |
| + return checked_item_ == kContentAreaWalletItemId; |
| } |
| void AccountChooserModel::PrefChanged(const std::string& pref) { |
| @@ -179,7 +213,32 @@ void AccountChooserModel::UpdateCheckmarkFromPref() { |
| if (prefs_->GetBoolean(prefs::kAutofillDialogPayWithoutWallet)) |
| checked_item_ = kAutofillItemId; |
| else |
| - checked_item_ = kWalletItemId; |
| + checked_item_ = kContentAreaWalletItemId; |
| +} |
| + |
| +void AccountChooserModel::ReconstructMenuItems() { |
| + // If menu has to be reconstructed, either the currently sign-in account |
| + // should be selected, or the autofill data should be used. |
| + DCHECK_GE(kAutofillItemId, checked_item_); |
| + Clear(); |
| + const gfx::Image& wallet_icon = |
| + ui::ResourceBundle::GetSharedInstance().GetImageNamed(IDR_WALLET_ICON); |
| + |
| + if (!current_username_.empty()) { |
| + AddCheckItem(kContentAreaWalletItemId, ASCIIToUTF16(current_username_)); |
| + SetIcon(GetIndexOfCommandId(kContentAreaWalletItemId), wallet_icon); |
| + } |
| + |
| + for (size_t i = 0; i < available_accounts_.size(); ++i) { |
| + if (available_accounts_[i] != current_username_) { |
| + AddCheckItem(kFirstAccountItemId + i, |
| + ASCIIToUTF16(available_accounts_[i])); |
| + SetIcon(GetIndexOfCommandId(kFirstAccountItemId + i), wallet_icon); |
| + } |
| + } |
| + |
| + AddCheckItemWithStringId(kAutofillItemId, |
| + IDS_AUTOFILL_DIALOG_PAY_WITHOUT_WALLET); |
| } |
| // MonthComboboxModel ---------------------------------------------------------- |