Index: chrome/browser/ui/views/autofill/autofill_dialog_views.h |
diff --git a/chrome/browser/ui/views/autofill/autofill_dialog_views.h b/chrome/browser/ui/views/autofill/autofill_dialog_views.h |
deleted file mode 100644 |
index cd181c3f93d99c967c0a356b0379b44910a8f90e..0000000000000000000000000000000000000000 |
--- a/chrome/browser/ui/views/autofill/autofill_dialog_views.h |
+++ /dev/null |
@@ -1,546 +0,0 @@ |
-// Copyright (c) 2012 The Chromium Authors. All rights reserved. |
-// Use of this source code is governed by a BSD-style license that can be |
-// found in the LICENSE file. |
- |
-#ifndef CHROME_BROWSER_UI_VIEWS_AUTOFILL_AUTOFILL_DIALOG_VIEWS_H_ |
-#define CHROME_BROWSER_UI_VIEWS_AUTOFILL_AUTOFILL_DIALOG_VIEWS_H_ |
- |
-#include <map> |
-#include <set> |
- |
-#include "base/macros.h" |
-#include "base/memory/scoped_vector.h" |
-#include "base/memory/weak_ptr.h" |
-#include "base/scoped_observer.h" |
-#include "chrome/browser/ui/autofill/autofill_dialog_types.h" |
-#include "chrome/browser/ui/autofill/autofill_dialog_view.h" |
-#include "chrome/browser/ui/autofill/autofill_dialog_view_delegate.h" |
-#include "ui/views/controls/button/button.h" |
-#include "ui/views/controls/button/menu_button.h" |
-#include "ui/views/controls/button/menu_button_listener.h" |
-#include "ui/views/controls/combobox/combobox_listener.h" |
-#include "ui/views/controls/link_listener.h" |
-#include "ui/views/controls/progress_bar.h" |
-#include "ui/views/controls/scroll_view.h" |
-#include "ui/views/controls/styled_label_listener.h" |
-#include "ui/views/controls/textfield/textfield_controller.h" |
-#include "ui/views/focus/focus_manager.h" |
-#include "ui/views/view_targeter_delegate.h" |
-#include "ui/views/widget/widget_observer.h" |
-#include "ui/views/window/dialog_delegate.h" |
- |
-namespace gfx { |
-class Image; |
-} |
- |
-namespace views { |
-class BubbleBorder; |
-class Checkbox; |
-class Combobox; |
-class FocusManager; |
-class ImageView; |
-class Label; |
-class LabelButton; |
-class Link; |
-class MenuRunner; |
-class StyledLabel; |
-class WebView; |
-class Widget; |
-} // namespace views |
- |
-namespace ui { |
-class ComboboxModel; |
-class EventHandler; |
-class KeyEvent; |
-} |
- |
-namespace autofill { |
- |
-class AutofillDialogSignInDelegate; |
-class ExpandingTextfield; |
-class InfoBubble; |
- |
-// Views toolkit implementation of the Autofill dialog that handles the |
-// imperative autocomplete API call. |
-class AutofillDialogViews : public AutofillDialogView, |
- public views::DialogDelegateView, |
- public views::WidgetObserver, |
- public views::TextfieldController, |
- public views::FocusChangeListener, |
- public views::ComboboxListener, |
- public views::MenuButtonListener { |
- public: |
- explicit AutofillDialogViews(AutofillDialogViewDelegate* delegate); |
- ~AutofillDialogViews() override; |
- |
- // AutofillDialogView implementation: |
- void Show() override; |
- void Hide() override; |
- void UpdatesStarted() override; |
- void UpdatesFinished() override; |
- void UpdateButtonStrip() override; |
- void UpdateDetailArea() override; |
- void UpdateForErrors() override; |
- void UpdateNotificationArea() override; |
- void UpdateSection(DialogSection section) override; |
- void UpdateErrorBubble() override; |
- void FillSection(DialogSection section, |
- ServerFieldType originating_type) override; |
- void GetUserInput(DialogSection section, FieldValueMap* output) override; |
- base::string16 GetCvc() override; |
- bool SaveDetailsLocally() override; |
- void ModelChanged() override; |
- void ValidateSection(DialogSection section) override; |
- |
- // views::View implementation. |
- gfx::Size GetPreferredSize() const override; |
- gfx::Size GetMinimumSize() const override; |
- void Layout() override; |
- |
- // views::DialogDelegate implementation: |
- ui::ModalType GetModalType() const override; |
- base::string16 GetWindowTitle() const override; |
- void WindowClosing() override; |
- void DeleteDelegate() override; |
- int GetDialogButtons() const override; |
- int GetDefaultDialogButton() const override; |
- base::string16 GetDialogButtonLabel(ui::DialogButton button) const override; |
- bool ShouldDefaultButtonBeBlue() const override; |
- bool IsDialogButtonEnabled(ui::DialogButton button) const override; |
- views::View* GetInitiallyFocusedView() override; |
- views::View* CreateExtraView() override; |
- bool Cancel() override; |
- bool Accept() override; |
- |
- // views::WidgetObserver implementation: |
- void OnWidgetClosing(views::Widget* widget) override; |
- void OnWidgetDestroying(views::Widget* widget) override; |
- void OnWidgetBoundsChanged(views::Widget* widget, |
- const gfx::Rect& new_bounds) override; |
- |
- // views::TextfieldController implementation: |
- void ContentsChanged(views::Textfield* sender, |
- const base::string16& new_contents) override; |
- bool HandleKeyEvent(views::Textfield* sender, |
- const ui::KeyEvent& key_event) override; |
- bool HandleMouseEvent(views::Textfield* sender, |
- const ui::MouseEvent& key_event) override; |
- |
- // views::FocusChangeListener implementation. |
- void OnWillChangeFocus(views::View* focused_before, |
- views::View* focused_now) override; |
- void OnDidChangeFocus(views::View* focused_before, |
- views::View* focused_now) override; |
- |
- // views::ComboboxListener implementation: |
- void OnPerformAction(views::Combobox* combobox) override; |
- |
- // views::MenuButtonListener implementation. |
- void OnMenuButtonClicked(views::MenuButton* source, |
- const gfx::Point& point, |
- const ui::Event* event) override; |
- |
- protected: |
- // Exposed for testing. |
- views::View* GetNotificationAreaForTesting(); |
- views::View* GetScrollableAreaForTesting(); |
- |
- private: |
- friend class AutofillDialogViewTesterViews; |
- |
- // An area for notifications. Some notifications point at the account chooser. |
- class NotificationArea : public views::View { |
- public: |
- explicit NotificationArea(AutofillDialogViewDelegate* delegate); |
- ~NotificationArea() override; |
- |
- // Displays the given notifications. |
- void SetNotifications(const std::vector<DialogNotification>& notifications); |
- |
- // views::View implementation. |
- gfx::Size GetPreferredSize() const override; |
- const char* GetClassName() const override; |
- void PaintChildren(const ui::PaintContext& context) override; |
- |
- void set_arrow_centering_anchor( |
- const base::WeakPtr<views::View>& arrow_centering_anchor) { |
- arrow_centering_anchor_ = arrow_centering_anchor; |
- } |
- |
- private: |
- // Utility function for determining whether an arrow should be drawn |
- // pointing at |arrow_centering_anchor_|. |
- bool HasArrow(); |
- |
- // A reference to the delegate/controller than owns this view. |
- // Used to report when checkboxes change their values. |
- AutofillDialogViewDelegate* delegate_; // weak |
- |
- // If HasArrow() is true, the arrow should point at this. |
- base::WeakPtr<views::View> arrow_centering_anchor_; |
- |
- std::vector<DialogNotification> notifications_; |
- |
- DISALLOW_COPY_AND_ASSIGN(NotificationArea); |
- }; |
- |
- typedef std::map<ServerFieldType, ExpandingTextfield*> TextfieldMap; |
- typedef std::map<ServerFieldType, views::Combobox*> ComboboxMap; |
- |
- // A view that packs a label on the left and some related controls |
- // on the right. |
- class SectionContainer : public views::View, |
- public views::ViewTargeterDelegate { |
- public: |
- SectionContainer(const base::string16& label, |
- views::View* controls, |
- views::Button* proxy_button); |
- ~SectionContainer() override; |
- |
- // Sets the visual appearance of the section to active (considered active |
- // when showing the menu or hovered by the mouse cursor). |
- void SetActive(bool active); |
- |
- // Sets whether mouse events should be forwarded to |proxy_button_|. |
- void SetForwardMouseEvents(bool forward); |
- |
- // views::View implementation. |
- const char* GetClassName() const override; |
- void OnMouseMoved(const ui::MouseEvent& event) override; |
- void OnMouseEntered(const ui::MouseEvent& event) override; |
- void OnMouseExited(const ui::MouseEvent& event) override; |
- bool OnMousePressed(const ui::MouseEvent& event) override; |
- void OnMouseReleased(const ui::MouseEvent& event) override; |
- void OnGestureEvent(ui::GestureEvent* event) override; |
- |
- private: |
- // views::ViewTargeterDelegate: |
- views::View* TargetForRect(views::View* root, |
- const gfx::Rect& rect) override; |
- |
- // Converts |event| to one suitable for |proxy_button_|. |
- static ui::MouseEvent ProxyEvent(const ui::MouseEvent& event); |
- |
- // Returns true if the given event should be forwarded to |proxy_button_|. |
- bool ShouldForwardEvent(const ui::LocatedEvent& event); |
- |
- // Mouse events on |this| are sent to this button. |
- views::Button* proxy_button_; // Weak reference. |
- |
- // When true, all mouse events will be forwarded to |proxy_button_|. |
- bool forward_mouse_events_; |
- |
- DISALLOW_COPY_AND_ASSIGN(SectionContainer); |
- }; |
- |
- // A button to show address or billing suggestions. |
- class SuggestedButton : public views::MenuButton { |
- public: |
- explicit SuggestedButton(views::MenuButtonListener* listener); |
- ~SuggestedButton() override; |
- |
- // views::MenuButton implementation. |
- gfx::Size GetPreferredSize() const override; |
- const char* GetClassName() const override; |
- void OnPaint(gfx::Canvas* canvas) override; |
- |
- private: |
- // Returns the corred resource ID (i.e. IDR_*) for the current |state()|. |
- int ResourceIDForState() const; |
- |
- DISALLOW_COPY_AND_ASSIGN(SuggestedButton); |
- }; |
- |
- // A view that runs a callback whenever its bounds change, and which can |
- // optionally suppress layout. |
- class DetailsContainerView : public views::View { |
- public: |
- explicit DetailsContainerView(const base::Closure& callback); |
- ~DetailsContainerView() override; |
- |
- void set_ignore_layouts(bool ignore_layouts) { |
- ignore_layouts_ = ignore_layouts; |
- } |
- |
- // views::View implementation. |
- void OnBoundsChanged(const gfx::Rect& previous_bounds) override; |
- void Layout() override; |
- |
- private: |
- base::Closure bounds_changed_callback_; |
- |
- // The view ignores Layout() calls when this is true. |
- bool ignore_layouts_; |
- |
- DISALLOW_COPY_AND_ASSIGN(DetailsContainerView); |
- }; |
- |
- // A view that contains a suggestion (such as a known address). |
- class SuggestionView : public views::View { |
- public: |
- explicit SuggestionView(AutofillDialogViews* autofill_dialog); |
- ~SuggestionView() override; |
- |
- void SetState(const SuggestionState& state); |
- |
- // views::View implementation. |
- gfx::Size GetPreferredSize() const override; |
- int GetHeightForWidth(int width) const override; |
- void OnBoundsChanged(const gfx::Rect& previous_bounds) override; |
- |
- ExpandingTextfield* textfield() { return textfield_; } |
- |
- private: |
- // Returns whether there's room to display |state_.vertically_compact_text| |
- // without resorting to an ellipsis for a pixel width of |available_width|. |
- // Fills in |resulting_height| with the amount of space required to display |
- // |vertically_compact_text| or |horizontally_compact_text| as the case may |
- // be. |
- bool CanUseVerticallyCompactText(int available_width, |
- int* resulting_height) const; |
- |
- // Sets the display text of the suggestion. |
- void SetLabelText(const base::string16& text); |
- |
- // Sets the icon which should be displayed ahead of the text. |
- void SetIcon(const gfx::Image& image); |
- |
- // Shows an auxiliary textfield to the right of the suggestion icon and |
- // text. This is currently only used to show a CVC field for the CC section. |
- void SetTextfield(const base::string16& placeholder_text, |
- const gfx::Image& icon); |
- |
- // Calls SetLabelText() with the appropriate text based on current bounds. |
- void UpdateLabelText(); |
- |
- // The state of |this|. |
- SuggestionState state_; |
- |
- // This caches preferred heights for given widths. The key is a preferred |
- // width, the value is a cached result of CanUseVerticallyCompactText. |
- mutable std::map<int, std::pair<bool, int> > calculated_heights_; |
- |
- // The label that holds the suggestion description text. |
- views::Label* label_; |
- // The second (and greater) line of text that describes the suggestion. |
- views::Label* label_line_2_; |
- // The icon that comes just before |label_|. |
- views::ImageView* icon_; |
- // The input set by ShowTextfield. |
- ExpandingTextfield* textfield_; |
- |
- DISALLOW_COPY_AND_ASSIGN(SuggestionView); |
- }; |
- |
- // A convenience struct for holding pointers to views within each detail |
- // section. None of the member pointers are owned. |
- struct DetailsGroup { |
- explicit DetailsGroup(DialogSection section); |
- DetailsGroup(const DetailsGroup& other); |
- ~DetailsGroup(); |
- |
- // The section this group is associated with. |
- const DialogSection section; |
- // The view that contains the entire section (label + input). |
- SectionContainer* container; |
- // The view that allows manual input. |
- views::View* manual_input; |
- // The textfields in |manual_input|, tracked by their ServerFieldType. |
- TextfieldMap textfields; |
- // The comboboxes in |manual_input|, tracked by their ServerFieldType. |
- ComboboxMap comboboxes; |
- // The view that holds the text of the suggested data. This will be |
- // visible IFF |manual_input| is not visible. |
- SuggestionView* suggested_info; |
- // The view that allows selecting other data suggestions. |
- SuggestedButton* suggested_button; |
- }; |
- |
- typedef std::map<DialogSection, DetailsGroup> DetailGroupMap; |
- |
- // Returns the preferred size or minimum size (if |get_minimum_size| is true). |
- gfx::Size CalculatePreferredSize(bool get_minimum_size) const; |
- |
- // Returns the minimum size of the sign in view for this dialog. |
- gfx::Size GetMinimumSignInViewSize() const; |
- |
- // Returns the maximum size of the sign in view for this dialog. |
- gfx::Size GetMaximumSignInViewSize() const; |
- |
- // Returns which section should currently be used for credit card info. |
- DialogSection GetCreditCardSection() const; |
- |
- void InitChildViews(); |
- |
- // Creates and returns a view that holds all detail sections. |
- views::View* CreateDetailsContainer(); |
- |
- // Creates and returns a view that holds the requesting host and intro text. |
- views::View* CreateNotificationArea(); |
- |
- // Creates and returns a view that holds the main controls of this dialog. |
- views::View* CreateMainContainer(); |
- |
- // Creates a detail section (Shipping, Email, etc.) with the given label, |
- // inputs View, and suggestion model. Relevant pointers are stored in |group|. |
- void CreateDetailsSection(DialogSection section); |
- |
- // Creates the view that holds controls for inputing or selecting data for |
- // a given section. |
- views::View* CreateInputsContainer(DialogSection section); |
- |
- // Creates a grid of inputs for the given section. |
- void InitInputsView(DialogSection section); |
- |
- // Updates the given section to match the state provided by |delegate_|. If |
- // |clobber_inputs| is true, the current state of the textfields will be |
- // ignored, otherwise their contents will be preserved. |
- void UpdateSectionImpl(DialogSection section, bool clobber_inputs); |
- |
- // Updates the visual state of the given group as per the model. |
- void UpdateDetailsGroupState(const DetailsGroup& group); |
- |
- // Gets a pointer to the DetailsGroup that's associated with the given section |
- // of the dialog. |
- DetailsGroup* GroupForSection(DialogSection section); |
- |
- // Gets a pointer to the DetailsGroup that's associated with a given |view|. |
- // Returns NULL if no DetailsGroup was found. |
- DetailsGroup* GroupForView(views::View* view); |
- |
- // Erases all views in |group| from |validity_map_|. |
- void EraseInvalidViewsInGroup(const DetailsGroup* group); |
- |
- // Explicitly focuses the initially focusable view. |
- void FocusInitialView(); |
- |
- // Sets the visual state for an input to be either valid or invalid. This |
- // should work on Comboboxes or ExpandingTextfields. If |message| is empty, |
- // the input is valid. |
- template<class T> |
- void SetValidityForInput(T* input, const base::string16& message); |
- |
- // Shows an error bubble pointing at |view| if |view| has a message in |
- // |validity_map_|. |
- void ShowErrorBubbleForViewIfNecessary(views::View* view); |
- |
- // Hides |error_bubble_| (if it exists). |
- void HideErrorBubble(); |
- |
- // Updates validity of the inputs in |section| with new |validity_messages|. |
- // Fields are only updated with unsure messages if |overwrite_valid| is true. |
- void MarkInputsInvalid(DialogSection section, |
- const ValidityMessages& validity_messages, |
- bool overwrite_invalid); |
- |
- // Checks all manual inputs in |group| for validity. Decorates the invalid |
- // ones and returns true if all were valid. |
- bool ValidateGroup(const DetailsGroup& group, ValidationType type); |
- |
- // Checks all manual inputs in the form for validity. Decorates the invalid |
- // ones and returns true if all were valid. |
- bool ValidateForm(); |
- |
- // When an input is edited (its contents change) or activated (clicked while |
- // focused), this function will inform the delegate to take the appropriate |
- // action (textfields may show a suggestion popup, comboboxes may rebuild the |
- // section inputs). May also reset the validity state of the input. |
- void InputEditedOrActivated(ServerFieldType type, |
- const gfx::Rect& bounds, |
- bool was_edit); |
- |
- // Updates the views in the button strip. |
- void UpdateButtonStripExtraView(); |
- |
- // Call this when the size of anything in the contents might have changed. |
- void ContentsPreferredSizeChanged(); |
- void DoContentsPreferredSizeChanged(); |
- |
- // Gets the textfield view that is shown for the given |type| or NULL. |
- ExpandingTextfield* TextfieldForType(ServerFieldType type); |
- |
- // Returns the associated ServerFieldType for |textfield|. |
- ServerFieldType TypeForTextfield(const views::View* textfield); |
- |
- // Gets the combobox view that is shown for the given |type|, or NULL. |
- views::Combobox* ComboboxForType(ServerFieldType type); |
- |
- // Returns the associated ServerFieldType for |combobox|. |
- ServerFieldType TypeForCombobox(const views::Combobox* combobox) const; |
- |
- // Called when the details container changes in size or position. |
- void DetailsContainerBoundsChanged(); |
- |
- // Sets the icons in |section| according to the field values. For example, |
- // sets the credit card and CVC icons according to the credit card number. |
- void SetIconsForSection(DialogSection section); |
- |
- // Handles mouse presses on the non-client view. |
- void NonClientMousePressed(); |
- |
- // The delegate that drives this view. Weak pointer, always non-NULL. |
- AutofillDialogViewDelegate* const delegate_; |
- |
- // The preferred size of the view, cached to avoid needless recomputation. |
- mutable gfx::Size preferred_size_; |
- |
- // The current number of unmatched calls to UpdatesStarted. |
- int updates_scope_; |
- |
- // True when there's been a call to ContentsPreferredSizeChanged() suppressed |
- // due to an unmatched UpdatesStarted. |
- bool needs_update_; |
- |
- // The window that displays the dialog contents. Weak pointer; may be NULL |
- // when the dialog is closing. |
- views::Widget* window_; |
- |
- // A DialogSection-keyed map of the DetailGroup structs. |
- DetailGroupMap detail_groups_; |
- |
- // Somewhere to show notification messages about errors, warnings, or promos. |
- NotificationArea* notification_area_; |
- |
- // Runs the suggestion menu (triggered by each section's |suggested_button|). |
- std::unique_ptr<views::MenuRunner> menu_runner_; |
- |
- // View that wraps |details_container_| and makes it scroll vertically. |
- views::ScrollView* scrollable_area_; |
- |
- // View to host details sections. |
- DetailsContainerView* details_container_; |
- |
- // The "Extra view" is on the same row as the dialog buttons. |
- views::View* button_strip_extra_view_; |
- |
- // This checkbox controls whether new details are saved to the Autofill |
- // database. It lives in |extra_view_|. |
- views::Checkbox* save_in_chrome_checkbox_; |
- |
- // Holds the above checkbox and an associated tooltip icon. |
- views::View* save_in_chrome_checkbox_container_; |
- |
- // View that aren't in the hierarchy but are owned by |this|. Currently |
- // just holds the (hidden) country comboboxes. |
- ScopedVector<views::View> other_owned_views_; |
- |
- // The focus manager for |window_|. |
- views::FocusManager* focus_manager_; |
- |
- // The object that manages the error bubble widget. |
- InfoBubble* error_bubble_; // Weak; owns itself. |
- |
- // Map from input view (textfield or combobox) to error string. |
- std::map<views::View*, base::string16> validity_map_; |
- |
- ScopedObserver<views::Widget, AutofillDialogViews> observer_; |
- |
- // Used to tell the delegate when focus moves to hide the Autofill popup. |
- std::unique_ptr<ui::EventHandler> event_handler_; |
- |
- DISALLOW_COPY_AND_ASSIGN(AutofillDialogViews); |
-}; |
- |
-} // namespace autofill |
- |
-#endif // CHROME_BROWSER_UI_VIEWS_AUTOFILL_AUTOFILL_DIALOG_VIEWS_H_ |