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

Side by Side Diff: chrome/browser/ui/autofill/autofill_dialog_controller_impl.cc

Issue 23717029: Disable submit button briefly when launching rAc dialog (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Rename number to count Created 7 years, 3 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/ui/autofill/autofill_dialog_controller_impl.h" 5 #include "chrome/browser/ui/autofill/autofill_dialog_controller_impl.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <map> 8 #include <map>
9 #include <string> 9 #include <string>
10 10
(...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after
107 // WebDB, and hence should not be modified, so that it remains consistent over 107 // WebDB, and hence should not be modified, so that it remains consistent over
108 // time. 108 // time.
109 const char kAutofillDialogOrigin[] = "Chrome Autofill dialog"; 109 const char kAutofillDialogOrigin[] = "Chrome Autofill dialog";
110 110
111 // HSL shift to gray out an image. 111 // HSL shift to gray out an image.
112 const color_utils::HSL kGrayImageShift = {-1, 0, 0.8}; 112 const color_utils::HSL kGrayImageShift = {-1, 0, 0.8};
113 113
114 // Limit Wallet items refresh rate to at most once per minute. 114 // Limit Wallet items refresh rate to at most once per minute.
115 const int kWalletItemsRefreshRateSeconds = 60; 115 const int kWalletItemsRefreshRateSeconds = 60;
116 116
117 // The number of milliseconds to delay enabling the submit button after showing
118 // the dialog. This delay prevents users from accidentally clicking the submit
119 // button on startup.
120 const int kSubmitButtonDelayMs = 1000;
121
117 // A helper class to make sure an AutofillDialogView knows when a series of 122 // A helper class to make sure an AutofillDialogView knows when a series of
118 // updates is incoming. 123 // updates is incoming.
119 class ScopedViewUpdates { 124 class ScopedViewUpdates {
120 public: 125 public:
121 explicit ScopedViewUpdates(AutofillDialogView* view) : view_(view) { 126 explicit ScopedViewUpdates(AutofillDialogView* view) : view_(view) {
122 if (view_) 127 if (view_)
123 view_->UpdatesStarted(); 128 view_->UpdatesStarted();
124 } 129 }
125 130
126 ~ScopedViewUpdates() { 131 ~ScopedViewUpdates() {
(...skipping 494 matching lines...) Expand 10 before | Expand all | Expand 10 after
621 base::Bind(common::DetailInputMatchesField, SECTION_SHIPPING), 626 base::Bind(common::DetailInputMatchesField, SECTION_SHIPPING),
622 &form_structure_); 627 &form_structure_);
623 628
624 SuggestionsUpdated(); 629 SuggestionsUpdated();
625 630
626 int show_count = 631 int show_count =
627 profile_->GetPrefs()->GetInteger(::prefs::kAutofillDialogShowCount); 632 profile_->GetPrefs()->GetInteger(::prefs::kAutofillDialogShowCount);
628 profile_->GetPrefs()->SetInteger(::prefs::kAutofillDialogShowCount, 633 profile_->GetPrefs()->SetInteger(::prefs::kAutofillDialogShowCount,
629 show_count + 1); 634 show_count + 1);
630 635
636 SubmitButtonDelayBegin();
637
631 // TODO(estade): don't show the dialog if the site didn't specify the right 638 // TODO(estade): don't show the dialog if the site didn't specify the right
632 // fields. First we must figure out what the "right" fields are. 639 // fields. First we must figure out what the "right" fields are.
633 view_.reset(CreateView()); 640 view_.reset(CreateView());
634 view_->Show(); 641 view_->Show();
635 GetManager()->AddObserver(this); 642 GetManager()->AddObserver(this);
636 643
637 // Try to see if the user is already signed-in. If signed-in, fetch the user's 644 // Try to see if the user is already signed-in. If signed-in, fetch the user's
638 // Wallet data. Otherwise, see if the user could be signed in passively. 645 // Wallet data. Otherwise, see if the user could be signed in passively.
639 // TODO(aruslan): UMA metrics for sign-in. 646 // TODO(aruslan): UMA metrics for sign-in.
640 signin_helper_.reset(new wallet::WalletSigninHelper( 647 signin_helper_.reset(new wallet::WalletSigninHelper(
(...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after
748 755
749 bool AutofillDialogControllerImpl::IsDialogButtonEnabled( 756 bool AutofillDialogControllerImpl::IsDialogButtonEnabled(
750 ui::DialogButton button) const { 757 ui::DialogButton button) const {
751 if (button == ui::DIALOG_BUTTON_OK) { 758 if (button == ui::DIALOG_BUTTON_OK) {
752 if (IsSubmitPausedOn(wallet::VERIFY_CVV)) 759 if (IsSubmitPausedOn(wallet::VERIFY_CVV))
753 return true; 760 return true;
754 761
755 if (ShouldShowSpinner() || is_submitting_) 762 if (ShouldShowSpinner() || is_submitting_)
756 return false; 763 return false;
757 764
765 if (submit_button_delay_timer_.IsRunning())
766 return false;
767
758 return true; 768 return true;
759 } 769 }
760 770
761 DCHECK_EQ(ui::DIALOG_BUTTON_CANCEL, button); 771 DCHECK_EQ(ui::DIALOG_BUTTON_CANCEL, button);
762 return !is_submitting_ || IsSubmitPausedOn(wallet::VERIFY_CVV); 772 return !is_submitting_ || IsSubmitPausedOn(wallet::VERIFY_CVV);
763 } 773 }
764 774
765 DialogOverlayState AutofillDialogControllerImpl::GetDialogOverlay() const { 775 DialogOverlayState AutofillDialogControllerImpl::GetDialogOverlay() const {
766 bool show_wallet_interstitial = IsPayingWithWallet() && is_submitting_ && 776 bool show_wallet_interstitial = IsPayingWithWallet() && is_submitting_ &&
767 !IsSubmitPausedOn(wallet::VERIFY_CVV); 777 !IsSubmitPausedOn(wallet::VERIFY_CVV);
(...skipping 1451 matching lines...) Expand 10 before | Expand all | Expand 10 after
2219 void AutofillDialogControllerImpl::ShowNewCreditCardBubble( 2229 void AutofillDialogControllerImpl::ShowNewCreditCardBubble(
2220 scoped_ptr<CreditCard> new_card, 2230 scoped_ptr<CreditCard> new_card,
2221 scoped_ptr<AutofillProfile> billing_profile) { 2231 scoped_ptr<AutofillProfile> billing_profile) {
2222 #if !defined(OS_ANDROID) 2232 #if !defined(OS_ANDROID)
2223 NewCreditCardBubbleController::Show(profile(), 2233 NewCreditCardBubbleController::Show(profile(),
2224 new_card.Pass(), 2234 new_card.Pass(),
2225 billing_profile.Pass()); 2235 billing_profile.Pass());
2226 #endif 2236 #endif
2227 } 2237 }
2228 2238
2239 void AutofillDialogControllerImpl::SubmitButtonDelayBegin() {
2240 submit_button_delay_timer_.Start(
2241 FROM_HERE,
2242 base::TimeDelta::FromMilliseconds(kSubmitButtonDelayMs),
2243 this,
2244 &AutofillDialogControllerImpl::OnSubmitButtonDelayEnd);
2245 }
2246
2247 void AutofillDialogControllerImpl::SubmitButtonDelayEndForTesting() {
2248 DCHECK(submit_button_delay_timer_.IsRunning());
2249 submit_button_delay_timer_.user_task().Run();
2250 submit_button_delay_timer_.Stop();
2251 }
2252
2229 AutofillDialogControllerImpl::AutofillDialogControllerImpl( 2253 AutofillDialogControllerImpl::AutofillDialogControllerImpl(
2230 content::WebContents* contents, 2254 content::WebContents* contents,
2231 const FormData& form_structure, 2255 const FormData& form_structure,
2232 const GURL& source_url, 2256 const GURL& source_url,
2233 const base::Callback<void(const FormStructure*, 2257 const base::Callback<void(const FormStructure*,
2234 const std::string&)>& callback) 2258 const std::string&)>& callback)
2235 : WebContentsObserver(contents), 2259 : WebContentsObserver(contents),
2236 profile_(Profile::FromBrowserContext(contents->GetBrowserContext())), 2260 profile_(Profile::FromBrowserContext(contents->GetBrowserContext())),
2237 initial_user_state_(AutofillMetrics::DIALOG_USER_STATE_UNKNOWN), 2261 initial_user_state_(AutofillMetrics::DIALOG_USER_STATE_UNKNOWN),
2238 form_structure_(form_structure), 2262 form_structure_(form_structure),
(...skipping 1094 matching lines...) Expand 10 before | Expand all | Expand 10 after
3333 backing_last_four = card.TypeAndLastFourDigits(); 3357 backing_last_four = card.TypeAndLastFourDigits();
3334 } 3358 }
3335 #if !defined(OS_ANDROID) 3359 #if !defined(OS_ANDROID)
3336 GeneratedCreditCardBubbleController::Show( 3360 GeneratedCreditCardBubbleController::Show(
3337 web_contents(), 3361 web_contents(),
3338 full_wallet_->TypeAndLastFourDigits(), 3362 full_wallet_->TypeAndLastFourDigits(),
3339 backing_last_four); 3363 backing_last_four);
3340 #endif 3364 #endif
3341 } 3365 }
3342 3366
3367 void AutofillDialogControllerImpl::OnSubmitButtonDelayEnd() {
3368 if (!view_)
3369 return;
3370 ScopedViewUpdates updates(view_.get());
3371 view_->UpdateButtonStrip();
3372 }
3373
3343 } // namespace autofill 3374 } // namespace autofill
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698