Index: chrome/browser/ui/views/passwords/manage_passwords_bubble_view.h |
diff --git a/chrome/browser/ui/views/passwords/manage_passwords_bubble_view.h b/chrome/browser/ui/views/passwords/manage_passwords_bubble_view.h |
index 07609c24adac1c7601a232a69e2c10629fe9a2eb..589d7109f579a79e345b1560e022d91a9ca70195 100644 |
--- a/chrome/browser/ui/views/passwords/manage_passwords_bubble_view.h |
+++ b/chrome/browser/ui/views/passwords/manage_passwords_bubble_view.h |
@@ -27,12 +27,72 @@ class LabelButton; |
class GridLayout; |
} |
+// The ManagePasswordsBubbleView controls the contents of the bubble which |
+// pops up when Chrome offers to save a user's password, or when the user |
+// interacts with the Omnibox icon. It has two distinct states: |
+// |
+// 1. PendingView: Offers the user the possibility of saving credentials. |
+// 2. ManageView: Displays the current page's saved credentials. |
+// |
+// TODO(mkwst): Add a third state: "Informing the user that the current page |
+// is blacklisted." |
class ManagePasswordsBubbleView : public ManagePasswordsBubble, |
- public views::BubbleDelegateView, |
- public views::ButtonListener, |
- public views::ComboboxListener, |
- public views::LinkListener { |
+ public views::BubbleDelegateView { |
public: |
+ // A view offering the user the ability to save credentials. Contains a |
+ // single ManagePasswordItemView, along with a "Save Passwords" button |
+ // and a rejection combobox. |
+ class PendingView : public views::View, |
+ public views::ButtonListener, |
+ public views::ComboboxListener { |
+ public: |
+ explicit PendingView(ManagePasswordsBubbleView* parent); |
+ virtual ~PendingView(); |
+ |
+ private: |
+ // views::ButtonListener: |
+ virtual void ButtonPressed(views::Button* sender, |
+ const ui::Event& event) OVERRIDE; |
+ |
+ // Handles the event when the user changes an index of a combobox. |
+ virtual void OnPerformAction(views::Combobox* source) OVERRIDE; |
+ |
+ ManagePasswordsBubbleView* parent_; |
+ |
+ views::BlueButton* save_button_; |
+ |
+ // The combobox doesn't take ownership of its model. If we created a |
+ // combobox we need to ensure that we delete the model here, and because the |
+ // combobox uses the model in it's destructor, we need to make sure we |
+ // delete the model _after_ the combobox itself is deleted. |
+ scoped_ptr<SavePasswordRefusalComboboxModel> combobox_model_; |
+ scoped_ptr<views::Combobox> refuse_combobox_; |
+ }; |
+ |
+ // A view offering the user a list of her currently saved credentials |
+ // for the current page, along with a "Manage passwords" link and a |
+ // "Done" button. |
+ class ManageView : public views::View, |
+ public views::ButtonListener, |
+ public views::LinkListener { |
+ public: |
+ explicit ManageView(ManagePasswordsBubbleView* parent); |
+ virtual ~ManageView(); |
+ |
+ private: |
+ // views::ButtonListener: |
+ virtual void ButtonPressed(views::Button* sender, |
+ const ui::Event& event) OVERRIDE; |
+ |
+ // views::LinkListener: |
+ virtual void LinkClicked(views::Link* source, int event_flags) OVERRIDE; |
+ |
+ ManagePasswordsBubbleView* parent_; |
+ |
+ views::Link* manage_link_; |
+ views::LabelButton* done_button_; |
+ }; |
+ |
// Shows the bubble. |
static void ShowBubble(content::WebContents* web_contents, |
DisplayReason reason); |
@@ -44,32 +104,11 @@ class ManagePasswordsBubbleView : public ManagePasswordsBubble, |
static bool IsShowing(); |
private: |
- enum ColumnSetType { |
- // | | (FILL, FILL) | | |
- // Used for the bubble's header, the credentials list, and for simple |
- // messages like "No passwords". |
- SINGLE_VIEW_COLUMN_SET = 0, |
- |
- // | | (TRAILING, CENTER) | | (TRAILING, CENTER) | | |
- // Used for buttons at the bottom of the bubble which should nest at the |
- // bottom-right corner. |
- DOUBLE_BUTTON_COLUMN_SET = 1, |
- |
- // | | (LEADING, CENTER) | | (TRAILING, CENTER) | | |
- // Used for buttons at the bottom of the bubble which should occupy |
- // the corners. |
- LINK_BUTTON_COLUMN_SET = 2, |
- }; |
- |
ManagePasswordsBubbleView(content::WebContents* web_contents, |
views::View* anchor_view, |
DisplayReason reason); |
virtual ~ManagePasswordsBubbleView(); |
- // Construct an appropriate ColumnSet for the given |type|, and add it |
- // to |layout|. |
- void BuildColumnSet(views::GridLayout* layout, ColumnSetType type); |
- |
// If the bubble is not anchored to a view, places the bubble in the top |
// right (left in RTL) of the |screen_bounds| that contain |web_contents_|'s |
// browser window. Because the positioning is based on the size of the |
@@ -92,33 +131,11 @@ class ManagePasswordsBubbleView : public ManagePasswordsBubble, |
virtual void Init() OVERRIDE; |
virtual void WindowClosing() OVERRIDE; |
- // views::ButtonListener: |
- virtual void ButtonPressed(views::Button* sender, |
- const ui::Event& event) OVERRIDE; |
- |
- // views::LinkListener: |
- virtual void LinkClicked(views::Link* source, int event_flags) OVERRIDE; |
- |
- // Handles the event when the user changes an index of a combobox. |
- virtual void OnPerformAction(views::Combobox* source) OVERRIDE; |
- |
// Singleton instance of the Password bubble. The Password bubble can only be |
// shown on the active browser window, so there is no case in which it will be |
// shown twice at the same time. |
static ManagePasswordsBubbleView* manage_passwords_bubble_; |
- // The views that are shown in the bubble. |
- views::BlueButton* save_button_; |
- views::Link* manage_link_; |
- views::LabelButton* done_button_; |
- |
- // The combobox doesn't take ownership of it's model. If we created a combobox |
- // we need to ensure that we delete the model here, and because the combobox |
- // uses the model in it's destructor, we need to make sure we delete the model |
- // _after_ the combobox itself is deleted. |
- scoped_ptr<SavePasswordRefusalComboboxModel> combobox_model_; |
- scoped_ptr<views::Combobox> refuse_combobox_; |
- |
DISALLOW_COPY_AND_ASSIGN(ManagePasswordsBubbleView); |
}; |