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

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

Issue 23033016: Remove autocheckout code. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 4 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 592 matching lines...) Expand 10 before | Expand all | Expand 10 after
603 // If the user switched away from this tab and then switched back, reload the 603 // If the user switched away from this tab and then switched back, reload the
604 // Wallet items, in case they've changed. 604 // Wallet items, in case they've changed.
605 int seconds_elapsed_since_last_refresh = 605 int seconds_elapsed_since_last_refresh =
606 (base::TimeTicks::Now() - last_wallet_items_fetch_timestamp_).InSeconds(); 606 (base::TimeTicks::Now() - last_wallet_items_fetch_timestamp_).InSeconds();
607 if (IsPayingWithWallet() && wallet_items_ && 607 if (IsPayingWithWallet() && wallet_items_ &&
608 seconds_elapsed_since_last_refresh >= kWalletItemsRefreshRateSeconds) { 608 seconds_elapsed_since_last_refresh >= kWalletItemsRefreshRateSeconds) {
609 GetWalletItems(); 609 GetWalletItems();
610 } 610 }
611 } 611 }
612 612
613 void AutofillDialogControllerImpl::OnAutocheckoutError() {
614 DCHECK_EQ(AUTOCHECKOUT_IN_PROGRESS, autocheckout_state_);
615 GetMetricLogger().LogAutocheckoutDuration(
616 base::Time::Now() - autocheckout_started_timestamp_,
617 AutofillMetrics::AUTOCHECKOUT_FAILED);
618 SetAutocheckoutState(AUTOCHECKOUT_ERROR);
619 autocheckout_started_timestamp_ = base::Time();
620 }
621
622 void AutofillDialogControllerImpl::OnAutocheckoutSuccess() {
623 DCHECK_EQ(AUTOCHECKOUT_IN_PROGRESS, autocheckout_state_);
624 GetMetricLogger().LogAutocheckoutDuration(
625 base::Time::Now() - autocheckout_started_timestamp_,
626 AutofillMetrics::AUTOCHECKOUT_SUCCEEDED);
627 SetAutocheckoutState(AUTOCHECKOUT_SUCCESS);
628 autocheckout_started_timestamp_ = base::Time();
629 }
630
631
632 TestableAutofillDialogView* AutofillDialogControllerImpl::GetTestableView() { 613 TestableAutofillDialogView* AutofillDialogControllerImpl::GetTestableView() {
633 return view_ ? view_->GetTestableView() : NULL; 614 return view_ ? view_->GetTestableView() : NULL;
634 } 615 }
635 616
636 void AutofillDialogControllerImpl::AddAutocheckoutStep(
637 AutocheckoutStepType step_type) {
638 for (size_t i = 0; i < steps_.size(); ++i) {
639 if (steps_[i].type() == step_type)
640 return;
641 }
642 steps_.push_back(
643 DialogAutocheckoutStep(step_type, AUTOCHECKOUT_STEP_UNSTARTED));
644 }
645
646 void AutofillDialogControllerImpl::UpdateAutocheckoutStep(
647 AutocheckoutStepType step_type,
648 AutocheckoutStepStatus step_status) {
649 ScopedViewUpdates updates(view_.get());
650
651 int total_steps = 0;
652 int completed_steps = 0;
653 for (size_t i = 0; i < steps_.size(); ++i) {
654 ++total_steps;
655 if (steps_[i].status() == AUTOCHECKOUT_STEP_COMPLETED)
656 ++completed_steps;
657 if (steps_[i].type() == step_type && steps_[i].status() != step_status)
658 steps_[i] = DialogAutocheckoutStep(step_type, step_status);
659 }
660 if (view_) {
661 view_->UpdateAutocheckoutStepsArea();
662 view_->UpdateProgressBar(1.0 * completed_steps / total_steps);
663 }
664 }
665
666 std::vector<DialogAutocheckoutStep>
667 AutofillDialogControllerImpl::CurrentAutocheckoutSteps() const {
668 if (autocheckout_state_ != AUTOCHECKOUT_NOT_STARTED)
669 return steps_;
670
671 std::vector<DialogAutocheckoutStep> empty_steps;
672 return empty_steps;
673 }
674
675 //////////////////////////////////////////////////////////////////////////////// 617 ////////////////////////////////////////////////////////////////////////////////
676 // AutofillDialogViewDelegate implementation. 618 // AutofillDialogViewDelegate implementation.
677 619
678 string16 AutofillDialogControllerImpl::DialogTitle() const { 620 string16 AutofillDialogControllerImpl::DialogTitle() const {
679 return l10n_util::GetStringUTF16(IDS_AUTOFILL_DIALOG_TITLE); 621 return l10n_util::GetStringUTF16(IDS_AUTOFILL_DIALOG_TITLE);
680 } 622 }
681 623
682 string16 AutofillDialogControllerImpl::EditSuggestionText() const { 624 string16 AutofillDialogControllerImpl::EditSuggestionText() const {
683 return l10n_util::GetStringUTF16(IDS_AUTOFILL_DIALOG_EDIT); 625 return l10n_util::GetStringUTF16(IDS_AUTOFILL_DIALOG_EDIT);
684 } 626 }
685 627
686 string16 AutofillDialogControllerImpl::CancelButtonText() const { 628 string16 AutofillDialogControllerImpl::CancelButtonText() const {
687 return l10n_util::GetStringUTF16(IDS_CANCEL); 629 return l10n_util::GetStringUTF16(IDS_CANCEL);
688 } 630 }
689 631
690 string16 AutofillDialogControllerImpl::ConfirmButtonText() const { 632 string16 AutofillDialogControllerImpl::ConfirmButtonText() const {
691 if (autocheckout_state_ == AUTOCHECKOUT_ERROR)
692 return l10n_util::GetStringUTF16(IDS_OK);
693 if (autocheckout_state_ == AUTOCHECKOUT_SUCCESS)
694 return l10n_util::GetStringUTF16(IDS_AUTOFILL_DIALOG_CONTINUE_BUTTON);
695
696 return l10n_util::GetStringUTF16(IsSubmitPausedOn(wallet::VERIFY_CVV) ? 633 return l10n_util::GetStringUTF16(IsSubmitPausedOn(wallet::VERIFY_CVV) ?
697 IDS_AUTOFILL_DIALOG_VERIFY_BUTTON : IDS_AUTOFILL_DIALOG_SUBMIT_BUTTON); 634 IDS_AUTOFILL_DIALOG_VERIFY_BUTTON : IDS_AUTOFILL_DIALOG_SUBMIT_BUTTON);
698 } 635 }
699 636
700 string16 AutofillDialogControllerImpl::SaveLocallyText() const { 637 string16 AutofillDialogControllerImpl::SaveLocallyText() const {
701 return l10n_util::GetStringUTF16(IDS_AUTOFILL_DIALOG_SAVE_LOCALLY_CHECKBOX); 638 return l10n_util::GetStringUTF16(IDS_AUTOFILL_DIALOG_SAVE_LOCALLY_CHECKBOX);
702 } 639 }
703 640
704 string16 AutofillDialogControllerImpl::SaveLocallyTooltip() const { 641 string16 AutofillDialogControllerImpl::SaveLocallyTooltip() const {
705 return l10n_util::GetStringUTF16(IDS_AUTOFILL_DIALOG_SAVE_LOCALLY_TOOLTIP); 642 return l10n_util::GetStringUTF16(IDS_AUTOFILL_DIALOG_SAVE_LOCALLY_TOOLTIP);
706 } 643 }
707 644
708 string16 AutofillDialogControllerImpl::LegalDocumentsText() { 645 string16 AutofillDialogControllerImpl::LegalDocumentsText() {
709 if (!IsPayingWithWallet() || autocheckout_state_ != AUTOCHECKOUT_NOT_STARTED) 646 if (!IsPayingWithWallet())
710 return string16(); 647 return string16();
711 648
712 EnsureLegalDocumentsText(); 649 EnsureLegalDocumentsText();
713 return legal_documents_text_; 650 return legal_documents_text_;
714 } 651 }
715 652
716 DialogSignedInState AutofillDialogControllerImpl::SignedInState() const { 653 DialogSignedInState AutofillDialogControllerImpl::SignedInState() const {
717 if (account_chooser_model_.HadWalletError()) 654 if (account_chooser_model_.HadWalletError())
718 return SIGN_IN_DISABLED; 655 return SIGN_IN_DISABLED;
719 656
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
753 690
754 bool AutofillDialogControllerImpl::ShouldOfferToSaveInChrome() const { 691 bool AutofillDialogControllerImpl::ShouldOfferToSaveInChrome() const {
755 return !IsPayingWithWallet() && 692 return !IsPayingWithWallet() &&
756 !profile_->IsOffTheRecord() && 693 !profile_->IsOffTheRecord() &&
757 IsManuallyEditingAnySection() && 694 IsManuallyEditingAnySection() &&
758 ShouldShowDetailArea() && 695 ShouldShowDetailArea() &&
759 !ShouldShowSpinner(); 696 !ShouldShowSpinner();
760 } 697 }
761 698
762 int AutofillDialogControllerImpl::GetDialogButtons() const { 699 int AutofillDialogControllerImpl::GetDialogButtons() const {
763 if (autocheckout_state_ == AUTOCHECKOUT_IN_PROGRESS) 700 return ui::DIALOG_BUTTON_OK | ui::DIALOG_BUTTON_CANCEL;
764 return ui::DIALOG_BUTTON_CANCEL;
765 if (autocheckout_state_ == AUTOCHECKOUT_NOT_STARTED)
766 return ui::DIALOG_BUTTON_OK | ui::DIALOG_BUTTON_CANCEL;
767 return ui::DIALOG_BUTTON_OK;
768 } 701 }
769 702
770 bool AutofillDialogControllerImpl::IsDialogButtonEnabled( 703 bool AutofillDialogControllerImpl::IsDialogButtonEnabled(
771 ui::DialogButton button) const { 704 ui::DialogButton button) const {
772 if (button == ui::DIALOG_BUTTON_OK) { 705 if (button == ui::DIALOG_BUTTON_OK) {
773 if (IsSubmitPausedOn(wallet::VERIFY_CVV)) 706 if (IsSubmitPausedOn(wallet::VERIFY_CVV))
774 return true; 707 return true;
775 708
776 if (ShouldShowSpinner()) 709 if (ShouldShowSpinner() || is_submitting_)
777 return false; 710 return false;
778 711
779 if (is_submitting_) {
780 return autocheckout_state_ == AUTOCHECKOUT_SUCCESS ||
781 autocheckout_state_ == AUTOCHECKOUT_ERROR;
782 }
783
784 return true; 712 return true;
785 } 713 }
786 714
787 DCHECK_EQ(ui::DIALOG_BUTTON_CANCEL, button); 715 DCHECK_EQ(ui::DIALOG_BUTTON_CANCEL, button);
788 return !is_submitting_ || IsSubmitPausedOn(wallet::VERIFY_CVV); 716 return !is_submitting_ || IsSubmitPausedOn(wallet::VERIFY_CVV);
789 } 717 }
790 718
791 DialogOverlayState AutofillDialogControllerImpl::GetDialogOverlay() const { 719 DialogOverlayState AutofillDialogControllerImpl::GetDialogOverlay() const {
792 bool show_wallet_interstitial = IsPayingWithWallet() && is_submitting_ && 720 bool show_wallet_interstitial = IsPayingWithWallet() && is_submitting_ &&
793 !IsSubmitPausedOn(wallet::VERIFY_CVV) && 721 !IsSubmitPausedOn(wallet::VERIFY_CVV) &&
(...skipping 420 matching lines...) Expand 10 before | Expand all | Expand 10 after
1214 } 1142 }
1215 1143
1216 gfx::Image icon; 1144 gfx::Image icon;
1217 account_chooser_model_.GetIconAt( 1145 account_chooser_model_.GetIconAt(
1218 account_chooser_model_.GetIndexOfCommandId( 1146 account_chooser_model_.GetIndexOfCommandId(
1219 account_chooser_model_.checked_item()), 1147 account_chooser_model_.checked_item()),
1220 &icon); 1148 &icon);
1221 return icon; 1149 return icon;
1222 } 1150 }
1223 1151
1224 bool AutofillDialogControllerImpl::ShouldShowDetailArea() const { 1152 bool AutofillDialogControllerImpl::ShouldShowDetailArea() const {
Dan Beam 2013/08/20 21:44:08 ^ maybe delete this?
Raman Kakilate 2013/08/22 21:29:04 Probably - but may be in next CL.
1225 // Hide the detail area when Autocheckout is running or there was an error (as 1153 return true;
1226 // there's nothing they can do after an error but cancel).
1227 return autocheckout_state_ == AUTOCHECKOUT_NOT_STARTED;
1228 }
1229
1230 bool AutofillDialogControllerImpl::ShouldShowProgressBar() const {
1231 // Show the progress bar while Autocheckout is running but hide it on errors,
1232 // as there's no use leaving it up if the flow has failed.
1233 return autocheckout_state_ == AUTOCHECKOUT_IN_PROGRESS;
1234 } 1154 }
1235 1155
1236 gfx::Image AutofillDialogControllerImpl::ButtonStripImage() const { 1156 gfx::Image AutofillDialogControllerImpl::ButtonStripImage() const {
1237 if (ShouldShowDetailArea() && IsPayingWithWallet()) { 1157 if (ShouldShowDetailArea() && IsPayingWithWallet()) {
1238 return ui::ResourceBundle::GetSharedInstance().GetImageNamed( 1158 return ui::ResourceBundle::GetSharedInstance().GetImageNamed(
1239 IDR_WALLET_LOGO); 1159 IDR_WALLET_LOGO);
1240 } 1160 }
1241 1161
1242 return gfx::Image(); 1162 return gfx::Image();
1243 } 1163 }
(...skipping 544 matching lines...) Expand 10 before | Expand all | Expand 10 after
1788 return ui::ResourceBundle::GetSharedInstance().GetImageNamed( 1708 return ui::ResourceBundle::GetSharedInstance().GetImageNamed(
1789 IDR_PRODUCT_LOGO_NAME_48); 1709 IDR_PRODUCT_LOGO_NAME_48);
1790 } 1710 }
1791 1711
1792 return gfx::Image(); 1712 return gfx::Image();
1793 } 1713 }
1794 1714
1795 void AutofillDialogControllerImpl::ViewClosed() { 1715 void AutofillDialogControllerImpl::ViewClosed() {
1796 GetManager()->RemoveObserver(this); 1716 GetManager()->RemoveObserver(this);
1797 1717
1798 // TODO(ahutter): Once a user can cancel Autocheckout mid-flow, log that
1799 // metric here.
1800
1801 // Called from here rather than in ~AutofillDialogControllerImpl as this 1718 // Called from here rather than in ~AutofillDialogControllerImpl as this
1802 // relies on virtual methods that change to their base class in the dtor. 1719 // relies on virtual methods that change to their base class in the dtor.
1803 MaybeShowCreditCardBubble(); 1720 MaybeShowCreditCardBubble();
1804 1721
1805 delete this; 1722 delete this;
1806 } 1723 }
1807 1724
1808 std::vector<DialogNotification> AutofillDialogControllerImpl:: 1725 std::vector<DialogNotification> AutofillDialogControllerImpl::
1809 CurrentNotifications() { 1726 CurrentNotifications() {
1810 std::vector<DialogNotification> notifications; 1727 std::vector<DialogNotification> notifications;
(...skipping 25 matching lines...) Expand all
1836 IDS_AUTOFILL_DIALOG_COMPLETE_WITHOUT_WALLET, 1753 IDS_AUTOFILL_DIALOG_COMPLETE_WITHOUT_WALLET,
1837 account_chooser_model_.wallet_error_message()))); 1754 account_chooser_model_.wallet_error_message())));
1838 } 1755 }
1839 1756
1840 if (IsSubmitPausedOn(wallet::VERIFY_CVV)) { 1757 if (IsSubmitPausedOn(wallet::VERIFY_CVV)) {
1841 notifications.push_back(DialogNotification( 1758 notifications.push_back(DialogNotification(
1842 DialogNotification::REQUIRED_ACTION, 1759 DialogNotification::REQUIRED_ACTION,
1843 l10n_util::GetStringUTF16(IDS_AUTOFILL_DIALOG_VERIFY_CVV))); 1760 l10n_util::GetStringUTF16(IDS_AUTOFILL_DIALOG_VERIFY_CVV)));
1844 } 1761 }
1845 1762
1846 if (autocheckout_state_ == AUTOCHECKOUT_ERROR) {
1847 notifications.push_back(DialogNotification(
1848 DialogNotification::AUTOCHECKOUT_ERROR,
1849 l10n_util::GetStringUTF16(IDS_AUTOFILL_DIALOG_AUTOCHECKOUT_ERROR)));
1850 }
1851
1852 if (autocheckout_state_ == AUTOCHECKOUT_SUCCESS) {
1853 notifications.push_back(DialogNotification(
1854 DialogNotification::AUTOCHECKOUT_SUCCESS,
1855 l10n_util::GetStringUTF16(IDS_AUTOFILL_DIALOG_AUTOCHECKOUT_SUCCESS)));
1856 }
1857
1858 if (!wallet_server_validation_recoverable_) { 1763 if (!wallet_server_validation_recoverable_) {
1859 notifications.push_back(DialogNotification( 1764 notifications.push_back(DialogNotification(
1860 DialogNotification::REQUIRED_ACTION, 1765 DialogNotification::REQUIRED_ACTION,
1861 l10n_util::GetStringUTF16( 1766 l10n_util::GetStringUTF16(
1862 IDS_AUTOFILL_DIALOG_FAILED_TO_SAVE_WALLET_DATA))); 1767 IDS_AUTOFILL_DIALOG_FAILED_TO_SAVE_WALLET_DATA)));
1863 } 1768 }
1864 1769
1865 if (choose_another_instrument_or_address_) { 1770 if (choose_another_instrument_or_address_) {
1866 notifications.push_back(DialogNotification( 1771 notifications.push_back(DialogNotification(
1867 DialogNotification::REQUIRED_ACTION, 1772 DialogNotification::REQUIRED_ACTION,
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after
1939 void AutofillDialogControllerImpl::OverlayButtonPressed() { 1844 void AutofillDialogControllerImpl::OverlayButtonPressed() {
1940 DCHECK(is_submitting_); 1845 DCHECK(is_submitting_);
1941 DCHECK(full_wallet_); 1846 DCHECK(full_wallet_);
1942 profile_->GetPrefs()->SetBoolean(::prefs::kAutofillDialogHasPaidWithWallet, 1847 profile_->GetPrefs()->SetBoolean(::prefs::kAutofillDialogHasPaidWithWallet,
1943 true); 1848 true);
1944 FinishSubmit(); 1849 FinishSubmit();
1945 } 1850 }
1946 1851
1947 bool AutofillDialogControllerImpl::OnCancel() { 1852 bool AutofillDialogControllerImpl::OnCancel() {
1948 HidePopup(); 1853 HidePopup();
1949 if (autocheckout_state_ == AUTOCHECKOUT_NOT_STARTED && !is_submitting_) 1854 if (!is_submitting_)
1950 LogOnCancelMetrics(); 1855 LogOnCancelMetrics();
1951 if (autocheckout_state_ == AUTOCHECKOUT_IN_PROGRESS) {
1952 GetMetricLogger().LogAutocheckoutDuration(
1953 base::Time::Now() - autocheckout_started_timestamp_,
1954 AutofillMetrics::AUTOCHECKOUT_CANCELLED);
1955 }
1956 callback_.Run(NULL, std::string()); 1856 callback_.Run(NULL, std::string());
1957 return true; 1857 return true;
1958 } 1858 }
1959 1859
1960 bool AutofillDialogControllerImpl::OnAccept() { 1860 bool AutofillDialogControllerImpl::OnAccept() {
1961 // If autocheckout has already started, the only thing left to do is to
1962 // close the dialog.
1963 if (autocheckout_state_ != AUTOCHECKOUT_NOT_STARTED)
1964 return true;
1965
1966 choose_another_instrument_or_address_ = false; 1861 choose_another_instrument_or_address_ = false;
1967 wallet_server_validation_recoverable_ = true; 1862 wallet_server_validation_recoverable_ = true;
1968 HidePopup(); 1863 HidePopup();
1969 if (IsPayingWithWallet()) {
1970 bool has_proxy_card_step = false;
1971 for (size_t i = 0; i < steps_.size(); ++i) {
1972 if (steps_[i].type() == AUTOCHECKOUT_STEP_PROXY_CARD) {
1973 has_proxy_card_step = true;
1974 break;
1975 }
1976 }
1977 if (!has_proxy_card_step) {
1978 steps_.insert(steps_.begin(),
1979 DialogAutocheckoutStep(AUTOCHECKOUT_STEP_PROXY_CARD,
1980 AUTOCHECKOUT_STEP_UNSTARTED));
1981 }
1982 }
1983
1984 if (GetDialogType() == DIALOG_TYPE_AUTOCHECKOUT)
1985 DeemphasizeRenderView();
1986 1864
1987 SetIsSubmitting(true); 1865 SetIsSubmitting(true);
1988 if (IsSubmitPausedOn(wallet::VERIFY_CVV)) { 1866 if (IsSubmitPausedOn(wallet::VERIFY_CVV)) {
1989 DCHECK(!active_instrument_id_.empty()); 1867 DCHECK(!active_instrument_id_.empty());
1990 GetWalletClient()->AuthenticateInstrument( 1868 GetWalletClient()->AuthenticateInstrument(
1991 active_instrument_id_, 1869 active_instrument_id_,
1992 UTF16ToUTF8(view_->GetCvc())); 1870 UTF16ToUTF8(view_->GetCvc()));
1993 } else if (IsPayingWithWallet()) { 1871 } else if (IsPayingWithWallet()) {
1994 // TODO(dbeam): disallow interacting with the dialog while submitting. 1872 // TODO(dbeam): disallow interacting with the dialog while submitting.
1995 // http://crbug.com/230932 1873 // http://crbug.com/230932
(...skipping 164 matching lines...) Expand 10 before | Expand all | Expand 10 after
2160 } 2038 }
2161 2039
2162 void AutofillDialogControllerImpl::OnDidGetFullWallet( 2040 void AutofillDialogControllerImpl::OnDidGetFullWallet(
2163 scoped_ptr<wallet::FullWallet> full_wallet) { 2041 scoped_ptr<wallet::FullWallet> full_wallet) {
2164 DCHECK(is_submitting_ && IsPayingWithWallet()); 2042 DCHECK(is_submitting_ && IsPayingWithWallet());
2165 ScopedViewUpdates updates(view_.get()); 2043 ScopedViewUpdates updates(view_.get());
2166 2044
2167 full_wallet_ = full_wallet.Pass(); 2045 full_wallet_ = full_wallet.Pass();
2168 2046
2169 if (full_wallet_->required_actions().empty()) { 2047 if (full_wallet_->required_actions().empty()) {
2170 UpdateAutocheckoutStep(AUTOCHECKOUT_STEP_PROXY_CARD,
2171 AUTOCHECKOUT_STEP_COMPLETED);
2172 FinishSubmit(); 2048 FinishSubmit();
2173 return; 2049 return;
2174 } 2050 }
2175 2051
2176 SetAutocheckoutState(AUTOCHECKOUT_NOT_STARTED);
2177
2178 switch (full_wallet_->required_actions()[0]) { 2052 switch (full_wallet_->required_actions()[0]) {
2179 case wallet::CHOOSE_ANOTHER_INSTRUMENT_OR_ADDRESS: 2053 case wallet::CHOOSE_ANOTHER_INSTRUMENT_OR_ADDRESS:
2180 choose_another_instrument_or_address_ = true; 2054 choose_another_instrument_or_address_ = true;
2181 SetIsSubmitting(false); 2055 SetIsSubmitting(false);
2182 GetWalletItems(); 2056 GetWalletItems();
2183 view_->UpdateNotificationArea(); 2057 view_->UpdateNotificationArea();
2184 view_->UpdateButtonStrip(); 2058 view_->UpdateButtonStrip();
2185 break; 2059 break;
2186 2060
2187 case wallet::VERIFY_CVV: 2061 case wallet::VERIFY_CVV:
(...skipping 150 matching lines...) Expand 10 before | Expand all | Expand 10 after
2338 content::WebContents* contents, 2212 content::WebContents* contents,
2339 const FormData& form_structure, 2213 const FormData& form_structure,
2340 const GURL& source_url, 2214 const GURL& source_url,
2341 const DialogType dialog_type, 2215 const DialogType dialog_type,
2342 const base::Callback<void(const FormStructure*, 2216 const base::Callback<void(const FormStructure*,
2343 const std::string&)>& callback) 2217 const std::string&)>& callback)
2344 : WebContentsObserver(contents), 2218 : WebContentsObserver(contents),
2345 profile_(Profile::FromBrowserContext(contents->GetBrowserContext())), 2219 profile_(Profile::FromBrowserContext(contents->GetBrowserContext())),
2346 initial_user_state_(AutofillMetrics::DIALOG_USER_STATE_UNKNOWN), 2220 initial_user_state_(AutofillMetrics::DIALOG_USER_STATE_UNKNOWN),
2347 dialog_type_(dialog_type), 2221 dialog_type_(dialog_type),
2348 form_structure_(form_structure, std::string()), 2222 form_structure_(form_structure),
2349 invoked_from_same_origin_(true), 2223 invoked_from_same_origin_(true),
2350 source_url_(source_url), 2224 source_url_(source_url),
2351 callback_(callback), 2225 callback_(callback),
2352 account_chooser_model_(this, profile_->GetPrefs(), metric_logger_, 2226 account_chooser_model_(this, profile_->GetPrefs(), metric_logger_,
2353 dialog_type), 2227 dialog_type),
2354 wallet_client_(profile_->GetRequestContext(), this), 2228 wallet_client_(profile_->GetRequestContext(), this),
2355 suggested_email_(this), 2229 suggested_email_(this),
2356 suggested_cc_(this), 2230 suggested_cc_(this),
2357 suggested_billing_(this), 2231 suggested_billing_(this),
2358 suggested_cc_billing_(this), 2232 suggested_cc_billing_(this),
2359 suggested_shipping_(this), 2233 suggested_shipping_(this),
2360 cares_about_shipping_(true), 2234 cares_about_shipping_(true),
2361 input_showing_popup_(NULL), 2235 input_showing_popup_(NULL),
2362 weak_ptr_factory_(this), 2236 weak_ptr_factory_(this),
2363 should_show_wallet_promo_(!profile_->GetPrefs()->GetBoolean( 2237 should_show_wallet_promo_(!profile_->GetPrefs()->GetBoolean(
2364 ::prefs::kAutofillDialogHasPaidWithWallet)), 2238 ::prefs::kAutofillDialogHasPaidWithWallet)),
2365 has_shown_wallet_usage_confirmation_(false), 2239 has_shown_wallet_usage_confirmation_(false),
2366 has_accepted_legal_documents_(false), 2240 has_accepted_legal_documents_(false),
2367 is_submitting_(false), 2241 is_submitting_(false),
2368 choose_another_instrument_or_address_(false), 2242 choose_another_instrument_or_address_(false),
2369 wallet_server_validation_recoverable_(true), 2243 wallet_server_validation_recoverable_(true),
2370 data_was_passed_back_(false), 2244 data_was_passed_back_(false),
2371 autocheckout_state_(AUTOCHECKOUT_NOT_STARTED),
2372 was_ui_latency_logged_(false), 2245 was_ui_latency_logged_(false),
2373 deemphasized_render_view_(false) { 2246 deemphasized_render_view_(false) {
2374 // TODO(estade): remove duplicates from |form_structure|? 2247 // TODO(estade): remove duplicates from |form_structure|?
2375 DCHECK(!callback_.is_null()); 2248 DCHECK(!callback_.is_null());
2376 } 2249 }
2377 2250
2378 AutofillDialogView* AutofillDialogControllerImpl::CreateView() { 2251 AutofillDialogView* AutofillDialogControllerImpl::CreateView() {
2379 return AutofillDialogView::Create(this); 2252 return AutofillDialogView::Create(this);
2380 } 2253 }
2381 2254
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after
2457 GetWalletClient()->CancelRequests(); 2330 GetWalletClient()->CancelRequests();
2458 LogDialogLatencyToShow(); 2331 LogDialogLatencyToShow();
2459 } 2332 }
2460 2333
2461 void AutofillDialogControllerImpl::DisableWallet( 2334 void AutofillDialogControllerImpl::DisableWallet(
2462 wallet::WalletClient::ErrorType error_type) { 2335 wallet::WalletClient::ErrorType error_type) {
2463 signin_helper_.reset(); 2336 signin_helper_.reset();
2464 wallet_items_.reset(); 2337 wallet_items_.reset();
2465 wallet_errors_.clear(); 2338 wallet_errors_.clear();
2466 GetWalletClient()->CancelRequests(); 2339 GetWalletClient()->CancelRequests();
2467 SetAutocheckoutState(AUTOCHECKOUT_NOT_STARTED);
2468 for (std::vector<DialogAutocheckoutStep>::iterator it = steps_.begin();
2469 it != steps_.end(); ++it) {
2470 if (it->type() == AUTOCHECKOUT_STEP_PROXY_CARD) {
2471 steps_.erase(it);
2472 break;
2473 }
2474 }
2475 SetIsSubmitting(false); 2340 SetIsSubmitting(false);
2476 account_chooser_model_.SetHadWalletError(WalletErrorMessage(error_type)); 2341 account_chooser_model_.SetHadWalletError(WalletErrorMessage(error_type));
2477 } 2342 }
2478 2343
2479 void AutofillDialogControllerImpl::SuggestionsUpdated() { 2344 void AutofillDialogControllerImpl::SuggestionsUpdated() {
2480 ScopedViewUpdates updates(view_.get()); 2345 ScopedViewUpdates updates(view_.get());
2481 2346
2482 const DetailOutputMap snapshot = TakeUserInputSnapshot(); 2347 const DetailOutputMap snapshot = TakeUserInputSnapshot();
2483 2348
2484 suggested_email_.Reset(); 2349 suggested_email_.Reset();
(...skipping 559 matching lines...) Expand 10 before | Expand all | Expand 10 after
3044 } 2909 }
3045 2910
3046 const wallet::Address* active_address = ActiveShippingAddress(); 2911 const wallet::Address* active_address = ActiveShippingAddress();
3047 if (!IsManuallyEditingSection(SECTION_SHIPPING) && 2912 if (!IsManuallyEditingSection(SECTION_SHIPPING) &&
3048 !ShouldUseBillingForShipping() && 2913 !ShouldUseBillingForShipping() &&
3049 IsShippingAddressRequired()) { 2914 IsShippingAddressRequired()) {
3050 active_address_id_ = active_address->object_id(); 2915 active_address_id_ = active_address->object_id();
3051 DCHECK(!active_address_id_.empty()); 2916 DCHECK(!active_address_id_.empty());
3052 } 2917 }
3053 2918
3054 if (GetDialogType() == DIALOG_TYPE_AUTOCHECKOUT) {
3055 DCHECK_EQ(AUTOCHECKOUT_NOT_STARTED, autocheckout_state_);
3056 SetAutocheckoutState(AUTOCHECKOUT_IN_PROGRESS);
3057 }
3058
3059 scoped_ptr<wallet::Instrument> inputted_instrument = 2919 scoped_ptr<wallet::Instrument> inputted_instrument =
3060 CreateTransientInstrument(); 2920 CreateTransientInstrument();
3061 if (inputted_instrument && IsEditingExistingData(SECTION_CC_BILLING)) { 2921 if (inputted_instrument && IsEditingExistingData(SECTION_CC_BILLING)) {
3062 inputted_instrument->set_object_id(active_instrument->object_id()); 2922 inputted_instrument->set_object_id(active_instrument->object_id());
3063 DCHECK(!inputted_instrument->object_id().empty()); 2923 DCHECK(!inputted_instrument->object_id().empty());
3064 } 2924 }
3065 2925
3066 scoped_ptr<wallet::Address> inputted_address; 2926 scoped_ptr<wallet::Address> inputted_address;
3067 if (active_address_id_.empty() && IsShippingAddressRequired()) { 2927 if (active_address_id_.empty() && IsShippingAddressRequired()) {
3068 if (ShouldUseBillingForShipping()) { 2928 if (ShouldUseBillingForShipping()) {
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after
3133 void AutofillDialogControllerImpl::GetFullWallet() { 2993 void AutofillDialogControllerImpl::GetFullWallet() {
3134 DCHECK(is_submitting_); 2994 DCHECK(is_submitting_);
3135 DCHECK(IsPayingWithWallet()); 2995 DCHECK(IsPayingWithWallet());
3136 DCHECK(wallet_items_); 2996 DCHECK(wallet_items_);
3137 DCHECK(!active_instrument_id_.empty()); 2997 DCHECK(!active_instrument_id_.empty());
3138 DCHECK(!active_address_id_.empty() || !IsShippingAddressRequired()); 2998 DCHECK(!active_address_id_.empty() || !IsShippingAddressRequired());
3139 2999
3140 std::vector<wallet::WalletClient::RiskCapability> capabilities; 3000 std::vector<wallet::WalletClient::RiskCapability> capabilities;
3141 capabilities.push_back(wallet::WalletClient::VERIFY_CVC); 3001 capabilities.push_back(wallet::WalletClient::VERIFY_CVC);
3142 3002
3143 UpdateAutocheckoutStep(AUTOCHECKOUT_STEP_PROXY_CARD,
3144 AUTOCHECKOUT_STEP_STARTED);
3145
3146 GetWalletClient()->GetFullWallet(wallet::WalletClient::FullWalletRequest( 3003 GetWalletClient()->GetFullWallet(wallet::WalletClient::FullWalletRequest(
3147 active_instrument_id_, 3004 active_instrument_id_,
3148 active_address_id_, 3005 active_address_id_,
3149 source_url_, 3006 source_url_,
3150 wallet_items_->google_transaction_id(), 3007 wallet_items_->google_transaction_id(),
3151 capabilities)); 3008 capabilities));
3152 } 3009 }
3153 3010
3154 void AutofillDialogControllerImpl::HandleSaveOrUpdateRequiredActions( 3011 void AutofillDialogControllerImpl::HandleSaveOrUpdateRequiredActions(
3155 const std::vector<wallet::RequiredAction>& required_actions) { 3012 const std::vector<wallet::RequiredAction>& required_actions) {
3156 DCHECK(!required_actions.empty()); 3013 DCHECK(!required_actions.empty());
3157 3014
3158 // TODO(ahutter): Invesitigate if we need to support more generic actions on 3015 // TODO(ahutter): Invesitigate if we need to support more generic actions on
3159 // this call such as GAIA_AUTH. See crbug.com/243457. 3016 // this call such as GAIA_AUTH. See crbug.com/243457.
3160 for (std::vector<wallet::RequiredAction>::const_iterator iter = 3017 for (std::vector<wallet::RequiredAction>::const_iterator iter =
3161 required_actions.begin(); 3018 required_actions.begin();
3162 iter != required_actions.end(); ++iter) { 3019 iter != required_actions.end(); ++iter) {
3163 if (*iter != wallet::INVALID_FORM_FIELD) { 3020 if (*iter != wallet::INVALID_FORM_FIELD) {
3164 // TODO(dbeam): handle this more gracefully. 3021 // TODO(dbeam): handle this more gracefully.
3165 DisableWallet(wallet::WalletClient::UNKNOWN_ERROR); 3022 DisableWallet(wallet::WalletClient::UNKNOWN_ERROR);
3166 } 3023 }
3167 } 3024 }
3168 SetAutocheckoutState(AUTOCHECKOUT_NOT_STARTED);
3169 SetIsSubmitting(false); 3025 SetIsSubmitting(false);
3170 } 3026 }
3171 3027
3172 void AutofillDialogControllerImpl::FinishSubmit() { 3028 void AutofillDialogControllerImpl::FinishSubmit() {
3173 if (IsPayingWithWallet() && 3029 if (IsPayingWithWallet() &&
3174 !profile_->GetPrefs()->GetBoolean( 3030 !profile_->GetPrefs()->GetBoolean(
3175 ::prefs::kAutofillDialogHasPaidWithWallet)) { 3031 ::prefs::kAutofillDialogHasPaidWithWallet)) {
3176 if (GetDialogType() == DIALOG_TYPE_REQUEST_AUTOCOMPLETE) { 3032 if (GetDialogType() == DIALOG_TYPE_REQUEST_AUTOCOMPLETE) {
3177 // To get past this point, the view must call back OverlayButtonPressed. 3033 // To get past this point, the view must call back OverlayButtonPressed.
3178 #if defined(TOOLKIT_VIEWS) 3034 #if defined(TOOLKIT_VIEWS)
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
3227 // stop trying to pay with Wallet on future runs of the dialog. On the other 3083 // stop trying to pay with Wallet on future runs of the dialog. On the other
3228 // hand, if there was an error that prevented the user from having the choice 3084 // hand, if there was an error that prevented the user from having the choice
3229 // of using Wallet, leave the pref alone. 3085 // of using Wallet, leave the pref alone.
3230 if (!account_chooser_model_.HadWalletError() && 3086 if (!account_chooser_model_.HadWalletError() &&
3231 account_chooser_model_.HasAccountsToChoose()) { 3087 account_chooser_model_.HasAccountsToChoose()) {
3232 profile_->GetPrefs()->SetBoolean( 3088 profile_->GetPrefs()->SetBoolean(
3233 ::prefs::kAutofillDialogPayWithoutWallet, 3089 ::prefs::kAutofillDialogPayWithoutWallet,
3234 !account_chooser_model_.WalletIsSelected()); 3090 !account_chooser_model_.WalletIsSelected());
3235 } 3091 }
3236 3092
3237 if (GetDialogType() == DIALOG_TYPE_AUTOCHECKOUT) {
3238 // Stop observing PersonalDataManager to avoid the dialog redrawing while
3239 // in an Autocheckout flow.
3240 GetManager()->RemoveObserver(this);
3241 autocheckout_started_timestamp_ = base::Time::Now();
3242 SetAutocheckoutState(AUTOCHECKOUT_IN_PROGRESS);
3243 }
3244
3245 LogOnFinishSubmitMetrics(); 3093 LogOnFinishSubmitMetrics();
3246 3094
3247 // Callback should be called as late as possible. 3095 // Callback should be called as late as possible.
3248 callback_.Run(&form_structure_, !wallet_items_ ? std::string() : 3096 callback_.Run(&form_structure_, !wallet_items_ ? std::string() :
3249 wallet_items_->google_transaction_id()); 3097 wallet_items_->google_transaction_id());
3250 data_was_passed_back_ = true; 3098 data_was_passed_back_ = true;
3251 3099
3252 // This might delete us. 3100 // This might delete us.
3253 if (GetDialogType() == DIALOG_TYPE_REQUEST_AUTOCOMPLETE) 3101 if (GetDialogType() == DIALOG_TYPE_REQUEST_AUTOCOMPLETE)
3254 Hide(); 3102 Hide();
(...skipping 130 matching lines...) Expand 10 before | Expand all | Expand 10 after
3385 void AutofillDialogControllerImpl::LogDialogLatencyToShow() { 3233 void AutofillDialogControllerImpl::LogDialogLatencyToShow() {
3386 if (was_ui_latency_logged_) 3234 if (was_ui_latency_logged_)
3387 return; 3235 return;
3388 3236
3389 GetMetricLogger().LogDialogLatencyToShow( 3237 GetMetricLogger().LogDialogLatencyToShow(
3390 GetDialogType(), 3238 GetDialogType(),
3391 base::Time::Now() - dialog_shown_timestamp_); 3239 base::Time::Now() - dialog_shown_timestamp_);
3392 was_ui_latency_logged_ = true; 3240 was_ui_latency_logged_ = true;
3393 } 3241 }
3394 3242
3395 void AutofillDialogControllerImpl::SetAutocheckoutState(
3396 AutocheckoutState autocheckout_state) {
3397 if (autocheckout_state_ == autocheckout_state)
3398 return;
3399
3400 autocheckout_state_ = autocheckout_state;
3401 if (view_) {
3402 ScopedViewUpdates updates(view_.get());
3403 view_->UpdateDetailArea();
3404 view_->UpdateButtonStrip();
3405 view_->UpdateAutocheckoutStepsArea();
3406 view_->UpdateNotificationArea();
3407 }
3408 }
3409
3410 void AutofillDialogControllerImpl::DeemphasizeRenderView() { 3243 void AutofillDialogControllerImpl::DeemphasizeRenderView() {
3411 web_contents()->GetRenderViewHost()->Send( 3244 web_contents()->GetRenderViewHost()->Send(
3412 new ChromeViewMsg_SetVisuallyDeemphasized( 3245 new ChromeViewMsg_SetVisuallyDeemphasized(
3413 web_contents()->GetRenderViewHost()->GetRoutingID(), true)); 3246 web_contents()->GetRenderViewHost()->GetRoutingID(), true));
3414 deemphasized_render_view_ = true; 3247 deemphasized_render_view_ = true;
3415 } 3248 }
3416 3249
3417 AutofillMetrics::DialogInitialUserStateMetric 3250 AutofillMetrics::DialogInitialUserStateMetric
3418 AutofillDialogControllerImpl::GetInitialUserState() const { 3251 AutofillDialogControllerImpl::GetInitialUserState() const {
3419 // Consider a user to be an Autofill user if the user has any credit cards 3252 // Consider a user to be an Autofill user if the user has any credit cards
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
3470 GetValueFromSection(SECTION_EMAIL, EMAIL_ADDRESS)); 3303 GetValueFromSection(SECTION_EMAIL, EMAIL_ADDRESS));
3471 3304
3472 ShowNewCreditCardBubble(newly_saved_card_.Pass(), 3305 ShowNewCreditCardBubble(newly_saved_card_.Pass(),
3473 billing_profile.Pass()); 3306 billing_profile.Pass());
3474 return; 3307 return;
3475 } 3308 }
3476 3309
3477 if (!full_wallet_ || !full_wallet_->billing_address()) 3310 if (!full_wallet_ || !full_wallet_->billing_address())
3478 return; 3311 return;
3479 3312
3480 // Don't show GeneratedCardBubble if Autocheckout failed.
3481 if (GetDialogType() == DIALOG_TYPE_AUTOCHECKOUT &&
3482 autocheckout_state_ != AUTOCHECKOUT_SUCCESS) {
3483 return;
3484 }
3485
3486 base::string16 backing_last_four; 3313 base::string16 backing_last_four;
3487 if (ActiveInstrument()) { 3314 if (ActiveInstrument()) {
3488 backing_last_four = ActiveInstrument()->TypeAndLastFourDigits(); 3315 backing_last_four = ActiveInstrument()->TypeAndLastFourDigits();
3489 } else { 3316 } else {
3490 DetailOutputMap output; 3317 DetailOutputMap output;
3491 view_->GetUserInput(SECTION_CC_BILLING, &output); 3318 view_->GetUserInput(SECTION_CC_BILLING, &output);
3492 CreditCard card; 3319 CreditCard card;
3493 GetBillingInfoFromOutputs(output, &card, NULL, NULL); 3320 GetBillingInfoFromOutputs(output, &card, NULL, NULL);
3494 backing_last_four = card.TypeAndLastFourDigits(); 3321 backing_last_four = card.TypeAndLastFourDigits();
3495 } 3322 }
3496 #if !defined(OS_ANDROID) 3323 #if !defined(OS_ANDROID)
3497 GeneratedCreditCardBubbleController::Show( 3324 GeneratedCreditCardBubbleController::Show(
3498 web_contents(), 3325 web_contents(),
3499 backing_last_four, 3326 backing_last_four,
3500 full_wallet_->TypeAndLastFourDigits()); 3327 full_wallet_->TypeAndLastFourDigits());
3501 #endif 3328 #endif
3502 } 3329 }
3503 3330
3504 } // namespace autofill 3331 } // namespace autofill
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698