Home | History | Annotate | Download | only in browser
      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 COMPONENTS_PASSWORD_MANAGER_CORE_BROWSER_PASSWORD_AUTOFILL_MANAGER_H_
      6 #define COMPONENTS_PASSWORD_MANAGER_CORE_BROWSER_PASSWORD_AUTOFILL_MANAGER_H_
      7 
      8 #include <map>
      9 
     10 #include "base/gtest_prod_util.h"
     11 #include "components/autofill/core/browser/autofill_client.h"
     12 #include "components/autofill/core/browser/autofill_popup_delegate.h"
     13 #include "components/autofill/core/common/password_form_fill_data.h"
     14 
     15 namespace gfx {
     16 class RectF;
     17 }
     18 
     19 namespace password_manager {
     20 
     21 class PasswordManagerClient;
     22 
     23 // This class is responsible for filling password forms.
     24 class PasswordAutofillManager : public autofill::AutofillPopupDelegate {
     25  public:
     26   PasswordAutofillManager(PasswordManagerClient* password_manager_client,
     27                           autofill::AutofillClient* autofill_client);
     28   virtual ~PasswordAutofillManager();
     29 
     30   // AutofillPopupDelegate implementation.
     31   virtual void OnPopupShown() OVERRIDE;
     32   virtual void OnPopupHidden() OVERRIDE;
     33   virtual void DidSelectSuggestion(const base::string16& value,
     34                                    int identifier) OVERRIDE;
     35   virtual void DidAcceptSuggestion(const base::string16& value,
     36                                    int identifier) OVERRIDE;
     37   virtual void RemoveSuggestion(const base::string16& value,
     38                                 int identifier) OVERRIDE;
     39   virtual void ClearPreviewedForm() OVERRIDE;
     40 
     41   // Invoked when a password mapping is added.
     42   void OnAddPasswordFormMapping(
     43       const autofill::FormFieldData& field,
     44       const autofill::PasswordFormFillData& fill_data);
     45 
     46   // Handles a request from the renderer to show a popup with the given
     47   // |suggestions| from the password manager.
     48   void OnShowPasswordSuggestions(
     49       const autofill::FormFieldData& field,
     50       const gfx::RectF& bounds,
     51       const std::vector<base::string16>& suggestions,
     52       const std::vector<base::string16>& realms);
     53 
     54   // Invoked to clear any page specific cached values.
     55   void Reset();
     56 
     57   // A public version of FillSuggestion(), only for use in tests.
     58   bool FillSuggestionForTest(const autofill::FormFieldData& field,
     59                              const base::string16& username);
     60 
     61   // A public version of PreviewSuggestion(), only for use in tests.
     62   bool PreviewSuggestionForTest(const autofill::FormFieldData& field,
     63                                 const base::string16& username);
     64 
     65  private:
     66   typedef std::map<autofill::FormFieldData, autofill::PasswordFormFillData>
     67       LoginToPasswordInfoMap;
     68 
     69   // Attempts to fill the password associated with user name |username|, and
     70   // returns true if it was successful.
     71   bool FillSuggestion(const autofill::FormFieldData& field,
     72                       const base::string16& username);
     73 
     74   // Attempts to preview the password associated with user name |username|, and
     75   // returns true if it was successful.
     76   bool PreviewSuggestion(const autofill::FormFieldData& field,
     77                          const base::string16& username);
     78 
     79   // If |current_username| matches a username for one of the login mappings in
     80   // |fill_data|, returns true and assigns the password to |out_password|.
     81   // Otherwise, returns false and leaves |out_password| untouched.
     82   bool GetPasswordForUsername(
     83       const base::string16& current_username,
     84       const autofill::PasswordFormFillData& fill_data,
     85       base::string16* out_password);
     86 
     87   // Finds login information for a |node| that was previously filled.
     88   bool FindLoginInfo(const autofill::FormFieldData& field,
     89                      autofill::PasswordFormFillData* found_password);
     90 
     91   // The logins we have filled so far with their associated info.
     92   LoginToPasswordInfoMap login_to_password_info_;
     93 
     94   // Provides embedder-level operations on passwords. Must outlive |this|.
     95   PasswordManagerClient* const password_manager_client_;  // weak
     96 
     97   autofill::AutofillClient* const autofill_client_;  // weak
     98 
     99   // The form field on which the autofill popup is shown.
    100   autofill::FormFieldData form_field_;
    101 
    102   base::WeakPtrFactory<PasswordAutofillManager> weak_ptr_factory_;
    103 
    104   DISALLOW_COPY_AND_ASSIGN(PasswordAutofillManager);
    105 };
    106 
    107 }  // namespace password_manager
    108 
    109 #endif  // COMPONENTS_PASSWORD_MANAGER_CORE_BROWSER_PASSWORD_AUTOFILL_MANAGER_H_
    110