Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(110)

Side by Side Diff: chrome/browser/password_manager/password_store.h

Issue 11000016: Move forms/ out of webkit/. (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: Response to review Created 8 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 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 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #ifndef CHROME_BROWSER_PASSWORD_MANAGER_PASSWORD_STORE_H_ 5 #ifndef CHROME_BROWSER_PASSWORD_MANAGER_PASSWORD_STORE_H_
6 #define CHROME_BROWSER_PASSWORD_MANAGER_PASSWORD_STORE_H_ 6 #define CHROME_BROWSER_PASSWORD_MANAGER_PASSWORD_STORE_H_
7 7
8 #include <vector> 8 #include <vector>
9 9
10 #include "base/callback.h" 10 #include "base/callback.h"
11 #include "base/memory/ref_counted.h" 11 #include "base/memory/ref_counted.h"
12 #include "base/observer_list.h" 12 #include "base/observer_list.h"
13 #include "base/threading/thread.h" 13 #include "base/threading/thread.h"
14 #include "base/time.h" 14 #include "base/time.h"
15 #include "chrome/browser/common/cancelable_request.h" 15 #include "chrome/browser/common/cancelable_request.h"
16 #include "chrome/browser/profiles/refcounted_profile_keyed_service.h" 16 #include "chrome/browser/profiles/refcounted_profile_keyed_service.h"
17 17
18 class PasswordStore; 18 class PasswordStore;
19 class PasswordStoreConsumer; 19 class PasswordStoreConsumer;
20 class Task; 20 class Task;
21 21
22 namespace browser_sync { 22 namespace browser_sync {
23 class PasswordDataTypeController; 23 class PasswordDataTypeController;
24 class PasswordModelAssociator; 24 class PasswordModelAssociator;
25 class PasswordModelWorker; 25 class PasswordModelWorker;
26 } 26 }
27 27
28 namespace webkit { 28 namespace content {
29 namespace forms {
30 struct PasswordForm; 29 struct PasswordForm;
31 } 30 }
32 }
33 31
34 namespace passwords_helper { 32 namespace passwords_helper {
35 void AddLogin(PasswordStore* store, const webkit::forms::PasswordForm& form); 33 void AddLogin(PasswordStore* store, const content::PasswordForm& form);
36 void RemoveLogin(PasswordStore* store, const webkit::forms::PasswordForm& form); 34 void RemoveLogin(PasswordStore* store, const content::PasswordForm& form);
37 void UpdateLogin(PasswordStore* store, const webkit::forms::PasswordForm& form); 35 void UpdateLogin(PasswordStore* store, const content::PasswordForm& form);
38 } 36 }
39 37
40 // Interface for storing form passwords in a platform-specific secure way. 38 // Interface for storing form passwords in a platform-specific secure way.
41 // The login request/manipulation API is not threadsafe and must be used 39 // The login request/manipulation API is not threadsafe and must be used
42 // from the UI thread. 40 // from the UI thread.
43 class PasswordStore 41 class PasswordStore
44 : public RefcountedProfileKeyedService, 42 : public RefcountedProfileKeyedService,
45 public CancelableRequestProvider { 43 public CancelableRequestProvider {
46 public: 44 public:
47 typedef base::Callback< 45 typedef base::Callback<
48 void(Handle, const std::vector<webkit::forms::PasswordForm*>&)> 46 void(Handle, const std::vector<content::PasswordForm*>&)>
49 GetLoginsCallback; 47 GetLoginsCallback;
50 48
51 // PasswordForm vector elements are meant to be owned by the 49 // PasswordForm vector elements are meant to be owned by the
52 // PasswordStoreConsumer. However, if the request is canceled after the 50 // PasswordStoreConsumer. However, if the request is canceled after the
53 // allocation, then the request must take care of the deletion. 51 // allocation, then the request must take care of the deletion.
54 class GetLoginsRequest 52 class GetLoginsRequest
55 : public CancelableRequest1<GetLoginsCallback, 53 : public CancelableRequest1<GetLoginsCallback,
56 std::vector<webkit::forms::PasswordForm*> > { 54 std::vector<content::PasswordForm*> > {
57 public: 55 public:
58 explicit GetLoginsRequest(const GetLoginsCallback& callback); 56 explicit GetLoginsRequest(const GetLoginsCallback& callback);
59 57
60 void set_ignore_logins_cutoff(const base::Time& cutoff) { 58 void set_ignore_logins_cutoff(const base::Time& cutoff) {
61 ignore_logins_cutoff_ = cutoff; 59 ignore_logins_cutoff_ = cutoff;
62 } 60 }
63 61
64 // Removes any logins in the result list that were saved before the cutoff. 62 // Removes any logins in the result list that were saved before the cutoff.
65 void ApplyIgnoreLoginsCutoff(); 63 void ApplyIgnoreLoginsCutoff();
66 64
(...skipping 18 matching lines...) Expand all
85 protected: 83 protected:
86 virtual ~Observer() {} 84 virtual ~Observer() {}
87 }; 85 };
88 86
89 PasswordStore(); 87 PasswordStore();
90 88
91 // Reimplement this to add custom initialization. Always call this too. 89 // Reimplement this to add custom initialization. Always call this too.
92 virtual bool Init(); 90 virtual bool Init();
93 91
94 // Adds the given PasswordForm to the secure password store asynchronously. 92 // Adds the given PasswordForm to the secure password store asynchronously.
95 virtual void AddLogin(const webkit::forms::PasswordForm& form); 93 virtual void AddLogin(const content::PasswordForm& form);
96 94
97 // Updates the matching PasswordForm in the secure password store (async). 95 // Updates the matching PasswordForm in the secure password store (async).
98 void UpdateLogin(const webkit::forms::PasswordForm& form); 96 void UpdateLogin(const content::PasswordForm& form);
99 97
100 // Removes the matching PasswordForm from the secure password store (async). 98 // Removes the matching PasswordForm from the secure password store (async).
101 void RemoveLogin(const webkit::forms::PasswordForm& form); 99 void RemoveLogin(const content::PasswordForm& form);
102 100
103 // Removes all logins created in the given date range. 101 // Removes all logins created in the given date range.
104 void RemoveLoginsCreatedBetween(const base::Time& delete_begin, 102 void RemoveLoginsCreatedBetween(const base::Time& delete_begin,
105 const base::Time& delete_end); 103 const base::Time& delete_end);
106 104
107 // Searches for a matching PasswordForm and returns a handle so the async 105 // Searches for a matching PasswordForm and returns a handle so the async
108 // request can be tracked. Implement the PasswordStoreConsumer interface to be 106 // request can be tracked. Implement the PasswordStoreConsumer interface to be
109 // notified on completion. 107 // notified on completion.
110 virtual Handle GetLogins(const webkit::forms::PasswordForm& form, 108 virtual Handle GetLogins(const content::PasswordForm& form,
111 PasswordStoreConsumer* consumer); 109 PasswordStoreConsumer* consumer);
112 110
113 // Gets the complete list of PasswordForms that are not blacklist entries--and 111 // Gets the complete list of PasswordForms that are not blacklist entries--and
114 // are thus auto-fillable--and returns a handle so the async request can be 112 // are thus auto-fillable--and returns a handle so the async request can be
115 // tracked. Implement the PasswordStoreConsumer interface to be notified on 113 // tracked. Implement the PasswordStoreConsumer interface to be notified on
116 // completion. 114 // completion.
117 Handle GetAutofillableLogins(PasswordStoreConsumer* consumer); 115 Handle GetAutofillableLogins(PasswordStoreConsumer* consumer);
118 116
119 // Gets the complete list of PasswordForms that are blacklist entries, and 117 // Gets the complete list of PasswordForms that are blacklist entries, and
120 // returns a handle so the async request can be tracked. Implement the 118 // returns a handle so the async request can be tracked. Implement the
121 // PasswordStoreConsumer interface to be notified on completion. 119 // PasswordStoreConsumer interface to be notified on completion.
122 Handle GetBlacklistLogins(PasswordStoreConsumer* consumer); 120 Handle GetBlacklistLogins(PasswordStoreConsumer* consumer);
123 121
124 // Reports usage metrics for the database. 122 // Reports usage metrics for the database.
125 void ReportMetrics(); 123 void ReportMetrics();
126 124
127 // Adds an observer to be notified when the password store data changes. 125 // Adds an observer to be notified when the password store data changes.
128 void AddObserver(Observer* observer); 126 void AddObserver(Observer* observer);
129 127
130 // Removes |observer| from the observer list. 128 // Removes |observer| from the observer list.
131 void RemoveObserver(Observer* observer); 129 void RemoveObserver(Observer* observer);
132 130
133 protected: 131 protected:
134 friend class base::RefCountedThreadSafe<PasswordStore>; 132 friend class base::RefCountedThreadSafe<PasswordStore>;
135 friend class browser_sync::PasswordDataTypeController; 133 friend class browser_sync::PasswordDataTypeController;
136 friend class browser_sync::PasswordModelAssociator; 134 friend class browser_sync::PasswordModelAssociator;
137 friend class browser_sync::PasswordModelWorker; 135 friend class browser_sync::PasswordModelWorker;
138 friend void passwords_helper::AddLogin(PasswordStore*, 136 friend void passwords_helper::AddLogin(PasswordStore*,
139 const webkit::forms::PasswordForm&); 137 const content::PasswordForm&);
140 friend void passwords_helper::RemoveLogin(PasswordStore*, 138 friend void passwords_helper::RemoveLogin(PasswordStore*,
141 const webkit::forms::PasswordForm&); 139 const content::PasswordForm&);
142 friend void passwords_helper::UpdateLogin(PasswordStore*, 140 friend void passwords_helper::UpdateLogin(PasswordStore*,
143 const webkit::forms::PasswordForm&); 141 const content::PasswordForm&);
144 142
145 virtual ~PasswordStore(); 143 virtual ~PasswordStore();
146 144
147 // Provided to allow subclasses to extend GetLoginsRequest if additional info 145 // Provided to allow subclasses to extend GetLoginsRequest if additional info
148 // is needed between a call and its Impl. 146 // is needed between a call and its Impl.
149 virtual GetLoginsRequest* NewGetLoginsRequest( 147 virtual GetLoginsRequest* NewGetLoginsRequest(
150 const GetLoginsCallback& callback); 148 const GetLoginsCallback& callback);
151 149
152 // Schedule the given |task| to be run in the PasswordStore's own thread. 150 // Schedule the given |task| to be run in the PasswordStore's own thread.
153 virtual bool ScheduleTask(const base::Closure& task); 151 virtual bool ScheduleTask(const base::Closure& task);
154 152
155 // These will be run in PasswordStore's own thread. 153 // These will be run in PasswordStore's own thread.
156 // Synchronous implementation that reports usage metrics. 154 // Synchronous implementation that reports usage metrics.
157 virtual void ReportMetricsImpl() = 0; 155 virtual void ReportMetricsImpl() = 0;
158 // Synchronous implementation to add the given login. 156 // Synchronous implementation to add the given login.
159 virtual void AddLoginImpl(const webkit::forms::PasswordForm& form) = 0; 157 virtual void AddLoginImpl(const content::PasswordForm& form) = 0;
160 // Synchronous implementation to update the given login. 158 // Synchronous implementation to update the given login.
161 virtual void UpdateLoginImpl(const webkit::forms::PasswordForm& form) = 0; 159 virtual void UpdateLoginImpl(const content::PasswordForm& form) = 0;
162 // Synchronous implementation to remove the given login. 160 // Synchronous implementation to remove the given login.
163 virtual void RemoveLoginImpl(const webkit::forms::PasswordForm& form) = 0; 161 virtual void RemoveLoginImpl(const content::PasswordForm& form) = 0;
164 // Synchronous implementation to remove the given logins. 162 // Synchronous implementation to remove the given logins.
165 virtual void RemoveLoginsCreatedBetweenImpl(const base::Time& delete_begin, 163 virtual void RemoveLoginsCreatedBetweenImpl(const base::Time& delete_begin,
166 const base::Time& delete_end) = 0; 164 const base::Time& delete_end) = 0;
167 // Should find all PasswordForms with the same signon_realm. The results 165 // Should find all PasswordForms with the same signon_realm. The results
168 // will then be scored by the PasswordFormManager. Once they are found 166 // will then be scored by the PasswordFormManager. Once they are found
169 // (or not), the consumer should be notified. 167 // (or not), the consumer should be notified.
170 virtual void GetLoginsImpl(GetLoginsRequest* request, 168 virtual void GetLoginsImpl(GetLoginsRequest* request,
171 const webkit::forms::PasswordForm& form) = 0; 169 const content::PasswordForm& form) = 0;
172 // Finds all non-blacklist PasswordForms, and notifies the consumer. 170 // Finds all non-blacklist PasswordForms, and notifies the consumer.
173 virtual void GetAutofillableLoginsImpl(GetLoginsRequest* request) = 0; 171 virtual void GetAutofillableLoginsImpl(GetLoginsRequest* request) = 0;
174 // Finds all blacklist PasswordForms, and notifies the consumer. 172 // Finds all blacklist PasswordForms, and notifies the consumer.
175 virtual void GetBlacklistLoginsImpl(GetLoginsRequest* request) = 0; 173 virtual void GetBlacklistLoginsImpl(GetLoginsRequest* request) = 0;
176 174
177 // Finds all non-blacklist PasswordForms, and fills the vector. 175 // Finds all non-blacklist PasswordForms, and fills the vector.
178 virtual bool FillAutofillableLogins( 176 virtual bool FillAutofillableLogins(
179 std::vector<webkit::forms::PasswordForm*>* forms) = 0; 177 std::vector<content::PasswordForm*>* forms) = 0;
180 // Finds all blacklist PasswordForms, and fills the vector. 178 // Finds all blacklist PasswordForms, and fills the vector.
181 virtual bool FillBlacklistLogins( 179 virtual bool FillBlacklistLogins(
182 std::vector<webkit::forms::PasswordForm*>* forms) = 0; 180 std::vector<content::PasswordForm*>* forms) = 0;
183 181
184 // Dispatches the result to the PasswordStoreConsumer on the original caller's 182 // Dispatches the result to the PasswordStoreConsumer on the original caller's
185 // thread so the callback can be executed there. This should be the UI thread. 183 // thread so the callback can be executed there. This should be the UI thread.
186 virtual void ForwardLoginsResult(GetLoginsRequest* request); 184 virtual void ForwardLoginsResult(GetLoginsRequest* request);
187 185
188 private: 186 private:
189 // Schedule the given |func| to be run in the PasswordStore's own thread with 187 // Schedule the given |func| to be run in the PasswordStore's own thread with
190 // responses delivered to |consumer| on the current thread. 188 // responses delivered to |consumer| on the current thread.
191 template<typename BackendFunc> 189 template<typename BackendFunc>
192 Handle Schedule(BackendFunc func, PasswordStoreConsumer* consumer); 190 Handle Schedule(BackendFunc func, PasswordStoreConsumer* consumer);
193 191
194 // Schedule the given |func| to be run in the PasswordStore's own thread with 192 // Schedule the given |func| to be run in the PasswordStore's own thread with
195 // form |form| and responses delivered to |consumer| on the current thread. 193 // form |form| and responses delivered to |consumer| on the current thread.
196 // See GetLogins() for more information on |ignore_logins_cutoff|. 194 // See GetLogins() for more information on |ignore_logins_cutoff|.
197 template<typename BackendFunc> 195 template<typename BackendFunc>
198 Handle Schedule(BackendFunc func, PasswordStoreConsumer* consumer, 196 Handle Schedule(BackendFunc func, PasswordStoreConsumer* consumer,
199 const webkit::forms::PasswordForm& form, 197 const content::PasswordForm& form,
200 const base::Time& ignore_logins_cutoff); 198 const base::Time& ignore_logins_cutoff);
201 199
202 // Wrapper method called on the destination thread (DB for non-mac) that 200 // Wrapper method called on the destination thread (DB for non-mac) that
203 // invokes |task| and then calls back into the source thread to notify 201 // invokes |task| and then calls back into the source thread to notify
204 // observers that the password store may have been modified via 202 // observers that the password store may have been modified via
205 // NotifyLoginsChanged(). Note that there is no guarantee that the called 203 // NotifyLoginsChanged(). Note that there is no guarantee that the called
206 // method will actually modify the password store data. 204 // method will actually modify the password store data.
207 void WrapModificationTask(base::Closure task); 205 void WrapModificationTask(base::Closure task);
208 206
209 // Post a message to the UI thread to run NotifyLoginsChanged(). Called by 207 // Post a message to the UI thread to run NotifyLoginsChanged(). Called by
210 // WrapModificationTask() above, and split out as a separate method so that 208 // WrapModificationTask() above, and split out as a separate method so that
211 // password sync can call it as well after synchronously updating the password 209 // password sync can call it as well after synchronously updating the password
212 // store. 210 // store.
213 void PostNotifyLoginsChanged(); 211 void PostNotifyLoginsChanged();
214 212
215 // Called by WrapModificationTask() once the underlying data-modifying 213 // Called by WrapModificationTask() once the underlying data-modifying
216 // operation has been performed. Notifies observers that password store data 214 // operation has been performed. Notifies observers that password store data
217 // may have been changed. 215 // may have been changed.
218 void NotifyLoginsChanged(); 216 void NotifyLoginsChanged();
219 217
220 // The observers. 218 // The observers.
221 ObserverList<Observer> observers_; 219 ObserverList<Observer> observers_;
222 220
223 DISALLOW_COPY_AND_ASSIGN(PasswordStore); 221 DISALLOW_COPY_AND_ASSIGN(PasswordStore);
224 }; 222 };
225 223
226 #endif // CHROME_BROWSER_PASSWORD_MANAGER_PASSWORD_STORE_H_ 224 #endif // CHROME_BROWSER_PASSWORD_MANAGER_PASSWORD_STORE_H_
OLDNEW
« no previous file with comments | « chrome/browser/password_manager/password_manager_unittest.cc ('k') | chrome/browser/password_manager/password_store.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698