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
17class 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