NaCl: Update revision in DEPS, r12770 -> r12773
[chromium-blink-merge.git] / chrome / browser / ui / views / autofill / autofill_dialog_views.h
blob0c6270cf462dfefd321b6e678936853213117965
1 // Copyright (c) 2012 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_AUTOFILL_DIALOG_VIEWS_H_
6 #define CHROME_BROWSER_UI_VIEWS_AUTOFILL_AUTOFILL_DIALOG_VIEWS_H_
8 #include <map>
9 #include <set>
11 #include "base/memory/scoped_vector.h"
12 #include "base/memory/weak_ptr.h"
13 #include "base/scoped_observer.h"
14 #include "chrome/browser/ui/autofill/autofill_dialog_types.h"
15 #include "chrome/browser/ui/autofill/autofill_dialog_view.h"
16 #include "chrome/browser/ui/autofill/autofill_dialog_view_delegate.h"
17 #include "ui/views/controls/button/button.h"
18 #include "ui/views/controls/button/menu_button.h"
19 #include "ui/views/controls/button/menu_button_listener.h"
20 #include "ui/views/controls/combobox/combobox_listener.h"
21 #include "ui/views/controls/link_listener.h"
22 #include "ui/views/controls/progress_bar.h"
23 #include "ui/views/controls/scroll_view.h"
24 #include "ui/views/controls/styled_label_listener.h"
25 #include "ui/views/controls/textfield/textfield_controller.h"
26 #include "ui/views/focus/focus_manager.h"
27 #include "ui/views/widget/widget_observer.h"
28 #include "ui/views/window/dialog_delegate.h"
30 namespace gfx {
31 class Image;
34 namespace views {
35 class BubbleBorder;
36 class Checkbox;
37 class Combobox;
38 class FocusManager;
39 class ImageView;
40 class Label;
41 class LabelButton;
42 class Link;
43 class MenuRunner;
44 class StyledLabel;
45 class WebView;
46 class Widget;
47 } // namespace views
49 namespace ui {
50 class ComboboxModel;
51 class KeyEvent;
54 namespace autofill {
56 class AutofillDialogSignInDelegate;
57 class DecoratedTextfield;
58 class InfoBubble;
60 // Views toolkit implementation of the Autofill dialog that handles the
61 // imperative autocomplete API call.
62 class AutofillDialogViews : public AutofillDialogView,
63 public views::DialogDelegateView,
64 public views::WidgetObserver,
65 public views::TextfieldController,
66 public views::FocusChangeListener,
67 public views::ComboboxListener,
68 public views::StyledLabelListener,
69 public views::MenuButtonListener {
70 public:
71 explicit AutofillDialogViews(AutofillDialogViewDelegate* delegate);
72 virtual ~AutofillDialogViews();
74 // AutofillDialogView implementation:
75 virtual void Show() OVERRIDE;
76 virtual void Hide() OVERRIDE;
77 virtual void UpdatesStarted() OVERRIDE;
78 virtual void UpdatesFinished() OVERRIDE;
79 virtual void UpdateAccountChooser() OVERRIDE;
80 virtual void UpdateButtonStrip() OVERRIDE;
81 virtual void UpdateOverlay() OVERRIDE;
82 virtual void UpdateDetailArea() OVERRIDE;
83 virtual void UpdateForErrors() OVERRIDE;
84 virtual void UpdateNotificationArea() OVERRIDE;
85 virtual void UpdateSection(DialogSection section) OVERRIDE;
86 virtual void UpdateErrorBubble() OVERRIDE;
87 virtual void FillSection(DialogSection section,
88 ServerFieldType originating_type) OVERRIDE;
89 virtual void GetUserInput(DialogSection section,
90 FieldValueMap* output) OVERRIDE;
91 virtual base::string16 GetCvc() OVERRIDE;
92 virtual bool HitTestInput(ServerFieldType type,
93 const gfx::Point& screen_point) OVERRIDE;
94 virtual bool SaveDetailsLocally() OVERRIDE;
95 virtual const content::NavigationController* ShowSignIn() OVERRIDE;
96 virtual void HideSignIn() OVERRIDE;
97 virtual void ModelChanged() OVERRIDE;
98 virtual void OnSignInResize(const gfx::Size& pref_size) OVERRIDE;
99 virtual void ValidateSection(DialogSection section) OVERRIDE;
101 // views::View implementation.
102 virtual gfx::Size GetPreferredSize() OVERRIDE;
103 virtual gfx::Size GetMinimumSize() OVERRIDE;
104 virtual void Layout() OVERRIDE;
105 virtual void OnNativeThemeChanged(const ui::NativeTheme* theme) OVERRIDE;
107 // views::DialogDelegate implementation:
108 virtual base::string16 GetWindowTitle() const OVERRIDE;
109 virtual void WindowClosing() OVERRIDE;
110 virtual void DeleteDelegate() OVERRIDE;
111 virtual views::View* CreateOverlayView() OVERRIDE;
112 virtual int GetDialogButtons() const OVERRIDE;
113 virtual int GetDefaultDialogButton() const OVERRIDE;
114 virtual base::string16 GetDialogButtonLabel(ui::DialogButton button) const
115 OVERRIDE;
116 virtual bool ShouldDefaultButtonBeBlue() const OVERRIDE;
117 virtual bool IsDialogButtonEnabled(ui::DialogButton button) const OVERRIDE;
118 virtual views::View* GetInitiallyFocusedView() OVERRIDE;
119 virtual views::View* CreateExtraView() OVERRIDE;
120 virtual views::View* CreateTitlebarExtraView() OVERRIDE;
121 virtual views::View* CreateFootnoteView() OVERRIDE;
122 virtual bool Cancel() OVERRIDE;
123 virtual bool Accept() OVERRIDE;
125 // views::WidgetObserver implementation:
126 virtual void OnWidgetClosing(views::Widget* widget) OVERRIDE;
127 virtual void OnWidgetBoundsChanged(views::Widget* widget,
128 const gfx::Rect& new_bounds) OVERRIDE;
130 // views::TextfieldController implementation:
131 virtual void ContentsChanged(views::Textfield* sender,
132 const base::string16& new_contents) OVERRIDE;
133 virtual bool HandleKeyEvent(views::Textfield* sender,
134 const ui::KeyEvent& key_event) OVERRIDE;
135 virtual bool HandleMouseEvent(views::Textfield* sender,
136 const ui::MouseEvent& key_event) OVERRIDE;
138 // views::FocusChangeListener implementation.
139 virtual void OnWillChangeFocus(views::View* focused_before,
140 views::View* focused_now) OVERRIDE;
141 virtual void OnDidChangeFocus(views::View* focused_before,
142 views::View* focused_now) OVERRIDE;
144 // views::ComboboxListener implementation:
145 virtual void OnPerformAction(views::Combobox* combobox) OVERRIDE;
147 // views::StyledLabelListener implementation:
148 virtual void StyledLabelLinkClicked(const gfx::Range& range, int event_flags)
149 OVERRIDE;
151 // views::MenuButtonListener implementation.
152 virtual void OnMenuButtonClicked(views::View* source,
153 const gfx::Point& point) OVERRIDE;
155 protected:
156 // Exposed for testing.
157 views::View* GetLoadingShieldForTesting();
158 views::WebView* GetSignInWebViewForTesting();
159 views::View* GetNotificationAreaForTesting();
160 views::View* GetScrollableAreaForTesting();
162 private:
163 friend class AutofillDialogViewTesterViews;
165 // What the entire dialog should be doing (e.g. gathering info from the user,
166 // asking the user to sign in, etc.).
167 enum DialogMode {
168 DETAIL_INPUT,
169 LOADING,
170 SIGN_IN,
173 // A View which displays the currently selected account and lets the user
174 // switch accounts.
175 class AccountChooser : public views::View,
176 public views::LinkListener,
177 public views::MenuButtonListener,
178 public base::SupportsWeakPtr<AccountChooser> {
179 public:
180 explicit AccountChooser(AutofillDialogViewDelegate* delegate);
181 virtual ~AccountChooser();
183 // Updates the view based on the state that |delegate_| reports.
184 void Update();
186 // views::LinkListener implementation.
187 virtual void LinkClicked(views::Link* source, int event_flags) OVERRIDE;
189 // views::MenuButtonListener implementation.
190 virtual void OnMenuButtonClicked(views::View* source,
191 const gfx::Point& point) OVERRIDE;
193 private:
194 // The icon for the currently in-use account.
195 views::ImageView* image_;
197 // The button for showing a menu to change the currently in-use account.
198 views::MenuButton* menu_button_;
200 // The sign in link.
201 views::Link* link_;
203 // The delegate |this| queries for logic and state.
204 AutofillDialogViewDelegate* delegate_;
206 // Runs the suggestion menu (triggered by each section's |suggested_button|.
207 scoped_ptr<views::MenuRunner> menu_runner_;
209 DISALLOW_COPY_AND_ASSIGN(AccountChooser);
212 // A view which displays an image, optionally some messages and a button. Used
213 // for the Wallet interstitial.
214 class OverlayView : public views::View {
215 public:
216 explicit OverlayView(AutofillDialogViewDelegate* delegate);
217 virtual ~OverlayView();
219 // Returns a height which should be used when the contents view has width
220 // |w|. Note that the value returned should be used as the height of the
221 // dialog's contents.
222 int GetHeightForContentsForWidth(int width);
224 // Sets the state to whatever |delegate_| says it should be.
225 void UpdateState();
227 // views::View implementation:
228 virtual gfx::Insets GetInsets() const OVERRIDE;
229 virtual void Layout() OVERRIDE;
230 virtual const char* GetClassName() const OVERRIDE;
231 virtual void OnPaint(gfx::Canvas* canvas) OVERRIDE;
232 virtual void OnNativeThemeChanged(const ui::NativeTheme* theme) OVERRIDE;
234 private:
235 // Gets the border of the non-client frame view as a BubbleBorder.
236 views::BubbleBorder* GetBubbleBorder();
238 // Gets the bounds of this view without the frame view's bubble border.
239 gfx::Rect ContentBoundsSansBubbleBorder();
241 // The delegate that provides |state| when UpdateState is called.
242 AutofillDialogViewDelegate* delegate_;
244 // Child View. Front and center.
245 views::ImageView* image_view_;
246 // Child View. When visible, below |image_view_|.
247 views::Label* message_view_;
249 DISALLOW_COPY_AND_ASSIGN(OverlayView);
252 // An area for notifications. Some notifications point at the account chooser.
253 class NotificationArea : public views::View {
254 public:
255 explicit NotificationArea(AutofillDialogViewDelegate* delegate);
256 virtual ~NotificationArea();
258 // Displays the given notifications.
259 void SetNotifications(const std::vector<DialogNotification>& notifications);
261 // views::View implementation.
262 virtual gfx::Size GetPreferredSize() OVERRIDE;
263 virtual const char* GetClassName() const OVERRIDE;
264 virtual void PaintChildren(gfx::Canvas* canvas) OVERRIDE;
265 virtual void OnPaint(gfx::Canvas* canvas) OVERRIDE;
267 void set_arrow_centering_anchor(
268 const base::WeakPtr<views::View>& arrow_centering_anchor) {
269 arrow_centering_anchor_ = arrow_centering_anchor;
272 private:
273 // Utility function for determining whether an arrow should be drawn
274 // pointing at |arrow_centering_anchor_|.
275 bool HasArrow();
277 // A reference to the delegate/controller than owns this view.
278 // Used to report when checkboxes change their values.
279 AutofillDialogViewDelegate* delegate_; // weak
281 // If HasArrow() is true, the arrow should point at this.
282 base::WeakPtr<views::View> arrow_centering_anchor_;
284 std::vector<DialogNotification> notifications_;
286 DISALLOW_COPY_AND_ASSIGN(NotificationArea);
289 typedef std::map<ServerFieldType, DecoratedTextfield*> TextfieldMap;
290 typedef std::map<ServerFieldType, views::Combobox*> ComboboxMap;
292 // A view that packs a label on the left and some related controls
293 // on the right.
294 class SectionContainer : public views::View {
295 public:
296 SectionContainer(const base::string16& label,
297 views::View* controls,
298 views::Button* proxy_button);
299 virtual ~SectionContainer();
301 // Sets the visual appearance of the section to active (considered active
302 // when showing the menu or hovered by the mouse cursor).
303 void SetActive(bool active);
305 // Sets whether mouse events should be forwarded to |proxy_button_|.
306 void SetForwardMouseEvents(bool forward);
308 // views::View implementation.
309 virtual const char* GetClassName() const OVERRIDE;
310 virtual void OnMouseMoved(const ui::MouseEvent& event) OVERRIDE;
311 virtual void OnMouseEntered(const ui::MouseEvent& event) OVERRIDE;
312 virtual void OnMouseExited(const ui::MouseEvent& event) OVERRIDE;
313 virtual bool OnMousePressed(const ui::MouseEvent& event) OVERRIDE;
314 virtual void OnMouseReleased(const ui::MouseEvent& event) OVERRIDE;
315 virtual void OnGestureEvent(ui::GestureEvent* event) OVERRIDE;
316 // This is needed because not all events percolate up the views hierarchy.
317 virtual View* GetEventHandlerForRect(const gfx::Rect& rect) OVERRIDE;
319 private:
320 // Converts |event| to one suitable for |proxy_button_|.
321 static ui::MouseEvent ProxyEvent(const ui::MouseEvent& event);
323 // Returns true if the given event should be forwarded to |proxy_button_|.
324 bool ShouldForwardEvent(const ui::LocatedEvent& event);
326 // Mouse events on |this| are sent to this button.
327 views::Button* proxy_button_; // Weak reference.
329 // When true, all mouse events will be forwarded to |proxy_button_|.
330 bool forward_mouse_events_;
332 DISALLOW_COPY_AND_ASSIGN(SectionContainer);
335 // A button to show address or billing suggestions.
336 class SuggestedButton : public views::MenuButton {
337 public:
338 explicit SuggestedButton(views::MenuButtonListener* listener);
339 virtual ~SuggestedButton();
341 // views::MenuButton implementation.
342 virtual gfx::Size GetPreferredSize() OVERRIDE;
343 virtual const char* GetClassName() const OVERRIDE;
344 virtual void PaintChildren(gfx::Canvas* canvas) OVERRIDE;
345 virtual void OnPaint(gfx::Canvas* canvas) OVERRIDE;
347 private:
348 // Returns the corred resource ID (i.e. IDR_*) for the current |state()|.
349 int ResourceIDForState() const;
351 DISALLOW_COPY_AND_ASSIGN(SuggestedButton);
354 // A view that runs a callback whenever its bounds change, and which can
355 // optionally suppress layout.
356 class DetailsContainerView : public views::View {
357 public:
358 explicit DetailsContainerView(const base::Closure& callback);
359 virtual ~DetailsContainerView();
361 void set_ignore_layouts(bool ignore_layouts) {
362 ignore_layouts_ = ignore_layouts;
365 // views::View implementation.
366 virtual void OnBoundsChanged(const gfx::Rect& previous_bounds) OVERRIDE;
367 virtual void Layout() OVERRIDE;
369 private:
370 base::Closure bounds_changed_callback_;
372 // The view ignores Layout() calls when this is true.
373 bool ignore_layouts_;
375 DISALLOW_COPY_AND_ASSIGN(DetailsContainerView);
378 // A view that contains a suggestion (such as a known address) and a link to
379 // edit the suggestion.
380 class SuggestionView : public views::View {
381 public:
382 explicit SuggestionView(AutofillDialogViews* autofill_dialog);
383 virtual ~SuggestionView();
385 void SetState(const SuggestionState& state);
387 // views::View implementation.
388 virtual gfx::Size GetPreferredSize() OVERRIDE;
389 virtual int GetHeightForWidth(int width) OVERRIDE;
390 virtual void OnBoundsChanged(const gfx::Rect& previous_bounds) OVERRIDE;
392 DecoratedTextfield* decorated_textfield() { return decorated_; }
394 private:
395 // Returns whether there's room to display |state_.vertically_compact_text|
396 // without resorting to an ellipsis for a pixel width of |available_width|.
397 // Fills in |resulting_height| with the amount of space required to display
398 // |vertically_compact_text| or |horizontally_compact_text| as the case may
399 // be.
400 bool CanUseVerticallyCompactText(int available_width,
401 int* resulting_height);
403 // Sets the display text of the suggestion.
404 void SetLabelText(const base::string16& text);
406 // Sets the icon which should be displayed ahead of the text.
407 void SetIcon(const gfx::Image& image);
409 // Shows an auxiliary textfield to the right of the suggestion icon and
410 // text. This is currently only used to show a CVC field for the CC section.
411 void SetTextfield(const base::string16& placeholder_text,
412 const gfx::Image& icon);
414 // Calls SetLabelText() with the appropriate text based on current bounds.
415 void UpdateLabelText();
417 // The state of |this|.
418 SuggestionState state_;
420 // This caches preferred heights for given widths. The key is a preferred
421 // width, the value is a cached result of CanUseVerticallyCompactText.
422 std::map<int, std::pair<bool, int> > calculated_heights_;
424 // The label that holds the suggestion description text.
425 views::Label* label_;
426 // The second (and greater) line of text that describes the suggestion.
427 views::Label* label_line_2_;
428 // The icon that comes just before |label_|.
429 views::ImageView* icon_;
430 // The input set by ShowTextfield.
431 DecoratedTextfield* decorated_;
432 // An "Edit" link that flips to editable inputs rather than suggestion text.
433 views::Link* edit_link_;
435 DISALLOW_COPY_AND_ASSIGN(SuggestionView);
438 // A convenience struct for holding pointers to views within each detail
439 // section. None of the member pointers are owned.
440 struct DetailsGroup {
441 explicit DetailsGroup(DialogSection section);
442 ~DetailsGroup();
444 // The section this group is associated with.
445 const DialogSection section;
446 // The view that contains the entire section (label + input).
447 SectionContainer* container;
448 // The view that allows manual input.
449 views::View* manual_input;
450 // The textfields in |manual_input|, tracked by their ServerFieldType.
451 TextfieldMap textfields;
452 // The comboboxes in |manual_input|, tracked by their ServerFieldType.
453 ComboboxMap comboboxes;
454 // The view that holds the text of the suggested data. This will be
455 // visible IFF |manual_input| is not visible.
456 SuggestionView* suggested_info;
457 // The view that allows selecting other data suggestions.
458 SuggestedButton* suggested_button;
461 typedef std::map<DialogSection, DetailsGroup> DetailGroupMap;
463 // Returns the preferred size or minimum size (if |get_minimum_size| is true).
464 gfx::Size CalculatePreferredSize(bool get_minimum_size);
466 // Returns the minimum size of the sign in view for this dialog.
467 gfx::Size GetMinimumSignInViewSize() const;
469 // Returns the maximum size of the sign in view for this dialog.
470 gfx::Size GetMaximumSignInViewSize() const;
472 // Returns which section should currently be used for credit card info.
473 DialogSection GetCreditCardSection() const;
475 void InitChildViews();
477 // Creates and returns a view that holds all detail sections.
478 views::View* CreateDetailsContainer();
480 // Creates and returns a view that holds the requesting host and intro text.
481 views::View* CreateNotificationArea();
483 // Creates and returns a view that holds the main controls of this dialog.
484 views::View* CreateMainContainer();
486 // Creates a detail section (Shipping, Email, etc.) with the given label,
487 // inputs View, and suggestion model. Relevant pointers are stored in |group|.
488 void CreateDetailsSection(DialogSection section);
490 // Creates the view that holds controls for inputing or selecting data for
491 // a given section.
492 views::View* CreateInputsContainer(DialogSection section);
494 // Creates a grid of inputs for the given section.
495 void InitInputsView(DialogSection section);
497 // Changes the function of the whole dialog. Currently this can show a loading
498 // shield, an embedded sign in web view, or the more typical detail input mode
499 // (suggestions and form inputs).
500 void ShowDialogInMode(DialogMode dialog_mode);
502 // Updates the given section to match the state provided by |delegate_|. If
503 // |clobber_inputs| is true, the current state of the textfields will be
504 // ignored, otherwise their contents will be preserved.
505 void UpdateSectionImpl(DialogSection section, bool clobber_inputs);
507 // Updates the visual state of the given group as per the model.
508 void UpdateDetailsGroupState(const DetailsGroup& group);
510 // Gets a pointer to the DetailsGroup that's associated with the given section
511 // of the dialog.
512 DetailsGroup* GroupForSection(DialogSection section);
514 // Gets a pointer to the DetailsGroup that's associated with a given |view|.
515 // Returns NULL if no DetailsGroup was found.
516 DetailsGroup* GroupForView(views::View* view);
518 // Erases all views in |group| from |validity_map_|.
519 void EraseInvalidViewsInGroup(const DetailsGroup* group);
521 // Explicitly focuses the initially focusable view.
522 void FocusInitialView();
524 // Sets the visual state for an input to be either valid or invalid. This
525 // should work on Comboboxes or DecoratedTextfields. If |message| is empty,
526 // the input is valid.
527 template<class T>
528 void SetValidityForInput(T* input, const base::string16& message);
530 // Shows an error bubble pointing at |view| if |view| has a message in
531 // |validity_map_|.
532 void ShowErrorBubbleForViewIfNecessary(views::View* view);
534 // Hides |error_bubble_| (if it exists).
535 void HideErrorBubble();
537 // Updates validity of the inputs in |section| with new |validity_messages|.
538 // Fields are only updated with unsure messages if |overwrite_valid| is true.
539 void MarkInputsInvalid(DialogSection section,
540 const ValidityMessages& validity_messages,
541 bool overwrite_invalid);
543 // Checks all manual inputs in |group| for validity. Decorates the invalid
544 // ones and returns true if all were valid.
545 bool ValidateGroup(const DetailsGroup& group, ValidationType type);
547 // Checks all manual inputs in the form for validity. Decorates the invalid
548 // ones and returns true if all were valid.
549 bool ValidateForm();
551 // When an input is edited (its contents change) or activated (clicked while
552 // focused), this function will inform the delegate to take the appropriate
553 // action (textfields may show a suggestion popup, comboboxes may rebuild the
554 // section inputs). May also reset the validity state of the input.
555 void InputEditedOrActivated(ServerFieldType type,
556 const gfx::Rect& bounds,
557 bool was_edit);
559 // Updates the views in the button strip.
560 void UpdateButtonStripExtraView();
562 // Call this when the size of anything in |contents_| might've changed.
563 void ContentsPreferredSizeChanged();
564 void DoContentsPreferredSizeChanged();
566 // Gets the textfield view that is shown for the given |type| or NULL.
567 DecoratedTextfield* TextfieldForType(ServerFieldType type);
569 // Returns the associated ServerFieldType for |textfield|.
570 ServerFieldType TypeForTextfield(const views::Textfield* textfield);
572 // Gets the combobox view that is shown for the given |type|, or NULL.
573 views::Combobox* ComboboxForType(ServerFieldType type);
575 // Returns the associated ServerFieldType for |combobox|.
576 ServerFieldType TypeForCombobox(const views::Combobox* combobox) const;
578 // Called when the details container changes in size or position.
579 void DetailsContainerBoundsChanged();
581 // Sets the icons in |section| according to the field values. For example,
582 // sets the credit card and CVC icons according to the credit card number.
583 void SetIconsForSection(DialogSection section);
585 // Iterates over all the inputs in |section| and sets their enabled/disabled
586 // state.
587 void SetEditabilityForSection(DialogSection section);
589 // The delegate that drives this view. Weak pointer, always non-NULL.
590 AutofillDialogViewDelegate* const delegate_;
592 // The preferred size of the view, cached to avoid needless recomputation.
593 gfx::Size preferred_size_;
595 // The current number of unmatched calls to UpdatesStarted.
596 int updates_scope_;
598 // True when there's been a call to ContentsPreferredSizeChanged() suppressed
599 // due to an unmatched UpdatesStarted.
600 bool needs_update_;
602 // The window that displays |contents_|. Weak pointer; may be NULL when the
603 // dialog is closing.
604 views::Widget* window_;
606 // A DialogSection-keyed map of the DetailGroup structs.
607 DetailGroupMap detail_groups_;
609 // Somewhere to show notification messages about errors, warnings, or promos.
610 NotificationArea* notification_area_;
612 // Runs the suggestion menu (triggered by each section's |suggested_button|.
613 scoped_ptr<views::MenuRunner> menu_runner_;
615 // The view that allows the user to toggle the data source.
616 AccountChooser* account_chooser_;
618 // A WebView to that navigates to a Google sign-in page to allow the user to
619 // sign-in.
620 views::WebView* sign_in_web_view_;
622 // View that wraps |details_container_| and makes it scroll vertically.
623 views::ScrollView* scrollable_area_;
625 // View to host details sections.
626 DetailsContainerView* details_container_;
628 // A view that overlays |this| (for "loading..." messages).
629 views::View* loading_shield_;
631 // The height for |loading_shield_|. This prevents the height of the dialog
632 // from changing while the loading shield is showing.
633 int loading_shield_height_;
635 // The view that completely overlays the dialog (used for the splash page).
636 OverlayView* overlay_view_;
638 // The "Extra view" is on the same row as the dialog buttons.
639 views::View* button_strip_extra_view_;
641 // This checkbox controls whether new details are saved to the Autofill
642 // database. It lives in |extra_view_|.
643 views::Checkbox* save_in_chrome_checkbox_;
645 // Holds the above checkbox and an associated tooltip icon.
646 views::View* save_in_chrome_checkbox_container_;
648 // Used to display an image in the button strip extra view.
649 views::ImageView* button_strip_image_;
651 // View that aren't in the hierarchy but are owned by |this|. Currently
652 // just holds the (hidden) country comboboxes.
653 ScopedVector<views::View> other_owned_views_;
655 // The view that is appended to the bottom of the dialog, below the button
656 // strip. Used to display legal document links.
657 views::View* footnote_view_;
659 // The legal document text and links.
660 views::StyledLabel* legal_document_view_;
662 // The focus manager for |window_|.
663 views::FocusManager* focus_manager_;
665 // The object that manages the error bubble widget.
666 InfoBubble* error_bubble_; // Weak; owns itself.
668 // Map from input view (textfield or combobox) to error string.
669 std::map<views::View*, base::string16> validity_map_;
671 ScopedObserver<views::Widget, AutofillDialogViews> observer_;
673 // Delegate for the sign-in dialog's webview.
674 scoped_ptr<AutofillDialogSignInDelegate> sign_in_delegate_;
676 DISALLOW_COPY_AND_ASSIGN(AutofillDialogViews);
679 } // namespace autofill
681 #endif // CHROME_BROWSER_UI_VIEWS_AUTOFILL_AUTOFILL_DIALOG_VIEWS_H_