Home | History | Annotate | Download | only in views
      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.
      4 
      5 #ifndef CHROME_BROWSER_UI_VIEWS_PASSWORD_GENERATION_BUBBLE_VIEW_H_
      6 #define CHROME_BROWSER_UI_VIEWS_PASSWORD_GENERATION_BUBBLE_VIEW_H_
      7 
      8 #include "base/basictypes.h"
      9 #include "components/autofill/core/common/password_form.h"
     10 #include "components/autofill/core/common/password_generation_util.h"
     11 #include "ui/gfx/rect.h"
     12 #include "ui/views/bubble/bubble_delegate.h"
     13 #include "ui/views/controls/button/button.h"
     14 #include "ui/views/controls/textfield/textfield_controller.h"
     15 #include "ui/views/view.h"
     16 
     17 namespace autofill {
     18 class PasswordGenerator;
     19 }
     20 
     21 namespace content {
     22 class RenderViewHost;
     23 }
     24 
     25 namespace views {
     26 class ImageButton;
     27 class Label;
     28 class LabelButton;
     29 }
     30 
     31 namespace password_manager {
     32 class PasswordManager;
     33 }
     34 
     35 // PasswordGenerationBubbleView is a bubble used to show possible generated
     36 // passwords to users. It is set in the page content, anchored at |anchor_rect|.
     37 // If the generated password is accepted by the user, the renderer associated
     38 // with |render_view_host| and the |password_manager| are informed.
     39 class PasswordGenerationBubbleView : public views::BubbleDelegateView,
     40                                      public views::ButtonListener,
     41                                      public views::TextfieldController {
     42  public:
     43   PasswordGenerationBubbleView(
     44       const autofill::PasswordForm& form,
     45       const gfx::Rect& anchor_rect,
     46       views::View* anchor_view,
     47       content::RenderViewHost* render_view_host,
     48       password_manager::PasswordManager* password_manager,
     49       autofill::PasswordGenerator* password_generator,
     50       ui::ThemeProvider* theme_provider);
     51   virtual ~PasswordGenerationBubbleView();
     52 
     53   // views::View
     54   virtual gfx::Size GetPreferredSize() const OVERRIDE;
     55   virtual void Layout() OVERRIDE;
     56 
     57  private:
     58   // views::BubbleDelegateView
     59   virtual void Init() OVERRIDE;
     60   virtual gfx::Rect GetAnchorRect() const OVERRIDE;
     61   virtual void WindowClosing() OVERRIDE;
     62 
     63   // views::ButtonListener
     64   virtual void ButtonPressed(views::Button* sender,
     65                              const ui::Event& event) OVERRIDE;
     66 
     67   // views::TextfieldController
     68   virtual void ContentsChanged(views::Textfield* sender,
     69                                const base::string16& new_contents) OVERRIDE;
     70   virtual bool HandleKeyEvent(views::Textfield* sender,
     71                               const ui::KeyEvent& key_event) OVERRIDE;
     72 
     73   // views::WidgetDelegate
     74   virtual views::View* GetInitiallyFocusedView() OVERRIDE;
     75 
     76   // Subviews
     77   views::Label* title_label_;
     78   views::LabelButton* accept_button_;
     79   views::Textfield* textfield_;
     80   views::ImageButton* regenerate_button_;
     81   views::View* textfield_wrapper_;
     82 
     83   // The form associated with the password field(s) that we are generated.
     84   autofill::PasswordForm form_;
     85 
     86   // Location that the bubble points to
     87   gfx::Rect anchor_rect_;
     88 
     89   // RenderViewHost associated with the button that spawned this bubble.
     90   content::RenderViewHost* render_view_host_;
     91 
     92   // PasswordManager associated with this tab.
     93   password_manager::PasswordManager* password_manager_;
     94 
     95   // Object to generate passwords. The class won't take the ownership of it.
     96   autofill::PasswordGenerator* password_generator_;
     97 
     98   // Theme provider used to draw the regenerate button.
     99   ui::ThemeProvider* theme_provider_;
    100 
    101   // Store stats on the users actions for logging.
    102   autofill::password_generation::PasswordGenerationActions actions_;
    103 
    104   DISALLOW_COPY_AND_ASSIGN(PasswordGenerationBubbleView);
    105 };
    106 
    107 #endif  // CHROME_BROWSER_UI_VIEWS_PASSWORD_GENERATION_BUBBLE_VIEW_H_
    108