Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(535)

Unified Diff: chrome/browser/ui/autofill/autofill_dialog_controller_impl.cc

Issue 13625002: Change the behavior of the [X] Save details to Wallet checkbox notification to: (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: . Created 7 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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 ca6c44d7a58bb640b31025297d5c0a8e68f14af2..458492f655216d51757546d7a31e11e4c712deeb 100644
--- a/chrome/browser/ui/autofill/autofill_dialog_controller_impl.cc
+++ b/chrome/browser/ui/autofill/autofill_dialog_controller_impl.cc
@@ -253,11 +253,17 @@ AutofillDialogControllerImpl::AutofillDialogControllerImpl(
metric_logger_(metric_logger),
initial_user_state_(AutofillMetrics::DIALOG_USER_STATE_UNKNOWN),
dialog_type_(dialog_type),
+ is_first_run_(!profile_->GetPrefs()->HasPrefPath(
+ prefs::kAutofillDialogPayWithoutWallet)),
is_submitting_(false),
autocheckout_is_running_(false),
had_autocheckout_error_(false) {
// TODO(estade): remove duplicates from |form|?
DCHECK(!callback_.is_null());
+ if (is_first_run_) {
+ profile_->GetPrefs()->SetBoolean(prefs::kAutofillDialogPayWithoutWallet,
+ kPayWithoutWalletDefault);
+ }
}
AutofillDialogControllerImpl::~AutofillDialogControllerImpl() {
@@ -393,7 +399,7 @@ void AutofillDialogControllerImpl::Show() {
// Otherwise, see if the user could be signed in passively.
// TODO(aruslan): UMA metrics for sign-in.
if (account_chooser_model_.WalletIsSelected())
- StartFetchingWalletItems();
+ GetWalletItems();
Dan Beam 2013/04/05 02:50:08 this matches the other calls we have (e.g. GetFull
aruslan 2013/04/05 03:45:35 Ack. Here and in GetWalletItems below the coderevi
}
void AutofillDialogControllerImpl::Hide() {
@@ -541,43 +547,37 @@ bool AutofillDialogControllerImpl::IsSubmitPausedOn(
return full_wallet_ && full_wallet_->HasRequiredAction(required_action);
}
-void AutofillDialogControllerImpl::StartFetchingWalletItems() {
+void AutofillDialogControllerImpl::GetWalletItems() {
// TODO(dbeam): Add Risk capabilites once the UI supports risk challenges.
GetWalletClient()->GetWalletItems(
- source_url_,
- std::vector<wallet::WalletClient::RiskCapability>());
+ source_url_, std::vector<wallet::WalletClient::RiskCapability>());
}
void AutofillDialogControllerImpl::OnWalletOrSigninUpdate() {
- if (wallet_items_.get()) {
Dan Beam 2013/04/05 02:50:08 this needed to work without |wallet_items_|
aruslan 2013/04/05 03:45:35 Yup, it's already like this in another CL. In REQU
- DCHECK(!signin_helper_.get());
- switch (SignedInState()) {
- case SIGNED_IN:
- // Start fetching the user name if we don't know it yet.
- if (current_username_.empty()) {
- signin_helper_.reset(new wallet::WalletSigninHelper(
- this,
- profile_->GetRequestContext()));
- signin_helper_->StartUserNameFetch();
- }
- break;
+ switch (SignedInState()) {
+ case SIGNED_IN:
+ // Start fetching the user name if we don't know it yet.
+ if (current_username_.empty()) {
+ signin_helper_.reset(new wallet::WalletSigninHelper(
+ this, profile_->GetRequestContext()));
+ signin_helper_->StartUserNameFetch();
+ }
+ break;
- case REQUIRES_SIGN_IN:
- // TODO(aruslan): automatic sign-in?
- break;
+ case REQUIRES_SIGN_IN:
+ // TODO(aruslan): automatic sign-in?
+ break;
- case REQUIRES_PASSIVE_SIGN_IN:
- // Attempt to passively sign in the user.
- current_username_.clear();
- signin_helper_.reset(new wallet::WalletSigninHelper(
- this,
- profile_->GetRequestContext()));
- signin_helper_->StartPassiveSignin();
- break;
+ case REQUIRES_PASSIVE_SIGN_IN:
+ // Attempt to passively sign in the user.
+ current_username_.clear();
+ signin_helper_.reset(new wallet::WalletSigninHelper(
+ this, profile_->GetRequestContext()));
+ signin_helper_->StartPassiveSignin();
+ break;
- case REQUIRES_RESPONSE:
- NOTREACHED();
- }
+ case REQUIRES_RESPONSE:
+ NOTREACHED();
}
GenerateSuggestionsModels();
@@ -693,6 +693,17 @@ gfx::Image AutofillDialogControllerImpl::AccountChooserImage() {
return icon;
}
+bool AutofillDialogControllerImpl::GetPayWithoutWallet() const {
+ return profile_->GetPrefs()->GetBoolean(
+ prefs::kAutofillDialogPayWithoutWallet);
+}
+
+void AutofillDialogControllerImpl::SetPayWithoutWallet(
+ bool pay_without_wallet) {
+ profile_->GetPrefs()->SetBoolean(prefs::kAutofillDialogPayWithoutWallet,
+ pay_without_wallet);
+}
Dan Beam 2013/04/05 02:50:08 ^ this isn't strictly necessary to do in the contr
aruslan 2013/04/05 03:45:35 Currently, the account chooser is wired up to trig
+
string16 AutofillDialogControllerImpl::LabelForSection(DialogSection section)
const {
switch (section) {
@@ -1089,16 +1100,6 @@ void AutofillDialogControllerImpl::ViewClosed() {
metric);
}
- // Reset the view so that updates to the pref aren't processed.
- view_.reset();
- // On a successful submit, if the user manually selected "pay without wallet",
- // stop trying to pay with Wallet on future runs of the dialog.
- bool manually_selected_pay_without_wallet =
- !account_chooser_model_.WalletIsSelected() &&
- !account_chooser_model_.had_wallet_error();
- profile_->GetPrefs()->SetBoolean(prefs::kAutofillDialogPayWithoutWallet,
- manually_selected_pay_without_wallet);
-
delete this;
}
@@ -1106,27 +1107,44 @@ std::vector<DialogNotification>
AutofillDialogControllerImpl::CurrentNotifications() const {
std::vector<DialogNotification> notifications;
- if (account_chooser_model_.WalletIsSelected()) {
- if (SignedInState() == SIGNED_IN) {
- // On first run with a complete wallet profile, show a notification
- // explaining where this data came from.
- if (IsFirstRun() && HasCompleteWallet()) {
- notifications.push_back(DialogNotification(
- DialogNotification::EXPLANATORY_MESSAGE,
- l10n_util::GetStringUTF16(
- IDS_AUTOFILL_DIALOG_DETAILS_FROM_WALLET)));
+ if (account_chooser_model_.had_wallet_error()) {
+ // TODO(dbeam): pass along the Wallet error or remove from the translation.
+ // TODO(dbeam): figure out a way to dismiss this error after a while.
+ notifications.push_back(DialogNotification(
+ DialogNotification::WALLET_ERROR,
+ l10n_util::GetStringFUTF16(IDS_AUTOFILL_DIALOG_COMPLETE_WITHOUT_WALLET,
+ ASCIIToUTF16("Oops, [Wallet-Error]."))));
+ } else {
+ if (is_first_run_) {
+ if (SignedInState() == SIGNED_IN) {
+ if (HasCompleteWallet()) {
+ // First run, signed in, has a complete Google Wallet.
+ notifications.push_back(DialogNotification(
+ DialogNotification::EXPLANATORY_MESSAGE,
+ l10n_util::GetStringUTF16(
+ IDS_AUTOFILL_DIALOG_DETAILS_FROM_WALLET)));
+ } else {
+ // First run, signed in, has an incomplete (or no) Google Wallet.
+ notifications.push_back(DialogNotification(
+ DialogNotification::WALLET_USAGE_CONFIRMATION,
+ l10n_util::GetStringUTF16(
+ IDS_AUTOFILL_DIALOG_SAVE_DETAILS_IN_WALLET)));
+ }
} else {
+ // First run, not signed in, wallet promo.
notifications.push_back(DialogNotification(
- DialogNotification::WALLET_USAGE_CONFIRMATION,
+ DialogNotification::WALLET_SIGNIN_PROMO,
l10n_util::GetStringUTF16(
- IDS_AUTOFILL_DIALOG_SAVE_DETAILS_IN_WALLET)));
+ IDS_AUTOFILL_DIALOG_SIGN_IN_AND_SAVE_DETAILS)));
}
- } else if (IsFirstRun()) {
- // If the user is not signed in, show an upsell notification on first run.
+ } else if (SignedInState() == SIGNED_IN && !HasCompleteWallet()) {
+ // After first run, signed in.
notifications.push_back(DialogNotification(
- DialogNotification::WALLET_SIGNIN_PROMO,
+ DialogNotification::WALLET_USAGE_CONFIRMATION,
l10n_util::GetStringUTF16(
- IDS_AUTOFILL_DIALOG_SIGN_IN_AND_SAVE_DETAILS)));
+ IDS_AUTOFILL_DIALOG_SAVE_DETAILS_IN_WALLET)));
+ } else {
+ // If the user isn't signed in and it's after the first run, no promo.
}
}
@@ -1155,16 +1173,6 @@ std::vector<DialogNotification>
l10n_util::GetStringUTF16(IDS_AUTOFILL_DIALOG_AUTOCHECKOUT_ERROR)));
}
- if (account_chooser_model_.had_wallet_error()) {
- // TODO(dbeam): pass along the Wallet error or remove from the translation.
- // TODO(dbeam): figure out a way to dismiss this error after a while.
- notifications.push_back(DialogNotification(
- DialogNotification::WALLET_ERROR,
- l10n_util::GetStringFUTF16(
- IDS_AUTOFILL_DIALOG_COMPLETE_WITHOUT_WALLET,
- ASCIIToUTF16("Oops, [Wallet-Error]."))));
- }
-
return notifications;
}
@@ -1305,7 +1313,7 @@ void AutofillDialogControllerImpl::Observe(
if (wallet::IsSignInContinueUrl(load_details->entry->GetVirtualURL())) {
EndSignInFlow();
if (account_chooser_model_.WalletIsSelected())
- StartFetchingWalletItems();
+ GetWalletItems();
}
}
@@ -1366,8 +1374,7 @@ void AutofillDialogControllerImpl::OnPassiveSigninSuccess(
const std::string& username) {
current_username_ = username;
signin_helper_.reset();
- wallet_items_.reset();
- StartFetchingWalletItems();
+ GetWalletItems();
}
void AutofillDialogControllerImpl::OnUserNameFetchSuccess(
@@ -1478,14 +1485,8 @@ void AutofillDialogControllerImpl::AccountChoiceChanged() {
if (!view_)
return;
- // Whenever the user changes the current account, the Wallet data should be
- // cleared. If the user has chosen a Wallet account, an attempt to fetch
- // the Wallet data is made to see if the user is still signed in.
- // This will trigger a passive sign-in if required.
- // TODO(aruslan): integrate an automatic sign-in.
- wallet_items_.reset();
- if (account_chooser_model_.WalletIsSelected())
- StartFetchingWalletItems();
+ if (account_chooser_model_.WalletIsSelected() && !wallet_items_)
Dan Beam 2013/04/05 02:50:08 ^ we could probably re-fetch if we want...
aruslan 2013/04/05 03:45:35 Without the account chooser CL this doesn't matter
+ GetWalletItems();
GenerateSuggestionsModels();
view_->ModelChanged();
@@ -1556,11 +1557,6 @@ void AutofillDialogControllerImpl::OnWalletSigninError() {
GetWalletClient()->CancelPendingRequests();
}
-bool AutofillDialogControllerImpl::IsFirstRun() const {
- PrefService* prefs = profile_->GetPrefs();
- return !prefs->HasPrefPath(prefs::kAutofillDialogPayWithoutWallet);
-}
-
void AutofillDialogControllerImpl::GenerateSuggestionsModels() {
suggested_email_.Reset();
suggested_cc_.Reset();

Powered by Google App Engine
This is Rietveld 408576698