Upstream version 10.39.225.0
[platform/framework/web/crosswalk.git] / src / chrome / browser / ui / views / passwords / manage_passwords_bubble_view.h
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
3 // found in the LICENSE file.
4
5 #ifndef CHROME_BROWSER_UI_VIEWS_PASSWORDS_MANAGE_PASSWORDS_BUBBLE_VIEW_H_
6 #define CHROME_BROWSER_UI_VIEWS_PASSWORDS_MANAGE_PASSWORDS_BUBBLE_VIEW_H_
7
8 #include "chrome/browser/ui/passwords/manage_passwords_bubble.h"
9 #include "ui/views/bubble/bubble_delegate.h"
10
11 class ManagePasswordsIconView;
12
13 namespace content {
14 class WebContents;
15 }
16
17 // The ManagePasswordsBubbleView controls the contents of the bubble which
18 // pops up when Chrome offers to save a user's password, or when the user
19 // interacts with the Omnibox icon. It has two distinct states:
20 //
21 // 1. PendingView: Offers the user the possibility of saving credentials.
22 // 2. ManageView: Displays the current page's saved credentials.
23 // 3. BlacklistedView: Informs the user that the current page is blacklisted.
24 //
25 class ManagePasswordsBubbleView : public ManagePasswordsBubble,
26                                   public views::BubbleDelegateView {
27  public:
28   // Shows the bubble.
29   static void ShowBubble(content::WebContents* web_contents,
30                          DisplayReason reason);
31
32   // Closes the existing bubble.
33   static void CloseBubble();
34
35   // Makes the bubble the foreground window.
36   static void ActivateBubble();
37
38   // Whether the bubble is currently showing.
39   static bool IsShowing();
40
41   // Returns a pointer to the bubble.
42   static const ManagePasswordsBubbleView* manage_password_bubble() {
43     return manage_passwords_bubble_;
44   }
45
46   content::WebContents* web_contents() const;
47
48   const View* initially_focused_view() const {
49     return initially_focused_view_;
50   }
51
52  private:
53   class BlacklistedView;
54   class ConfirmNeverView;
55   class ManageView;
56   class PendingView;
57   class SaveConfirmationView;
58
59   ManagePasswordsBubbleView(content::WebContents* web_contents,
60                             ManagePasswordsIconView* anchor_view,
61                             DisplayReason reason);
62   virtual ~ManagePasswordsBubbleView();
63
64   // If the bubble is not anchored to a view, places the bubble in the top
65   // right (left in RTL) of the |screen_bounds| that contain |web_contents_|'s
66   // browser window. Because the positioning is based on the size of the
67   // bubble, this must be called after the bubble is created.
68   void AdjustForFullscreen(const gfx::Rect& screen_bounds);
69
70   // Close the bubble.
71   void Close();
72
73   // Refreshes the bubble's state: called to display a confirmation screen after
74   // a user selects "Never for this site", for instance.
75   void Refresh();
76
77   // Called from PendingView if the user clicks on "Never for this site" in
78   // order to display a confirmation screen.
79   void NotifyNeverForThisSiteClicked();
80
81   // Called from ConfirmNeverView if the user confirms her intention to never
82   // save passwords, and remove existing passwords, for a site.
83   void NotifyConfirmedNeverForThisSite();
84
85   // Called from ConfirmNeverView if the user clicks on "Undo" in order to
86   // undo the action and refresh to PendingView.
87   void NotifyUndoNeverForThisSite();
88
89   // views::BubbleDelegateView:
90   virtual void Init() OVERRIDE;
91   virtual void WindowClosing() OVERRIDE;
92
93   // views::WidgetDelegate
94   virtual views::View* GetInitiallyFocusedView() OVERRIDE;
95
96   void set_initially_focused_view(views::View* view) {
97     DCHECK(!initially_focused_view_);
98     initially_focused_view_ = view;
99   }
100
101   // Singleton instance of the Password bubble. The Password bubble can only be
102   // shown on the active browser window, so there is no case in which it will be
103   // shown twice at the same time. The instance is owned by the Bubble and will
104   // be deleted when the bubble closes.
105   static ManagePasswordsBubbleView* manage_passwords_bubble_;
106
107   ManagePasswordsIconView* anchor_view_;
108
109   // If true upon destruction, the user has confirmed that she never wants to
110   // save passwords for a particular site.
111   bool never_save_passwords_;
112
113   views::View* initially_focused_view_;
114
115   // A helper to intercept mouse click events on the web contents.
116   class WebContentMouseHandler;
117   scoped_ptr<WebContentMouseHandler> mouse_handler_;
118
119   DISALLOW_COPY_AND_ASSIGN(ManagePasswordsBubbleView);
120 };
121
122 #endif  // CHROME_BROWSER_UI_VIEWS_PASSWORDS_MANAGE_PASSWORDS_BUBBLE_VIEW_H_