This source file includes following definitions.
- metric_logger_
- MenuWillShow
- SelectWalletAccount
- SelectUseAutofill
- HasAccountsToChoose
- SetWalletAccounts
- ClearWalletAccounts
- GetActiveWalletAccountName
- GetActiveWalletAccountIndex
- IsCommandIdChecked
- IsCommandIdEnabled
- GetAcceleratorForCommandId
- ExecuteCommand
- MenuWillShow
- SetHadWalletError
- SetHadWalletSigninError
- WalletIsSelected
- ReconstructMenuItems
- DoAccountSwitch
#include "chrome/browser/ui/autofill/account_chooser_model.h"
#include "base/bind.h"
#include "base/prefs/pref_service.h"
#include "base/strings/string_number_conversions.h"
#include "base/strings/stringprintf.h"
#include "base/strings/utf_string_conversions.h"
#include "base/time/time.h"
#include "chrome/browser/profiles/profile.h"
#include "chrome/common/pref_names.h"
#include "components/autofill/core/browser/autofill_metrics.h"
#include "grit/generated_resources.h"
#include "grit/theme_resources.h"
#include "ui/base/l10n/l10n_util.h"
#include "ui/base/resource/resource_bundle.h"
namespace autofill {
const int AccountChooserModel::kWalletAddAccountId = 0;
const int AccountChooserModel::kAutofillItemId = 1;
const int AccountChooserModel::kWalletAccountsStartId = 2;
AccountChooserModelDelegate::~AccountChooserModelDelegate() {}
AccountChooserModel::AccountChooserModel(
AccountChooserModelDelegate* delegate,
Profile* profile,
bool disable_wallet,
const AutofillMetrics& metric_logger)
: ui::SimpleMenuModel(this),
delegate_(delegate),
checked_item_(kWalletAccountsStartId),
had_wallet_error_(false),
metric_logger_(metric_logger) {
if (profile->GetPrefs()->GetBoolean(
::prefs::kAutofillDialogPayWithoutWallet) ||
profile->IsOffTheRecord() ||
disable_wallet) {
checked_item_ = kAutofillItemId;
}
ReconstructMenuItems();
}
AccountChooserModel::~AccountChooserModel() {}
void AccountChooserModel::MenuWillShow() {
ui::SimpleMenuModel::MenuWillShow();
}
void AccountChooserModel::SelectWalletAccount(size_t user_index) {
DCHECK(user_index == 0U || user_index < wallet_accounts_.size());
checked_item_ = kWalletAccountsStartId + user_index;
}
void AccountChooserModel::SelectUseAutofill() {
checked_item_ = kAutofillItemId;
}
bool AccountChooserModel::HasAccountsToChoose() const {
return !wallet_accounts_.empty();
}
void AccountChooserModel::SetWalletAccounts(
const std::vector<std::string>& accounts,
size_t active_index) {
wallet_accounts_ = accounts;
SelectWalletAccount(active_index);
ReconstructMenuItems();
delegate_->UpdateAccountChooserView();
}
void AccountChooserModel::ClearWalletAccounts() {
wallet_accounts_.clear();
if (WalletIsSelected())
checked_item_ = kWalletAccountsStartId;
ReconstructMenuItems();
delegate_->UpdateAccountChooserView();
}
base::string16 AccountChooserModel::GetActiveWalletAccountName() const {
if (wallet_accounts_.empty())
return base::string16();
return base::UTF8ToUTF16(wallet_accounts_[GetActiveWalletAccountIndex()]);
}
size_t AccountChooserModel::GetActiveWalletAccountIndex() const {
if (!WalletIsSelected())
return 0;
return checked_item_ - kWalletAccountsStartId;
}
bool AccountChooserModel::IsCommandIdChecked(int command_id) const {
return command_id == checked_item_;
}
bool AccountChooserModel::IsCommandIdEnabled(int command_id) const {
if (command_id != kAutofillItemId && had_wallet_error_)
return false;
return true;
}
bool AccountChooserModel::GetAcceleratorForCommandId(
int command_id,
ui::Accelerator* accelerator) {
return false;
}
void AccountChooserModel::ExecuteCommand(int command_id, int event_flags) {
if (checked_item_ == command_id)
return;
AutofillMetrics::DialogUiEvent chooser_event;
if (command_id == kAutofillItemId) {
chooser_event =
AutofillMetrics::DIALOG_UI_ACCOUNT_CHOOSER_SWITCHED_TO_AUTOFILL;
} else if (command_id == kWalletAddAccountId) {
chooser_event =
AutofillMetrics::DIALOG_UI_ACCOUNT_CHOOSER_TRIED_TO_ADD_ACCOUNT;
} else if (checked_item_ == kAutofillItemId) {
chooser_event =
AutofillMetrics::DIALOG_UI_ACCOUNT_CHOOSER_SWITCHED_TO_WALLET;
} else {
chooser_event =
AutofillMetrics::DIALOG_UI_ACCOUNT_CHOOSER_SWITCHED_WALLET_ACCOUNT;
}
metric_logger_.LogDialogUiEvent(chooser_event);
DoAccountSwitch(command_id);
}
void AccountChooserModel::MenuWillShow(ui::SimpleMenuModel* source) {
delegate_->AccountChooserWillShow();
}
void AccountChooserModel::SetHadWalletError() {
had_wallet_error_ = true;
ClearWalletAccounts();
DoAccountSwitch(kAutofillItemId);
}
void AccountChooserModel::SetHadWalletSigninError() {
ClearWalletAccounts();
DoAccountSwitch(kAutofillItemId);
}
bool AccountChooserModel::WalletIsSelected() const {
return checked_item_ != kAutofillItemId;
}
void AccountChooserModel::ReconstructMenuItems() {
Clear();
if (!wallet_accounts_.empty()) {
for (size_t i = 0; i < wallet_accounts_.size(); ++i) {
int item_id = kWalletAccountsStartId + i;
AddCheckItem(item_id, base::UTF8ToUTF16(wallet_accounts_[i]));
}
} else if (checked_item_ == kWalletAccountsStartId) {
AddCheckItem(kWalletAccountsStartId,
l10n_util::GetStringUTF16(IDS_AUTOFILL_DIALOG_GOOGLE_WALLET));
}
AddCheckItemWithStringId(kWalletAddAccountId,
IDS_AUTOFILL_DIALOG_ADD_ACCOUNT);
AddCheckItemWithStringId(kAutofillItemId,
IDS_AUTOFILL_DIALOG_PAY_WITHOUT_WALLET);
}
void AccountChooserModel::DoAccountSwitch(int command_id) {
if (checked_item_ == command_id)
return;
if (command_id == kWalletAddAccountId) {
delegate_->AddAccount();
return;
}
checked_item_ = command_id;
ReconstructMenuItems();
delegate_->AccountChoiceChanged();
}
}