1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #ifndef CHROME_BROWSER_UI_VIEWS_AUTOFILL_CARD_UNMASK_PROMPT_VIEWS_H_
6 #define CHROME_BROWSER_UI_VIEWS_AUTOFILL_CARD_UNMASK_PROMPT_VIEWS_H_
8 #include "chrome/browser/ui/autofill/autofill_dialog_models.h"
9 #include "components/autofill/core/browser/ui/card_unmask_prompt_view.h"
10 #include "ui/gfx/animation/animation_delegate.h"
11 #include "ui/gfx/animation/slide_animation.h"
12 #include "ui/views/controls/combobox/combobox_listener.h"
13 #include "ui/views/controls/link_listener.h"
14 #include "ui/views/controls/textfield/textfield_controller.h"
15 #include "ui/views/window/dialog_delegate.h"
31 class DecoratedTextfield
;
33 class CardUnmaskPromptViews
: public CardUnmaskPromptView
,
34 views::ComboboxListener
,
35 views::DialogDelegateView
,
36 views::TextfieldController
,
38 gfx::AnimationDelegate
{
40 CardUnmaskPromptViews(CardUnmaskPromptController
* controller
,
41 content::WebContents
* web_contents
);
42 ~CardUnmaskPromptViews() override
;
44 // CardUnmaskPromptView
46 void ControllerGone() override
;
47 void DisableAndWaitForVerification() override
;
48 void GotVerificationResult(const base::string16
& error_message
,
49 bool allow_retry
) override
;
51 // views::DialogDelegateView
52 View
* GetContentsView() override
;
53 views::View
* CreateFootnoteView() override
;
56 gfx::Size
GetPreferredSize() const override
;
57 void Layout() override
;
58 int GetHeightForWidth(int width
) const override
;
59 void OnNativeThemeChanged(const ui::NativeTheme
* theme
) override
;
60 ui::ModalType
GetModalType() const override
;
61 base::string16
GetWindowTitle() const override
;
62 void DeleteDelegate() override
;
63 int GetDialogButtons() const override
;
64 base::string16
GetDialogButtonLabel(ui::DialogButton button
) const override
;
65 bool ShouldDefaultButtonBeBlue() const override
;
66 bool IsDialogButtonEnabled(ui::DialogButton button
) const override
;
67 views::View
* GetInitiallyFocusedView() override
;
68 bool Cancel() override
;
69 bool Accept() override
;
71 // views::TextfieldController
72 void ContentsChanged(views::Textfield
* sender
,
73 const base::string16
& new_contents
) override
;
75 // views::ComboboxListener
76 void OnPerformAction(views::Combobox
* combobox
) override
;
78 // views::LinkListener
79 void LinkClicked(views::Link
* source
, int event_flags
) override
;
81 // gfx::AnimationDelegate
82 void AnimationProgressed(const gfx::Animation
* animation
) override
;
85 friend class CardUnmaskPromptViewTesterViews
;
87 // A view that allows changing the opacity of its contents.
88 class FadeOutView
: public views::View
{
91 ~FadeOutView() override
;
94 void PaintChildren(const ui::PaintContext
& context
) override
;
95 void OnPaint(gfx::Canvas
* canvas
) override
;
97 void set_fade_everything(bool fade_everything
) {
98 fade_everything_
= fade_everything
;
101 // Set the alpha channel for this view. 0 is transparent and 255 is opaque.
102 void SetAlpha(uint8_t alpha
);
105 // Controls whether the background and border are faded out as well. Default
106 // is false, meaning only children are faded.
107 bool fade_everything_
;
109 // The alpha channel for this view. 0 is transparent and 255 is opaque.
112 DISALLOW_COPY_AND_ASSIGN(FadeOutView
);
115 void InitIfNecessary();
116 void SetRetriableErrorMessage(const base::string16
& message
);
117 bool ExpirationDateIsValid() const;
118 void SetInputsEnabled(bool enabled
);
119 void ShowNewCardLink();
122 CardUnmaskPromptController
* controller_
;
123 content::WebContents
* web_contents_
;
125 views::View
* main_contents_
;
127 // Expository language at the top of the dialog.
128 views::Label
* instructions_
;
130 // The error label for permanent errors (where the user can't retry).
131 views::Label
* permanent_error_label_
;
133 // Holds the cvc and expiration inputs.
134 views::View
* input_row_
;
136 DecoratedTextfield
* cvc_input_
;
138 views::Combobox
* month_input_
;
139 views::Combobox
* year_input_
;
141 MonthComboboxModel month_combobox_model_
;
142 YearComboboxModel year_combobox_model_
;
144 views::Link
* new_card_link_
;
146 // The error icon and label for most errors, which live beneath the inputs.
147 views::ImageView
* error_icon_
;
148 views::Label
* error_label_
;
150 FadeOutView
* storage_row_
;
151 views::Checkbox
* storage_checkbox_
;
153 FadeOutView
* progress_overlay_
;
154 views::Throbber
* progress_throbber_
;
155 views::Label
* progress_label_
;
157 gfx::SlideAnimation overlay_animation_
;
159 base::WeakPtrFactory
<CardUnmaskPromptViews
> weak_ptr_factory_
;
161 DISALLOW_COPY_AND_ASSIGN(CardUnmaskPromptViews
);
164 } // namespace autofill
166 #endif // CHROME_BROWSER_UI_VIEWS_AUTOFILL_CARD_UNMASK_PROMPT_VIEWS_H_