Home | History | Annotate | Download | only in options
      1 // Copyright (c) 2011 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_WEBUI_OPTIONS_PASSWORD_MANAGER_HANDLER_H_
      6 #define CHROME_BROWSER_UI_WEBUI_OPTIONS_PASSWORD_MANAGER_HANDLER_H_
      7 
      8 #include <string>
      9 #include <vector>
     10 
     11 #include "base/memory/scoped_vector.h"
     12 #include "chrome/browser/password_manager/password_store.h"
     13 #include "chrome/browser/password_manager/password_store_consumer.h"
     14 #include "chrome/browser/prefs/pref_member.h"
     15 #include "chrome/browser/ui/webui/options/options_ui.h"
     16 
     17 class PasswordManagerHandler : public OptionsPageUIHandler,
     18                                public PasswordStore::Observer {
     19  public:
     20   PasswordManagerHandler();
     21   virtual ~PasswordManagerHandler();
     22 
     23   // OptionsPageUIHandler implementation.
     24   virtual void GetLocalizedValues(DictionaryValue* localized_strings);
     25   virtual void Initialize();
     26   virtual void RegisterMessages();
     27 
     28   // PasswordStore::Observer implementation.
     29   virtual void OnLoginsChanged();
     30 
     31   // NotificationObserver implementation.
     32   virtual void Observe(NotificationType type,
     33                        const NotificationSource& source,
     34                        const NotificationDetails& details);
     35 
     36  private:
     37   // The password store associated with the currently active profile.
     38   PasswordStore* GetPasswordStore();
     39 
     40   // Called when the JS PasswordManager object is initialized.
     41   void UpdatePasswordLists(const ListValue* args);
     42 
     43   // Remove an entry.
     44   // @param value the entry index to be removed.
     45   void RemoveSavedPassword(const ListValue* args);
     46 
     47   // Remove an password exception.
     48   // @param value the entry index to be removed.
     49   void RemovePasswordException(const ListValue* args);
     50 
     51   // Remove all saved passwords
     52   void RemoveAllSavedPasswords(const ListValue* args);
     53 
     54   // Remove All password exceptions
     55   void RemoveAllPasswordExceptions(const ListValue* args);
     56 
     57   // Get password value for the selected entry.
     58   // @param value the selected entry index.
     59   void ShowSelectedPassword(const ListValue* args);
     60 
     61   // Sets the password and exception list contents to the given data.
     62   // We take ownership of the PasswordForms in the vector.
     63   void SetPasswordList();
     64   void SetPasswordExceptionList();
     65 
     66   // A short class to mediate requests to the password store.
     67   class ListPopulater : public PasswordStoreConsumer {
     68    public:
     69     explicit ListPopulater(PasswordManagerHandler* page);
     70     virtual ~ListPopulater();
     71 
     72     // Send a query to the password store to populate a list.
     73     virtual void Populate() = 0;
     74 
     75     // Send the password store's reply back to the handler.
     76     virtual void OnPasswordStoreRequestDone(
     77         CancelableRequestProvider::Handle handle,
     78         const std::vector<webkit_glue::PasswordForm*>& result) = 0;
     79 
     80    protected:
     81     PasswordManagerHandler* page_;
     82     CancelableRequestProvider::Handle pending_login_query_;
     83   };
     84 
     85   // A short class to mediate requests to the password store for passwordlist.
     86   class PasswordListPopulater : public ListPopulater {
     87    public:
     88     explicit PasswordListPopulater(PasswordManagerHandler* page);
     89 
     90     // Send a query to the password store to populate a password list.
     91     virtual void Populate();
     92 
     93     // Send the password store's reply back to the handler.
     94     virtual void OnPasswordStoreRequestDone(
     95         CancelableRequestProvider::Handle handle,
     96         const std::vector<webkit_glue::PasswordForm*>& result);
     97   };
     98 
     99   // A short class to mediate requests to the password store for exceptions.
    100   class PasswordExceptionListPopulater : public ListPopulater {
    101    public:
    102     explicit PasswordExceptionListPopulater(PasswordManagerHandler* page);
    103 
    104     // Send a query to the password store to populate a passwordException list.
    105     virtual void Populate();
    106 
    107     // Send the password store's reply back to the handler.
    108     virtual void OnPasswordStoreRequestDone(
    109         CancelableRequestProvider::Handle handle,
    110         const std::vector<webkit_glue::PasswordForm*>& result);
    111   };
    112 
    113   // Password store consumer for populating the password list and exceptions.
    114   PasswordListPopulater populater_;
    115   PasswordExceptionListPopulater exception_populater_;
    116 
    117   ScopedVector<webkit_glue::PasswordForm> password_list_;
    118   ScopedVector<webkit_glue::PasswordForm> password_exception_list_;
    119 
    120   // User's pref
    121   std::string languages_;
    122 
    123   // Whether to show stored passwords or not.
    124   BooleanPrefMember show_passwords_;
    125 
    126   DISALLOW_COPY_AND_ASSIGN(PasswordManagerHandler);
    127 };
    128 
    129 #endif  // CHROME_BROWSER_UI_WEBUI_OPTIONS_PASSWORD_MANAGER_HANDLER_H_
    130