OLD | NEW |
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 #include "chrome/browser/password_manager/password_store_x.h" | 5 #include "chrome/browser/password_manager/password_store_x.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 #include <map> | 8 #include <map> |
9 #include <utility> | 9 #include <utility> |
10 #include <vector> | 10 #include <vector> |
(...skipping 26 matching lines...) Expand all Loading... |
37 return (!changes->empty() && | 37 return (!changes->empty() && |
38 changes->back().type() == PasswordStoreChange::ADD); | 38 changes->back().type() == PasswordStoreChange::ADD); |
39 } | 39 } |
40 | 40 |
41 bool RemoveLoginsByURLAndTimeFromBackend( | 41 bool RemoveLoginsByURLAndTimeFromBackend( |
42 PasswordStoreX::NativeBackend* backend, | 42 PasswordStoreX::NativeBackend* backend, |
43 const base::Callback<bool(const GURL&)>& url_filter, | 43 const base::Callback<bool(const GURL&)>& url_filter, |
44 base::Time delete_begin, | 44 base::Time delete_begin, |
45 base::Time delete_end, | 45 base::Time delete_end, |
46 PasswordStoreChangeList* changes) { | 46 PasswordStoreChangeList* changes) { |
47 ScopedVector<autofill::PasswordForm> forms; | 47 std::vector<std::unique_ptr<PasswordForm>> forms; |
48 if (!backend->GetAllLogins(&forms)) | 48 if (!backend->GetAllLogins(&forms)) |
49 return false; | 49 return false; |
50 | 50 |
51 for (const autofill::PasswordForm* form : forms) { | 51 for (const auto& form : forms) { |
52 if (url_filter.Run(form->origin) && form->date_created >= delete_begin && | 52 if (url_filter.Run(form->origin) && form->date_created >= delete_begin && |
53 (delete_end.is_null() || form->date_created < delete_end) && | 53 (delete_end.is_null() || form->date_created < delete_end) && |
54 !backend->RemoveLogin(*form, changes)) | 54 !backend->RemoveLogin(*form, changes)) |
55 return false; | 55 return false; |
56 } | 56 } |
57 | 57 |
58 return true; | 58 return true; |
59 } | 59 } |
60 | 60 |
61 } // namespace | 61 } // namespace |
(...skipping 123 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
185 const std::unique_ptr<PasswordForm>& b) { | 185 const std::unique_ptr<PasswordForm>& b) { |
186 return a->origin < b->origin; | 186 return a->origin < b->origin; |
187 }); | 187 }); |
188 } | 188 } |
189 | 189 |
190 } // anonymous namespace | 190 } // anonymous namespace |
191 | 191 |
192 std::vector<std::unique_ptr<PasswordForm>> PasswordStoreX::FillMatchingLogins( | 192 std::vector<std::unique_ptr<PasswordForm>> PasswordStoreX::FillMatchingLogins( |
193 const FormDigest& form) { | 193 const FormDigest& form) { |
194 CheckMigration(); | 194 CheckMigration(); |
195 ScopedVector<autofill::PasswordForm> matched_forms_scopedvector; | 195 std::vector<std::unique_ptr<PasswordForm>> matched_forms; |
196 if (use_native_backend() && | 196 if (use_native_backend() && backend_->GetLogins(form, &matched_forms)) { |
197 backend_->GetLogins(form, &matched_forms_scopedvector)) { | |
198 std::vector<std::unique_ptr<PasswordForm>> matched_forms = | |
199 password_manager_util::ConvertScopedVector( | |
200 std::move(matched_forms_scopedvector)); | |
201 SortLoginsByOrigin(&matched_forms); | 197 SortLoginsByOrigin(&matched_forms); |
202 // The native backend may succeed and return no data even while locked, if | 198 // The native backend may succeed and return no data even while locked, if |
203 // the query did not match anything stored. So we continue to allow fallback | 199 // the query did not match anything stored. So we continue to allow fallback |
204 // until we perform a write operation, or until a read returns actual data. | 200 // until we perform a write operation, or until a read returns actual data. |
205 if (!matched_forms.empty()) | 201 if (!matched_forms.empty()) |
206 allow_fallback_ = false; | 202 allow_fallback_ = false; |
207 return matched_forms; | 203 return matched_forms; |
208 } | 204 } |
209 if (allow_default_store()) | 205 if (allow_default_store()) |
210 return PasswordStoreDefault::FillMatchingLogins(form); | 206 return PasswordStoreDefault::FillMatchingLogins(form); |
211 return std::vector<std::unique_ptr<PasswordForm>>(); | 207 return std::vector<std::unique_ptr<PasswordForm>>(); |
212 } | 208 } |
213 | 209 |
214 bool PasswordStoreX::FillAutofillableLogins( | 210 bool PasswordStoreX::FillAutofillableLogins( |
215 std::vector<std::unique_ptr<PasswordForm>>* forms) { | 211 std::vector<std::unique_ptr<PasswordForm>>* forms) { |
216 CheckMigration(); | 212 CheckMigration(); |
217 ScopedVector<autofill::PasswordForm> forms_scopedvector; | 213 if (use_native_backend() && backend_->GetAutofillableLogins(forms)) { |
218 if (use_native_backend() && | |
219 backend_->GetAutofillableLogins(&forms_scopedvector)) { | |
220 *forms = password_manager_util::ConvertScopedVector( | |
221 std::move(forms_scopedvector)); | |
222 SortLoginsByOrigin(forms); | 214 SortLoginsByOrigin(forms); |
223 // See GetLoginsImpl() for why we disallow fallback conditionally here. | 215 // See GetLoginsImpl() for why we disallow fallback conditionally here. |
224 if (!forms->empty()) | 216 if (!forms->empty()) |
225 allow_fallback_ = false; | 217 allow_fallback_ = false; |
226 return true; | 218 return true; |
227 } | 219 } |
228 if (allow_default_store()) | 220 if (allow_default_store()) |
229 return PasswordStoreDefault::FillAutofillableLogins(forms); | 221 return PasswordStoreDefault::FillAutofillableLogins(forms); |
230 return false; | 222 return false; |
231 } | 223 } |
232 | 224 |
233 bool PasswordStoreX::FillBlacklistLogins( | 225 bool PasswordStoreX::FillBlacklistLogins( |
234 std::vector<std::unique_ptr<PasswordForm>>* forms) { | 226 std::vector<std::unique_ptr<PasswordForm>>* forms) { |
235 CheckMigration(); | 227 CheckMigration(); |
236 ScopedVector<autofill::PasswordForm> forms_scopedvector; | 228 if (use_native_backend() && backend_->GetBlacklistLogins(forms)) { |
237 if (use_native_backend() && | |
238 backend_->GetBlacklistLogins(&forms_scopedvector)) { | |
239 *forms = password_manager_util::ConvertScopedVector( | |
240 std::move(forms_scopedvector)); | |
241 // See GetLoginsImpl() for why we disallow fallback conditionally here. | 229 // See GetLoginsImpl() for why we disallow fallback conditionally here. |
242 SortLoginsByOrigin(forms); | 230 SortLoginsByOrigin(forms); |
243 if (!forms->empty()) | 231 if (!forms->empty()) |
244 allow_fallback_ = false; | 232 allow_fallback_ = false; |
245 return true; | 233 return true; |
246 } | 234 } |
247 if (allow_default_store()) | 235 if (allow_default_store()) |
248 return PasswordStoreDefault::FillBlacklistLogins(forms); | 236 return PasswordStoreDefault::FillBlacklistLogins(forms); |
249 return false; | 237 return false; |
250 } | 238 } |
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
317 // Finally, delete the database file itself. We remove the passwords from | 305 // Finally, delete the database file itself. We remove the passwords from |
318 // it before deleting the file just in case there is some problem deleting | 306 // it before deleting the file just in case there is some problem deleting |
319 // the file (e.g. directory is not writable, but file is), which would | 307 // the file (e.g. directory is not writable, but file is), which would |
320 // otherwise cause passwords to re-migrate next (or maybe every) time. | 308 // otherwise cause passwords to re-migrate next (or maybe every) time. |
321 DeleteAndRecreateDatabaseFile(); | 309 DeleteAndRecreateDatabaseFile(); |
322 } | 310 } |
323 } | 311 } |
324 ssize_t result = ok ? forms.size() : -1; | 312 ssize_t result = ok ? forms.size() : -1; |
325 return result; | 313 return result; |
326 } | 314 } |
OLD | NEW |