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

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: Even more deletes, and Ilya review. 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 424 matching lines...) Expand 10 before | Expand all | Expand 10 after
435 } // namespace 435 } // namespace
436 436
437 AutofillDialogViewDelegate::~AutofillDialogViewDelegate() {} 437 AutofillDialogViewDelegate::~AutofillDialogViewDelegate() {}
438 438
439 AutofillDialogControllerImpl::~AutofillDialogControllerImpl() { 439 AutofillDialogControllerImpl::~AutofillDialogControllerImpl() {
440 if (popup_controller_) 440 if (popup_controller_)
441 popup_controller_->Hide(); 441 popup_controller_->Hide();
442 442
443 GetMetricLogger().LogDialogInitialUserState( 443 GetMetricLogger().LogDialogInitialUserState(
444 GetDialogType(), initial_user_state_); 444 GetDialogType(), initial_user_state_);
445
446 if (deemphasized_render_view_ && web_contents()) {
447 web_contents()->GetRenderViewHost()->Send(
448 new ChromeViewMsg_SetVisuallyDeemphasized(
449 web_contents()->GetRenderViewHost()->GetRoutingID(), false));
450 }
451 } 445 }
452 446
453 // static 447 // static
454 base::WeakPtr<AutofillDialogControllerImpl> 448 base::WeakPtr<AutofillDialogControllerImpl>
455 AutofillDialogControllerImpl::Create( 449 AutofillDialogControllerImpl::Create(
456 content::WebContents* contents, 450 content::WebContents* contents,
457 const FormData& form_structure, 451 const FormData& form_structure,
458 const GURL& source_url, 452 const GURL& source_url,
459 const DialogType dialog_type, 453 const DialogType dialog_type,
460 const base::Callback<void(const FormStructure*, 454 const base::Callback<void(const FormStructure*,
(...skipping 142 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 597 // If the user switched away from this tab and then switched back, reload the
604 // Wallet items, in case they've changed. 598 // Wallet items, in case they've changed.
605 int seconds_elapsed_since_last_refresh = 599 int seconds_elapsed_since_last_refresh =
606 (base::TimeTicks::Now() - last_wallet_items_fetch_timestamp_).InSeconds(); 600 (base::TimeTicks::Now() - last_wallet_items_fetch_timestamp_).InSeconds();
607 if (IsPayingWithWallet() && wallet_items_ && 601 if (IsPayingWithWallet() && wallet_items_ &&
608 seconds_elapsed_since_last_refresh >= kWalletItemsRefreshRateSeconds) { 602 seconds_elapsed_since_last_refresh >= kWalletItemsRefreshRateSeconds) {
609 GetWalletItems(); 603 GetWalletItems();
610 } 604 }
611 } 605 }
612 606
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() { 607 TestableAutofillDialogView* AutofillDialogControllerImpl::GetTestableView() {
633 return view_ ? view_->GetTestableView() : NULL; 608 return view_ ? view_->GetTestableView() : NULL;
634 } 609 }
635 610
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 //////////////////////////////////////////////////////////////////////////////// 611 ////////////////////////////////////////////////////////////////////////////////
676 // AutofillDialogViewDelegate implementation. 612 // AutofillDialogViewDelegate implementation.
677 613
678 string16 AutofillDialogControllerImpl::DialogTitle() const { 614 string16 AutofillDialogControllerImpl::DialogTitle() const {
679 return l10n_util::GetStringUTF16(IDS_AUTOFILL_DIALOG_TITLE); 615 return l10n_util::GetStringUTF16(IDS_AUTOFILL_DIALOG_TITLE);
680 } 616 }
681 617
682 string16 AutofillDialogControllerImpl::EditSuggestionText() const { 618 string16 AutofillDialogControllerImpl::EditSuggestionText() const {
683 return l10n_util::GetStringUTF16(IDS_AUTOFILL_DIALOG_EDIT); 619 return l10n_util::GetStringUTF16(IDS_AUTOFILL_DIALOG_EDIT);
684 } 620 }
685 621
686 string16 AutofillDialogControllerImpl::CancelButtonText() const { 622 string16 AutofillDialogControllerImpl::CancelButtonText() const {
687 return l10n_util::GetStringUTF16(IDS_CANCEL); 623 return l10n_util::GetStringUTF16(IDS_CANCEL);
688 } 624 }
689 625
690 string16 AutofillDialogControllerImpl::ConfirmButtonText() const { 626 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) ? 627 return l10n_util::GetStringUTF16(IsSubmitPausedOn(wallet::VERIFY_CVV) ?
697 IDS_AUTOFILL_DIALOG_VERIFY_BUTTON : IDS_AUTOFILL_DIALOG_SUBMIT_BUTTON); 628 IDS_AUTOFILL_DIALOG_VERIFY_BUTTON : IDS_AUTOFILL_DIALOG_SUBMIT_BUTTON);
698 } 629 }
699 630
700 string16 AutofillDialogControllerImpl::SaveLocallyText() const { 631 string16 AutofillDialogControllerImpl::SaveLocallyText() const {
701 return l10n_util::GetStringUTF16(IDS_AUTOFILL_DIALOG_SAVE_LOCALLY_CHECKBOX); 632 return l10n_util::GetStringUTF16(IDS_AUTOFILL_DIALOG_SAVE_LOCALLY_CHECKBOX);
702 } 633 }
703 634
704 string16 AutofillDialogControllerImpl::SaveLocallyTooltip() const { 635 string16 AutofillDialogControllerImpl::SaveLocallyTooltip() const {
705 return l10n_util::GetStringUTF16(IDS_AUTOFILL_DIALOG_SAVE_LOCALLY_TOOLTIP); 636 return l10n_util::GetStringUTF16(IDS_AUTOFILL_DIALOG_SAVE_LOCALLY_TOOLTIP);
706 } 637 }
707 638
708 string16 AutofillDialogControllerImpl::LegalDocumentsText() { 639 string16 AutofillDialogControllerImpl::LegalDocumentsText() {
709 if (!IsPayingWithWallet() || autocheckout_state_ != AUTOCHECKOUT_NOT_STARTED) 640 if (!IsPayingWithWallet())
710 return string16(); 641 return string16();
711 642
712 EnsureLegalDocumentsText(); 643 EnsureLegalDocumentsText();
713 return legal_documents_text_; 644 return legal_documents_text_;
714 } 645 }
715 646
716 DialogSignedInState AutofillDialogControllerImpl::SignedInState() const { 647 DialogSignedInState AutofillDialogControllerImpl::SignedInState() const {
717 if (account_chooser_model_.HadWalletError()) 648 if (account_chooser_model_.HadWalletError())
718 return SIGN_IN_DISABLED; 649 return SIGN_IN_DISABLED;
719 650
(...skipping 28 matching lines...) Expand all
748 string16 AutofillDialogControllerImpl::SignInLinkText() const { 679 string16 AutofillDialogControllerImpl::SignInLinkText() const {
749 return l10n_util::GetStringUTF16( 680 return l10n_util::GetStringUTF16(
750 signin_registrar_.IsEmpty() ? IDS_AUTOFILL_DIALOG_SIGN_IN : 681 signin_registrar_.IsEmpty() ? IDS_AUTOFILL_DIALOG_SIGN_IN :
751 IDS_AUTOFILL_DIALOG_CANCEL_SIGN_IN); 682 IDS_AUTOFILL_DIALOG_CANCEL_SIGN_IN);
752 } 683 }
753 684
754 bool AutofillDialogControllerImpl::ShouldOfferToSaveInChrome() const { 685 bool AutofillDialogControllerImpl::ShouldOfferToSaveInChrome() const {
755 return !IsPayingWithWallet() && 686 return !IsPayingWithWallet() &&
756 !profile_->IsOffTheRecord() && 687 !profile_->IsOffTheRecord() &&
757 IsManuallyEditingAnySection() && 688 IsManuallyEditingAnySection() &&
758 ShouldShowDetailArea() &&
759 !ShouldShowSpinner(); 689 !ShouldShowSpinner();
760 } 690 }
761 691
762 int AutofillDialogControllerImpl::GetDialogButtons() const { 692 int AutofillDialogControllerImpl::GetDialogButtons() const {
763 if (autocheckout_state_ == AUTOCHECKOUT_IN_PROGRESS) 693 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 } 694 }
769 695
770 bool AutofillDialogControllerImpl::IsDialogButtonEnabled( 696 bool AutofillDialogControllerImpl::IsDialogButtonEnabled(
771 ui::DialogButton button) const { 697 ui::DialogButton button) const {
772 if (button == ui::DIALOG_BUTTON_OK) { 698 if (button == ui::DIALOG_BUTTON_OK) {
773 if (IsSubmitPausedOn(wallet::VERIFY_CVV)) 699 if (IsSubmitPausedOn(wallet::VERIFY_CVV))
774 return true; 700 return true;
775 701
776 if (ShouldShowSpinner()) 702 if (ShouldShowSpinner() || is_submitting_)
777 return false; 703 return false;
778 704
779 if (is_submitting_) {
780 return autocheckout_state_ == AUTOCHECKOUT_SUCCESS ||
781 autocheckout_state_ == AUTOCHECKOUT_ERROR;
782 }
783
784 return true; 705 return true;
785 } 706 }
786 707
787 DCHECK_EQ(ui::DIALOG_BUTTON_CANCEL, button); 708 DCHECK_EQ(ui::DIALOG_BUTTON_CANCEL, button);
788 return !is_submitting_ || IsSubmitPausedOn(wallet::VERIFY_CVV); 709 return !is_submitting_ || IsSubmitPausedOn(wallet::VERIFY_CVV);
789 } 710 }
790 711
791 DialogOverlayState AutofillDialogControllerImpl::GetDialogOverlay() const { 712 DialogOverlayState AutofillDialogControllerImpl::GetDialogOverlay() const {
792 bool show_wallet_interstitial = IsPayingWithWallet() && is_submitting_ && 713 bool show_wallet_interstitial = IsPayingWithWallet() && is_submitting_ &&
793 !IsSubmitPausedOn(wallet::VERIFY_CVV) && 714 !IsSubmitPausedOn(wallet::VERIFY_CVV) &&
(...skipping 420 matching lines...) Expand 10 before | Expand all | Expand 10 after
1214 } 1135 }
1215 1136
1216 gfx::Image icon; 1137 gfx::Image icon;
1217 account_chooser_model_.GetIconAt( 1138 account_chooser_model_.GetIconAt(
1218 account_chooser_model_.GetIndexOfCommandId( 1139 account_chooser_model_.GetIndexOfCommandId(
1219 account_chooser_model_.checked_item()), 1140 account_chooser_model_.checked_item()),
1220 &icon); 1141 &icon);
1221 return icon; 1142 return icon;
1222 } 1143 }
1223 1144
1224 bool AutofillDialogControllerImpl::ShouldShowDetailArea() const {
1225 // Hide the detail area when Autocheckout is running or there was an error (as
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 }
1235
1236 gfx::Image AutofillDialogControllerImpl::ButtonStripImage() const { 1145 gfx::Image AutofillDialogControllerImpl::ButtonStripImage() const {
1237 if (ShouldShowDetailArea() && IsPayingWithWallet()) { 1146 if (IsPayingWithWallet()) {
1238 return ui::ResourceBundle::GetSharedInstance().GetImageNamed( 1147 return ui::ResourceBundle::GetSharedInstance().GetImageNamed(
1239 IDR_WALLET_LOGO); 1148 IDR_WALLET_LOGO);
1240 } 1149 }
1241 1150
1242 return gfx::Image(); 1151 return gfx::Image();
1243 } 1152 }
1244 1153
1245 string16 AutofillDialogControllerImpl::LabelForSection(DialogSection section) 1154 string16 AutofillDialogControllerImpl::LabelForSection(DialogSection section)
1246 const { 1155 const {
1247 switch (section) { 1156 switch (section) {
(...skipping 540 matching lines...) Expand 10 before | Expand all | Expand 10 after
1788 return ui::ResourceBundle::GetSharedInstance().GetImageNamed( 1697 return ui::ResourceBundle::GetSharedInstance().GetImageNamed(
1789 IDR_PRODUCT_LOGO_NAME_48); 1698 IDR_PRODUCT_LOGO_NAME_48);
1790 } 1699 }
1791 1700
1792 return gfx::Image(); 1701 return gfx::Image();
1793 } 1702 }
1794 1703
1795 void AutofillDialogControllerImpl::ViewClosed() { 1704 void AutofillDialogControllerImpl::ViewClosed() {
1796 GetManager()->RemoveObserver(this); 1705 GetManager()->RemoveObserver(this);
1797 1706
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 1707 // Called from here rather than in ~AutofillDialogControllerImpl as this
1802 // relies on virtual methods that change to their base class in the dtor. 1708 // relies on virtual methods that change to their base class in the dtor.
1803 MaybeShowCreditCardBubble(); 1709 MaybeShowCreditCardBubble();
1804 1710
1805 delete this; 1711 delete this;
1806 } 1712 }
1807 1713
1808 std::vector<DialogNotification> AutofillDialogControllerImpl:: 1714 std::vector<DialogNotification> AutofillDialogControllerImpl::
1809 CurrentNotifications() { 1715 CurrentNotifications() {
1810 std::vector<DialogNotification> notifications; 1716 std::vector<DialogNotification> notifications;
(...skipping 25 matching lines...) Expand all
1836 IDS_AUTOFILL_DIALOG_COMPLETE_WITHOUT_WALLET, 1742 IDS_AUTOFILL_DIALOG_COMPLETE_WITHOUT_WALLET,
1837 account_chooser_model_.wallet_error_message()))); 1743 account_chooser_model_.wallet_error_message())));
1838 } 1744 }
1839 1745
1840 if (IsSubmitPausedOn(wallet::VERIFY_CVV)) { 1746 if (IsSubmitPausedOn(wallet::VERIFY_CVV)) {
1841 notifications.push_back(DialogNotification( 1747 notifications.push_back(DialogNotification(
1842 DialogNotification::REQUIRED_ACTION, 1748 DialogNotification::REQUIRED_ACTION,
1843 l10n_util::GetStringUTF16(IDS_AUTOFILL_DIALOG_VERIFY_CVV))); 1749 l10n_util::GetStringUTF16(IDS_AUTOFILL_DIALOG_VERIFY_CVV)));
1844 } 1750 }
1845 1751
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_) { 1752 if (!wallet_server_validation_recoverable_) {
1859 notifications.push_back(DialogNotification( 1753 notifications.push_back(DialogNotification(
1860 DialogNotification::REQUIRED_ACTION, 1754 DialogNotification::REQUIRED_ACTION,
1861 l10n_util::GetStringUTF16( 1755 l10n_util::GetStringUTF16(
1862 IDS_AUTOFILL_DIALOG_FAILED_TO_SAVE_WALLET_DATA))); 1756 IDS_AUTOFILL_DIALOG_FAILED_TO_SAVE_WALLET_DATA)));
1863 } 1757 }
1864 1758
1865 if (choose_another_instrument_or_address_) { 1759 if (choose_another_instrument_or_address_) {
1866 notifications.push_back(DialogNotification( 1760 notifications.push_back(DialogNotification(
1867 DialogNotification::REQUIRED_ACTION, 1761 DialogNotification::REQUIRED_ACTION,
1868 l10n_util::GetStringUTF16( 1762 l10n_util::GetStringUTF16(
1869 IDS_AUTOFILL_DIALOG_CHOOSE_DIFFERENT_WALLET_INSTRUMENT))); 1763 IDS_AUTOFILL_DIALOG_CHOOSE_DIFFERENT_WALLET_INSTRUMENT)));
1870 } 1764 }
1871 1765
1872 if (should_show_wallet_promo_ && ShouldShowDetailArea() && 1766 if (should_show_wallet_promo_ && notifications.empty()) {
1873 notifications.empty()) {
1874 if (IsPayingWithWallet() && HasCompleteWallet()) { 1767 if (IsPayingWithWallet() && HasCompleteWallet()) {
1875 notifications.push_back(DialogNotification( 1768 notifications.push_back(DialogNotification(
1876 DialogNotification::EXPLANATORY_MESSAGE, 1769 DialogNotification::EXPLANATORY_MESSAGE,
1877 l10n_util::GetStringUTF16( 1770 l10n_util::GetStringUTF16(
1878 IDS_AUTOFILL_DIALOG_DETAILS_FROM_WALLET))); 1771 IDS_AUTOFILL_DIALOG_DETAILS_FROM_WALLET)));
1879 } else if ((IsPayingWithWallet() && !HasCompleteWallet()) || 1772 } else if ((IsPayingWithWallet() && !HasCompleteWallet()) ||
1880 has_shown_wallet_usage_confirmation_) { 1773 has_shown_wallet_usage_confirmation_) {
1881 DialogNotification notification( 1774 DialogNotification notification(
1882 DialogNotification::WALLET_USAGE_CONFIRMATION, 1775 DialogNotification::WALLET_USAGE_CONFIRMATION,
1883 l10n_util::GetStringUTF16( 1776 l10n_util::GetStringUTF16(
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
1939 void AutofillDialogControllerImpl::OverlayButtonPressed() { 1832 void AutofillDialogControllerImpl::OverlayButtonPressed() {
1940 DCHECK(is_submitting_); 1833 DCHECK(is_submitting_);
1941 DCHECK(full_wallet_); 1834 DCHECK(full_wallet_);
1942 profile_->GetPrefs()->SetBoolean(::prefs::kAutofillDialogHasPaidWithWallet, 1835 profile_->GetPrefs()->SetBoolean(::prefs::kAutofillDialogHasPaidWithWallet,
1943 true); 1836 true);
1944 FinishSubmit(); 1837 FinishSubmit();
1945 } 1838 }
1946 1839
1947 bool AutofillDialogControllerImpl::OnCancel() { 1840 bool AutofillDialogControllerImpl::OnCancel() {
1948 HidePopup(); 1841 HidePopup();
1949 if (autocheckout_state_ == AUTOCHECKOUT_NOT_STARTED && !is_submitting_) 1842 if (!is_submitting_)
1950 LogOnCancelMetrics(); 1843 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()); 1844 callback_.Run(NULL, std::string());
1957 return true; 1845 return true;
1958 } 1846 }
1959 1847
1960 bool AutofillDialogControllerImpl::OnAccept() { 1848 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; 1849 choose_another_instrument_or_address_ = false;
1967 wallet_server_validation_recoverable_ = true; 1850 wallet_server_validation_recoverable_ = true;
1968 HidePopup(); 1851 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 1852
1987 SetIsSubmitting(true); 1853 SetIsSubmitting(true);
1988 if (IsSubmitPausedOn(wallet::VERIFY_CVV)) { 1854 if (IsSubmitPausedOn(wallet::VERIFY_CVV)) {
1989 DCHECK(!active_instrument_id_.empty()); 1855 DCHECK(!active_instrument_id_.empty());
1990 GetWalletClient()->AuthenticateInstrument( 1856 GetWalletClient()->AuthenticateInstrument(
1991 active_instrument_id_, 1857 active_instrument_id_,
1992 UTF16ToUTF8(view_->GetCvc())); 1858 UTF16ToUTF8(view_->GetCvc()));
1993 } else if (IsPayingWithWallet()) { 1859 } else if (IsPayingWithWallet()) {
1994 // TODO(dbeam): disallow interacting with the dialog while submitting. 1860 // TODO(dbeam): disallow interacting with the dialog while submitting.
1995 // http://crbug.com/230932 1861 // http://crbug.com/230932
(...skipping 164 matching lines...) Expand 10 before | Expand all | Expand 10 after
2160 } 2026 }
2161 2027
2162 void AutofillDialogControllerImpl::OnDidGetFullWallet( 2028 void AutofillDialogControllerImpl::OnDidGetFullWallet(
2163 scoped_ptr<wallet::FullWallet> full_wallet) { 2029 scoped_ptr<wallet::FullWallet> full_wallet) {
2164 DCHECK(is_submitting_ && IsPayingWithWallet()); 2030 DCHECK(is_submitting_ && IsPayingWithWallet());
2165 ScopedViewUpdates updates(view_.get()); 2031 ScopedViewUpdates updates(view_.get());
2166 2032
2167 full_wallet_ = full_wallet.Pass(); 2033 full_wallet_ = full_wallet.Pass();
2168 2034
2169 if (full_wallet_->required_actions().empty()) { 2035 if (full_wallet_->required_actions().empty()) {
2170 UpdateAutocheckoutStep(AUTOCHECKOUT_STEP_PROXY_CARD,
2171 AUTOCHECKOUT_STEP_COMPLETED);
2172 FinishSubmit(); 2036 FinishSubmit();
2173 return; 2037 return;
2174 } 2038 }
2175 2039
2176 SetAutocheckoutState(AUTOCHECKOUT_NOT_STARTED);
2177
2178 switch (full_wallet_->required_actions()[0]) { 2040 switch (full_wallet_->required_actions()[0]) {
2179 case wallet::CHOOSE_ANOTHER_INSTRUMENT_OR_ADDRESS: 2041 case wallet::CHOOSE_ANOTHER_INSTRUMENT_OR_ADDRESS:
2180 choose_another_instrument_or_address_ = true; 2042 choose_another_instrument_or_address_ = true;
2181 SetIsSubmitting(false); 2043 SetIsSubmitting(false);
2182 GetWalletItems(); 2044 GetWalletItems();
2183 view_->UpdateNotificationArea(); 2045 view_->UpdateNotificationArea();
2184 view_->UpdateButtonStrip(); 2046 view_->UpdateButtonStrip();
2185 break; 2047 break;
2186 2048
2187 case wallet::VERIFY_CVV: 2049 case wallet::VERIFY_CVV:
(...skipping 150 matching lines...) Expand 10 before | Expand all | Expand 10 after
2338 content::WebContents* contents, 2200 content::WebContents* contents,
2339 const FormData& form_structure, 2201 const FormData& form_structure,
2340 const GURL& source_url, 2202 const GURL& source_url,
2341 const DialogType dialog_type, 2203 const DialogType dialog_type,
2342 const base::Callback<void(const FormStructure*, 2204 const base::Callback<void(const FormStructure*,
2343 const std::string&)>& callback) 2205 const std::string&)>& callback)
2344 : WebContentsObserver(contents), 2206 : WebContentsObserver(contents),
2345 profile_(Profile::FromBrowserContext(contents->GetBrowserContext())), 2207 profile_(Profile::FromBrowserContext(contents->GetBrowserContext())),
2346 initial_user_state_(AutofillMetrics::DIALOG_USER_STATE_UNKNOWN), 2208 initial_user_state_(AutofillMetrics::DIALOG_USER_STATE_UNKNOWN),
2347 dialog_type_(dialog_type), 2209 dialog_type_(dialog_type),
2348 form_structure_(form_structure, std::string()), 2210 form_structure_(form_structure),
2349 invoked_from_same_origin_(true), 2211 invoked_from_same_origin_(true),
2350 source_url_(source_url), 2212 source_url_(source_url),
2351 callback_(callback), 2213 callback_(callback),
2352 account_chooser_model_(this, profile_->GetPrefs(), metric_logger_, 2214 account_chooser_model_(this, profile_->GetPrefs(), metric_logger_,
2353 dialog_type), 2215 dialog_type),
2354 wallet_client_(profile_->GetRequestContext(), this), 2216 wallet_client_(profile_->GetRequestContext(), this),
2355 suggested_email_(this), 2217 suggested_email_(this),
2356 suggested_cc_(this), 2218 suggested_cc_(this),
2357 suggested_billing_(this), 2219 suggested_billing_(this),
2358 suggested_cc_billing_(this), 2220 suggested_cc_billing_(this),
2359 suggested_shipping_(this), 2221 suggested_shipping_(this),
2360 cares_about_shipping_(true), 2222 cares_about_shipping_(true),
2361 input_showing_popup_(NULL), 2223 input_showing_popup_(NULL),
2362 weak_ptr_factory_(this), 2224 weak_ptr_factory_(this),
2363 should_show_wallet_promo_(!profile_->GetPrefs()->GetBoolean( 2225 should_show_wallet_promo_(!profile_->GetPrefs()->GetBoolean(
2364 ::prefs::kAutofillDialogHasPaidWithWallet)), 2226 ::prefs::kAutofillDialogHasPaidWithWallet)),
2365 has_shown_wallet_usage_confirmation_(false), 2227 has_shown_wallet_usage_confirmation_(false),
2366 has_accepted_legal_documents_(false), 2228 has_accepted_legal_documents_(false),
2367 is_submitting_(false), 2229 is_submitting_(false),
2368 choose_another_instrument_or_address_(false), 2230 choose_another_instrument_or_address_(false),
2369 wallet_server_validation_recoverable_(true), 2231 wallet_server_validation_recoverable_(true),
2370 data_was_passed_back_(false), 2232 data_was_passed_back_(false),
2371 autocheckout_state_(AUTOCHECKOUT_NOT_STARTED), 2233 was_ui_latency_logged_(false) {
2372 was_ui_latency_logged_(false),
2373 deemphasized_render_view_(false) {
2374 // TODO(estade): remove duplicates from |form_structure|? 2234 // TODO(estade): remove duplicates from |form_structure|?
2375 DCHECK(!callback_.is_null()); 2235 DCHECK(!callback_.is_null());
2376 } 2236 }
2377 2237
2378 AutofillDialogView* AutofillDialogControllerImpl::CreateView() { 2238 AutofillDialogView* AutofillDialogControllerImpl::CreateView() {
2379 return AutofillDialogView::Create(this); 2239 return AutofillDialogView::Create(this);
2380 } 2240 }
2381 2241
2382 PersonalDataManager* AutofillDialogControllerImpl::GetManager() { 2242 PersonalDataManager* AutofillDialogControllerImpl::GetManager() {
2383 return PersonalDataManagerFactory::GetForProfile(profile_); 2243 return PersonalDataManagerFactory::GetForProfile(profile_);
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after
2457 GetWalletClient()->CancelRequests(); 2317 GetWalletClient()->CancelRequests();
2458 LogDialogLatencyToShow(); 2318 LogDialogLatencyToShow();
2459 } 2319 }
2460 2320
2461 void AutofillDialogControllerImpl::DisableWallet( 2321 void AutofillDialogControllerImpl::DisableWallet(
2462 wallet::WalletClient::ErrorType error_type) { 2322 wallet::WalletClient::ErrorType error_type) {
2463 signin_helper_.reset(); 2323 signin_helper_.reset();
2464 wallet_items_.reset(); 2324 wallet_items_.reset();
2465 wallet_errors_.clear(); 2325 wallet_errors_.clear();
2466 GetWalletClient()->CancelRequests(); 2326 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); 2327 SetIsSubmitting(false);
2476 account_chooser_model_.SetHadWalletError(WalletErrorMessage(error_type)); 2328 account_chooser_model_.SetHadWalletError(WalletErrorMessage(error_type));
2477 } 2329 }
2478 2330
2479 void AutofillDialogControllerImpl::SuggestionsUpdated() { 2331 void AutofillDialogControllerImpl::SuggestionsUpdated() {
2480 ScopedViewUpdates updates(view_.get()); 2332 ScopedViewUpdates updates(view_.get());
2481 2333
2482 const DetailOutputMap snapshot = TakeUserInputSnapshot(); 2334 const DetailOutputMap snapshot = TakeUserInputSnapshot();
2483 2335
2484 suggested_email_.Reset(); 2336 suggested_email_.Reset();
(...skipping 559 matching lines...) Expand 10 before | Expand all | Expand 10 after
3044 } 2896 }
3045 2897
3046 const wallet::Address* active_address = ActiveShippingAddress(); 2898 const wallet::Address* active_address = ActiveShippingAddress();
3047 if (!IsManuallyEditingSection(SECTION_SHIPPING) && 2899 if (!IsManuallyEditingSection(SECTION_SHIPPING) &&
3048 !ShouldUseBillingForShipping() && 2900 !ShouldUseBillingForShipping() &&
3049 IsShippingAddressRequired()) { 2901 IsShippingAddressRequired()) {
3050 active_address_id_ = active_address->object_id(); 2902 active_address_id_ = active_address->object_id();
3051 DCHECK(!active_address_id_.empty()); 2903 DCHECK(!active_address_id_.empty());
3052 } 2904 }
3053 2905
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 = 2906 scoped_ptr<wallet::Instrument> inputted_instrument =
3060 CreateTransientInstrument(); 2907 CreateTransientInstrument();
3061 if (inputted_instrument && IsEditingExistingData(SECTION_CC_BILLING)) { 2908 if (inputted_instrument && IsEditingExistingData(SECTION_CC_BILLING)) {
3062 inputted_instrument->set_object_id(active_instrument->object_id()); 2909 inputted_instrument->set_object_id(active_instrument->object_id());
3063 DCHECK(!inputted_instrument->object_id().empty()); 2910 DCHECK(!inputted_instrument->object_id().empty());
3064 } 2911 }
3065 2912
3066 scoped_ptr<wallet::Address> inputted_address; 2913 scoped_ptr<wallet::Address> inputted_address;
3067 if (active_address_id_.empty() && IsShippingAddressRequired()) { 2914 if (active_address_id_.empty() && IsShippingAddressRequired()) {
3068 if (ShouldUseBillingForShipping()) { 2915 if (ShouldUseBillingForShipping()) {
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after
3133 void AutofillDialogControllerImpl::GetFullWallet() { 2980 void AutofillDialogControllerImpl::GetFullWallet() {
3134 DCHECK(is_submitting_); 2981 DCHECK(is_submitting_);
3135 DCHECK(IsPayingWithWallet()); 2982 DCHECK(IsPayingWithWallet());
3136 DCHECK(wallet_items_); 2983 DCHECK(wallet_items_);
3137 DCHECK(!active_instrument_id_.empty()); 2984 DCHECK(!active_instrument_id_.empty());
3138 DCHECK(!active_address_id_.empty() || !IsShippingAddressRequired()); 2985 DCHECK(!active_address_id_.empty() || !IsShippingAddressRequired());
3139 2986
3140 std::vector<wallet::WalletClient::RiskCapability> capabilities; 2987 std::vector<wallet::WalletClient::RiskCapability> capabilities;
3141 capabilities.push_back(wallet::WalletClient::VERIFY_CVC); 2988 capabilities.push_back(wallet::WalletClient::VERIFY_CVC);
3142 2989
3143 UpdateAutocheckoutStep(AUTOCHECKOUT_STEP_PROXY_CARD,
3144 AUTOCHECKOUT_STEP_STARTED);
3145
3146 GetWalletClient()->GetFullWallet(wallet::WalletClient::FullWalletRequest( 2990 GetWalletClient()->GetFullWallet(wallet::WalletClient::FullWalletRequest(
3147 active_instrument_id_, 2991 active_instrument_id_,
3148 active_address_id_, 2992 active_address_id_,
3149 source_url_, 2993 source_url_,
3150 wallet_items_->google_transaction_id(), 2994 wallet_items_->google_transaction_id(),
3151 capabilities, 2995 capabilities,
3152 wallet_items_->HasRequiredAction(wallet::SETUP_WALLET))); 2996 wallet_items_->HasRequiredAction(wallet::SETUP_WALLET)));
3153 } 2997 }
3154 2998
3155 void AutofillDialogControllerImpl::HandleSaveOrUpdateRequiredActions( 2999 void AutofillDialogControllerImpl::HandleSaveOrUpdateRequiredActions(
3156 const std::vector<wallet::RequiredAction>& required_actions) { 3000 const std::vector<wallet::RequiredAction>& required_actions) {
3157 DCHECK(!required_actions.empty()); 3001 DCHECK(!required_actions.empty());
3158 3002
3159 // TODO(ahutter): Invesitigate if we need to support more generic actions on 3003 // TODO(ahutter): Invesitigate if we need to support more generic actions on
3160 // this call such as GAIA_AUTH. See crbug.com/243457. 3004 // this call such as GAIA_AUTH. See crbug.com/243457.
3161 for (std::vector<wallet::RequiredAction>::const_iterator iter = 3005 for (std::vector<wallet::RequiredAction>::const_iterator iter =
3162 required_actions.begin(); 3006 required_actions.begin();
3163 iter != required_actions.end(); ++iter) { 3007 iter != required_actions.end(); ++iter) {
3164 if (*iter != wallet::INVALID_FORM_FIELD) { 3008 if (*iter != wallet::INVALID_FORM_FIELD) {
3165 // TODO(dbeam): handle this more gracefully. 3009 // TODO(dbeam): handle this more gracefully.
3166 DisableWallet(wallet::WalletClient::UNKNOWN_ERROR); 3010 DisableWallet(wallet::WalletClient::UNKNOWN_ERROR);
3167 } 3011 }
3168 } 3012 }
3169 SetAutocheckoutState(AUTOCHECKOUT_NOT_STARTED);
3170 SetIsSubmitting(false); 3013 SetIsSubmitting(false);
3171 } 3014 }
3172 3015
3173 void AutofillDialogControllerImpl::FinishSubmit() { 3016 void AutofillDialogControllerImpl::FinishSubmit() {
3174 if (IsPayingWithWallet() && 3017 if (IsPayingWithWallet() &&
3175 !profile_->GetPrefs()->GetBoolean( 3018 !profile_->GetPrefs()->GetBoolean(
3176 ::prefs::kAutofillDialogHasPaidWithWallet)) { 3019 ::prefs::kAutofillDialogHasPaidWithWallet)) {
3177 if (GetDialogType() == DIALOG_TYPE_REQUEST_AUTOCOMPLETE) { 3020 if (GetDialogType() == DIALOG_TYPE_REQUEST_AUTOCOMPLETE) {
3178 // To get past this point, the view must call back OverlayButtonPressed. 3021 // To get past this point, the view must call back OverlayButtonPressed.
3179 #if defined(TOOLKIT_VIEWS) 3022 #if defined(TOOLKIT_VIEWS)
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
3228 // stop trying to pay with Wallet on future runs of the dialog. On the other 3071 // stop trying to pay with Wallet on future runs of the dialog. On the other
3229 // hand, if there was an error that prevented the user from having the choice 3072 // hand, if there was an error that prevented the user from having the choice
3230 // of using Wallet, leave the pref alone. 3073 // of using Wallet, leave the pref alone.
3231 if (!account_chooser_model_.HadWalletError() && 3074 if (!account_chooser_model_.HadWalletError() &&
3232 account_chooser_model_.HasAccountsToChoose()) { 3075 account_chooser_model_.HasAccountsToChoose()) {
3233 profile_->GetPrefs()->SetBoolean( 3076 profile_->GetPrefs()->SetBoolean(
3234 ::prefs::kAutofillDialogPayWithoutWallet, 3077 ::prefs::kAutofillDialogPayWithoutWallet,
3235 !account_chooser_model_.WalletIsSelected()); 3078 !account_chooser_model_.WalletIsSelected());
3236 } 3079 }
3237 3080
3238 if (GetDialogType() == DIALOG_TYPE_AUTOCHECKOUT) {
3239 // Stop observing PersonalDataManager to avoid the dialog redrawing while
3240 // in an Autocheckout flow.
3241 GetManager()->RemoveObserver(this);
3242 autocheckout_started_timestamp_ = base::Time::Now();
3243 SetAutocheckoutState(AUTOCHECKOUT_IN_PROGRESS);
3244 }
3245
3246 LogOnFinishSubmitMetrics(); 3081 LogOnFinishSubmitMetrics();
3247 3082
3248 // Callback should be called as late as possible. 3083 // Callback should be called as late as possible.
3249 callback_.Run(&form_structure_, !wallet_items_ ? std::string() : 3084 callback_.Run(&form_structure_, !wallet_items_ ? std::string() :
3250 wallet_items_->google_transaction_id()); 3085 wallet_items_->google_transaction_id());
3251 data_was_passed_back_ = true; 3086 data_was_passed_back_ = true;
3252 3087
3253 // This might delete us. 3088 // This might delete us.
3254 if (GetDialogType() == DIALOG_TYPE_REQUEST_AUTOCOMPLETE) 3089 if (GetDialogType() == DIALOG_TYPE_REQUEST_AUTOCOMPLETE)
3255 Hide(); 3090 Hide();
(...skipping 130 matching lines...) Expand 10 before | Expand all | Expand 10 after
3386 void AutofillDialogControllerImpl::LogDialogLatencyToShow() { 3221 void AutofillDialogControllerImpl::LogDialogLatencyToShow() {
3387 if (was_ui_latency_logged_) 3222 if (was_ui_latency_logged_)
3388 return; 3223 return;
3389 3224
3390 GetMetricLogger().LogDialogLatencyToShow( 3225 GetMetricLogger().LogDialogLatencyToShow(
3391 GetDialogType(), 3226 GetDialogType(),
3392 base::Time::Now() - dialog_shown_timestamp_); 3227 base::Time::Now() - dialog_shown_timestamp_);
3393 was_ui_latency_logged_ = true; 3228 was_ui_latency_logged_ = true;
3394 } 3229 }
3395 3230
3396 void AutofillDialogControllerImpl::SetAutocheckoutState(
3397 AutocheckoutState autocheckout_state) {
3398 if (autocheckout_state_ == autocheckout_state)
3399 return;
3400
3401 autocheckout_state_ = autocheckout_state;
3402 if (view_) {
3403 ScopedViewUpdates updates(view_.get());
3404 view_->UpdateDetailArea();
3405 view_->UpdateButtonStrip();
3406 view_->UpdateAutocheckoutStepsArea();
3407 view_->UpdateNotificationArea();
3408 }
3409 }
3410
3411 void AutofillDialogControllerImpl::DeemphasizeRenderView() {
3412 web_contents()->GetRenderViewHost()->Send(
3413 new ChromeViewMsg_SetVisuallyDeemphasized(
3414 web_contents()->GetRenderViewHost()->GetRoutingID(), true));
3415 deemphasized_render_view_ = true;
3416 }
3417
3418 AutofillMetrics::DialogInitialUserStateMetric 3231 AutofillMetrics::DialogInitialUserStateMetric
3419 AutofillDialogControllerImpl::GetInitialUserState() const { 3232 AutofillDialogControllerImpl::GetInitialUserState() const {
3420 // Consider a user to be an Autofill user if the user has any credit cards 3233 // Consider a user to be an Autofill user if the user has any credit cards
3421 // or addresses saved. Check that the item count is greater than 2 because 3234 // or addresses saved. Check that the item count is greater than 2 because
3422 // an "empty" menu still has the "add new" menu item and "manage" menu item. 3235 // an "empty" menu still has the "add new" menu item and "manage" menu item.
3423 const bool has_autofill_profiles = 3236 const bool has_autofill_profiles =
3424 suggested_cc_.GetItemCount() > 2 || 3237 suggested_cc_.GetItemCount() > 2 ||
3425 suggested_billing_.GetItemCount() > 2; 3238 suggested_billing_.GetItemCount() > 2;
3426 3239
3427 if (SignedInState() != SIGNED_IN) { 3240 if (SignedInState() != SIGNED_IN) {
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
3471 GetValueFromSection(SECTION_EMAIL, EMAIL_ADDRESS)); 3284 GetValueFromSection(SECTION_EMAIL, EMAIL_ADDRESS));
3472 3285
3473 ShowNewCreditCardBubble(newly_saved_card_.Pass(), 3286 ShowNewCreditCardBubble(newly_saved_card_.Pass(),
3474 billing_profile.Pass()); 3287 billing_profile.Pass());
3475 return; 3288 return;
3476 } 3289 }
3477 3290
3478 if (!full_wallet_ || !full_wallet_->billing_address()) 3291 if (!full_wallet_ || !full_wallet_->billing_address())
3479 return; 3292 return;
3480 3293
3481 // Don't show GeneratedCardBubble if Autocheckout failed.
3482 if (GetDialogType() == DIALOG_TYPE_AUTOCHECKOUT &&
3483 autocheckout_state_ != AUTOCHECKOUT_SUCCESS) {
3484 return;
3485 }
3486
3487 base::string16 backing_last_four; 3294 base::string16 backing_last_four;
3488 if (ActiveInstrument()) { 3295 if (ActiveInstrument()) {
3489 backing_last_four = ActiveInstrument()->TypeAndLastFourDigits(); 3296 backing_last_four = ActiveInstrument()->TypeAndLastFourDigits();
3490 } else { 3297 } else {
3491 DetailOutputMap output; 3298 DetailOutputMap output;
3492 view_->GetUserInput(SECTION_CC_BILLING, &output); 3299 view_->GetUserInput(SECTION_CC_BILLING, &output);
3493 CreditCard card; 3300 CreditCard card;
3494 GetBillingInfoFromOutputs(output, &card, NULL, NULL); 3301 GetBillingInfoFromOutputs(output, &card, NULL, NULL);
3495 backing_last_four = card.TypeAndLastFourDigits(); 3302 backing_last_four = card.TypeAndLastFourDigits();
3496 } 3303 }
3497 #if !defined(OS_ANDROID) 3304 #if !defined(OS_ANDROID)
3498 GeneratedCreditCardBubbleController::Show( 3305 GeneratedCreditCardBubbleController::Show(
3499 web_contents(), 3306 web_contents(),
3500 backing_last_four, 3307 backing_last_four,
3501 full_wallet_->TypeAndLastFourDigits()); 3308 full_wallet_->TypeAndLastFourDigits());
3502 #endif 3309 #endif
3503 } 3310 }
3504 3311
3505 } // namespace autofill 3312 } // namespace autofill
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698