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

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

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