| OLD | NEW |
| 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 #ifndef CHROME_BROWSER_UI_VIEWS_PASSWORDS_MANAGE_PASSWORDS_BUBBLE_VIEW_H_ | 5 #ifndef CHROME_BROWSER_UI_VIEWS_PASSWORDS_MANAGE_PASSWORDS_BUBBLE_VIEW_H_ |
| 6 #define CHROME_BROWSER_UI_VIEWS_PASSWORDS_MANAGE_PASSWORDS_BUBBLE_VIEW_H_ | 6 #define CHROME_BROWSER_UI_VIEWS_PASSWORDS_MANAGE_PASSWORDS_BUBBLE_VIEW_H_ |
| 7 | 7 |
| 8 #include "base/basictypes.h" | 8 #include "base/basictypes.h" |
| 9 #include "chrome/browser/ui/passwords/manage_passwords_bubble.h" | 9 #include "chrome/browser/ui/passwords/manage_passwords_bubble.h" |
| 10 #include "ui/views/bubble/bubble_delegate.h" | 10 #include "ui/views/bubble/bubble_delegate.h" |
| 11 #include "ui/views/controls/button/button.h" | 11 #include "ui/views/controls/button/button.h" |
| 12 #include "ui/views/controls/combobox/combobox.h" | 12 #include "ui/views/controls/combobox/combobox.h" |
| 13 #include "ui/views/controls/combobox/combobox_listener.h" | 13 #include "ui/views/controls/combobox/combobox_listener.h" |
| 14 #include "ui/views/controls/link.h" | 14 #include "ui/views/controls/link.h" |
| 15 #include "ui/views/controls/link_listener.h" | 15 #include "ui/views/controls/link_listener.h" |
| 16 | 16 |
| 17 class ManagePasswordsIconView; | 17 class ManagePasswordsIconView; |
| 18 | 18 |
| 19 namespace content { | 19 namespace content { |
| 20 class WebContents; | 20 class WebContents; |
| 21 } | 21 } |
| 22 | 22 |
| 23 namespace views { | 23 namespace views { |
| 24 class BlueButton; | 24 class BlueButton; |
| 25 class LabelButton; | 25 class LabelButton; |
| 26 class GridLayout; | 26 class GridLayout; |
| 27 } | 27 } |
| 28 | 28 |
| 29 // The ManagePasswordsBubbleView controls the contents of the bubble which |
| 30 // pops up when Chrome offers to save a user's password, or when the user |
| 31 // interacts with the Omnibox icon. It has two distinct states: |
| 32 // |
| 33 // 1. PendingView: Offers the user the possibility of saving credentials. |
| 34 // 2. ManageView: Displays the current page's saved credentials. |
| 35 // |
| 36 // TODO(mkwst): Add a third state: "Informing the user that the current page |
| 37 // is blacklisted." |
| 29 class ManagePasswordsBubbleView : public ManagePasswordsBubble, | 38 class ManagePasswordsBubbleView : public ManagePasswordsBubble, |
| 30 public views::BubbleDelegateView, | 39 public views::BubbleDelegateView { |
| 31 public views::ButtonListener, | |
| 32 public views::ComboboxListener, | |
| 33 public views::LinkListener { | |
| 34 public: | 40 public: |
| 41 // A view offering the user the ability to save credentials. Contains a |
| 42 // single ManagePasswordItemView, along with a "Save Passwords" button |
| 43 // and a rejection combobox. |
| 44 class PendingView : public views::View, |
| 45 public views::ButtonListener, |
| 46 public views::ComboboxListener { |
| 47 public: |
| 48 explicit PendingView(ManagePasswordsBubbleView* parent); |
| 49 virtual ~PendingView(); |
| 50 |
| 51 private: |
| 52 // views::ButtonListener: |
| 53 virtual void ButtonPressed(views::Button* sender, |
| 54 const ui::Event& event) OVERRIDE; |
| 55 |
| 56 // Handles the event when the user changes an index of a combobox. |
| 57 virtual void OnPerformAction(views::Combobox* source) OVERRIDE; |
| 58 |
| 59 ManagePasswordsBubbleView* parent_; |
| 60 |
| 61 views::BlueButton* save_button_; |
| 62 views::Combobox* refuse_combobox_; |
| 63 }; |
| 64 |
| 65 // A view offering the user a list of her currently saved credentials |
| 66 // for the current page, along with a "Manage passwords" link and a |
| 67 // "Done" button. |
| 68 class ManageView : public views::View, |
| 69 public views::ButtonListener, |
| 70 public views::LinkListener { |
| 71 public: |
| 72 explicit ManageView(ManagePasswordsBubbleView* parent); |
| 73 virtual ~ManageView(); |
| 74 |
| 75 private: |
| 76 // views::ButtonListener: |
| 77 virtual void ButtonPressed(views::Button* sender, |
| 78 const ui::Event& event) OVERRIDE; |
| 79 |
| 80 // views::LinkListener: |
| 81 virtual void LinkClicked(views::Link* source, int event_flags) OVERRIDE; |
| 82 |
| 83 ManagePasswordsBubbleView* parent_; |
| 84 |
| 85 views::Link* manage_link_; |
| 86 views::LabelButton* done_button_; |
| 87 }; |
| 88 |
| 35 // Shows the bubble. | 89 // Shows the bubble. |
| 36 static void ShowBubble(content::WebContents* web_contents, | 90 static void ShowBubble(content::WebContents* web_contents, |
| 37 DisplayReason reason); | 91 DisplayReason reason); |
| 38 | 92 |
| 39 // Closes any existing bubble. | 93 // Closes any existing bubble. |
| 40 static void CloseBubble(); | 94 static void CloseBubble(); |
| 41 | 95 |
| 42 // Whether the bubble is currently showing. | 96 // Whether the bubble is currently showing. |
| 43 static bool IsShowing(); | 97 static bool IsShowing(); |
| 44 | 98 |
| (...skipping 17 matching lines...) Expand all Loading... |
| 62 | 116 |
| 63 ManagePasswordsBubbleView(content::WebContents* web_contents, | 117 ManagePasswordsBubbleView(content::WebContents* web_contents, |
| 64 views::View* anchor_view, | 118 views::View* anchor_view, |
| 65 DisplayReason reason); | 119 DisplayReason reason); |
| 66 virtual ~ManagePasswordsBubbleView(); | 120 virtual ~ManagePasswordsBubbleView(); |
| 67 | 121 |
| 68 // Construct an appropriate ColumnSet for the given |type|, and add it | 122 // Construct an appropriate ColumnSet for the given |type|, and add it |
| 69 // to |layout|. | 123 // to |layout|. |
| 70 void BuildColumnSet(views::GridLayout* layout, ColumnSetType type); | 124 void BuildColumnSet(views::GridLayout* layout, ColumnSetType type); |
| 71 | 125 |
| 126 // Given a layout, add an appropriate title using a SINGLE_VIEW_COLUMN_SET, |
| 127 // followed by a spacer row. |
| 128 void AddTitleRow(views::GridLayout* layout) const; |
| 129 |
| 72 // If the bubble is not anchored to a view, places the bubble in the top | 130 // If the bubble is not anchored to a view, places the bubble in the top |
| 73 // right (left in RTL) of the |screen_bounds| that contain |web_contents_|'s | 131 // right (left in RTL) of the |screen_bounds| that contain |web_contents_|'s |
| 74 // browser window. Because the positioning is based on the size of the | 132 // browser window. Because the positioning is based on the size of the |
| 75 // bubble, this must be called after the bubble is created. | 133 // bubble, this must be called after the bubble is created. |
| 76 void AdjustForFullscreen(const gfx::Rect& screen_bounds); | 134 void AdjustForFullscreen(const gfx::Rect& screen_bounds); |
| 77 | 135 |
| 78 // Close the bubble. | 136 // Close the bubble. |
| 79 void Close(); | 137 void Close(); |
| 80 | 138 |
| 81 // Close the bubble without triggering UMA logging. We need this for the | 139 // Close the bubble without triggering UMA logging. We need this for the |
| 82 // moment, as the current implementation can close the bubble without user | 140 // moment, as the current implementation can close the bubble without user |
| 83 // interaction; we want to ensure that doesn't show up as a user action in | 141 // interaction; we want to ensure that doesn't show up as a user action in |
| 84 // our counts. | 142 // our counts. |
| 85 // | 143 // |
| 86 // TODO(mkwst): Throw this away once the icon is no longer responsible for | 144 // TODO(mkwst): Throw this away once the icon is no longer responsible for |
| 87 // creating the bubble. | 145 // creating the bubble. |
| 88 void CloseWithoutLogging(); | 146 void CloseWithoutLogging(); |
| 89 | 147 |
| 90 // views::BubbleDelegateView: | 148 // views::BubbleDelegateView: |
| 91 virtual void Init() OVERRIDE; | 149 virtual void Init() OVERRIDE; |
| 92 virtual void WindowClosing() OVERRIDE; | 150 virtual void WindowClosing() OVERRIDE; |
| 93 | 151 |
| 94 // views::ButtonListener: | |
| 95 virtual void ButtonPressed(views::Button* sender, | |
| 96 const ui::Event& event) OVERRIDE; | |
| 97 | |
| 98 // views::LinkListener: | |
| 99 virtual void LinkClicked(views::Link* source, int event_flags) OVERRIDE; | |
| 100 | |
| 101 // Handles the event when the user changes an index of a combobox. | |
| 102 virtual void OnPerformAction(views::Combobox* source) OVERRIDE; | |
| 103 | |
| 104 // Singleton instance of the Password bubble. The Password bubble can only be | 152 // Singleton instance of the Password bubble. The Password bubble can only be |
| 105 // shown on the active browser window, so there is no case in which it will be | 153 // shown on the active browser window, so there is no case in which it will be |
| 106 // shown twice at the same time. | 154 // shown twice at the same time. |
| 107 static ManagePasswordsBubbleView* manage_passwords_bubble_; | 155 static ManagePasswordsBubbleView* manage_passwords_bubble_; |
| 108 | 156 |
| 109 // The buttons that are shown in the bubble. | |
| 110 views::BlueButton* save_button_; | |
| 111 views::Combobox* refuse_combobox_; | |
| 112 | |
| 113 views::Link* manage_link_; | |
| 114 views::LabelButton* done_button_; | |
| 115 | |
| 116 DISALLOW_COPY_AND_ASSIGN(ManagePasswordsBubbleView); | 157 DISALLOW_COPY_AND_ASSIGN(ManagePasswordsBubbleView); |
| 117 }; | 158 }; |
| 118 | 159 |
| 119 #endif // CHROME_BROWSER_UI_VIEWS_PASSWORDS_MANAGE_PASSWORDS_BUBBLE_VIEW_H_ | 160 #endif // CHROME_BROWSER_UI_VIEWS_PASSWORDS_MANAGE_PASSWORDS_BUBBLE_VIEW_H_ |
| OLD | NEW |