Chromium Code Reviews| Index: chrome/browser/password_manager/native_backend_gnome_x.cc |
| diff --git a/chrome/browser/password_manager/native_backend_gnome_x.cc b/chrome/browser/password_manager/native_backend_gnome_x.cc |
| index 6b4236a0c25c1e02c5949a749c542d8a4de0bd03..f37ae62a0a6c25519d8353572a93f93b3f61d930 100644 |
| --- a/chrome/browser/password_manager/native_backend_gnome_x.cc |
| +++ b/chrome/browser/password_manager/native_backend_gnome_x.cc |
| @@ -642,26 +642,16 @@ bool NativeBackendGnome::RemoveLogin(const PasswordForm& form) { |
| return true; |
| } |
| -bool NativeBackendGnome::RemoveLoginsCreatedBetween( |
| - const base::Time& delete_begin, |
| - const base::Time& delete_end) { |
| - DCHECK(BrowserThread::CurrentlyOn(BrowserThread::DB)); |
| - bool ok = true; |
| - // We could walk the list and delete items as we find them, but it is much |
| - // easier to build the list and use RemoveLogin() to delete them. |
| - PasswordFormList forms; |
| - if (!GetAllLogins(&forms)) |
| - return false; |
| +bool NativeBackendGnome::RemoveLoginsCreatedBetween(base::Time delete_begin, |
| + base::Time delete_end) { |
| + return RemoveLoginsBetween(delete_begin, delete_end, true, NULL); |
| +} |
| - for (size_t i = 0; i < forms.size(); ++i) { |
| - if (delete_begin <= forms[i]->date_created && |
| - (delete_end.is_null() || forms[i]->date_created < delete_end)) { |
| - if (!RemoveLogin(*forms[i])) |
| - ok = false; |
| - } |
| - delete forms[i]; |
| - } |
| - return ok; |
| +bool NativeBackendGnome::RemoveLoginsSyncedBetween( |
| + base::Time delete_begin, |
| + base::Time delete_end, |
| + password_manager::PasswordStoreChangeList* changes) { |
| + return RemoveLoginsBetween(delete_begin, delete_end, false, changes); |
| } |
| bool NativeBackendGnome::GetLogins(const PasswordForm& form, |
| @@ -683,27 +673,10 @@ bool NativeBackendGnome::GetLogins(const PasswordForm& form, |
| return true; |
| } |
| -bool NativeBackendGnome::GetLoginsCreatedBetween(const base::Time& get_begin, |
| - const base::Time& get_end, |
| +bool NativeBackendGnome::GetLoginsCreatedBetween(base::Time get_begin, |
| + base::Time get_end, |
| PasswordFormList* forms) { |
| - DCHECK(BrowserThread::CurrentlyOn(BrowserThread::DB)); |
| - // We could walk the list and add items as we find them, but it is much |
| - // easier to build the list and then filter the results. |
| - PasswordFormList all_forms; |
| - if (!GetAllLogins(&all_forms)) |
| - return false; |
| - |
| - forms->reserve(forms->size() + all_forms.size()); |
| - for (size_t i = 0; i < all_forms.size(); ++i) { |
| - if (get_begin <= all_forms[i]->date_created && |
| - (get_end.is_null() || all_forms[i]->date_created < get_end)) { |
| - forms->push_back(all_forms[i]); |
| - } else { |
| - delete all_forms[i]; |
| - } |
| - } |
| - |
| - return true; |
| + return GetLoginsBetween(get_begin, get_end, true, forms); |
| } |
| bool NativeBackendGnome::GetAutofillableLogins(PasswordFormList* forms) { |
| @@ -753,6 +726,61 @@ bool NativeBackendGnome::GetAllLogins(PasswordFormList* forms) { |
| return true; |
| } |
| +bool NativeBackendGnome::GetLoginsBetween(base::Time get_begin, |
| + base::Time get_end, |
| + bool date_is_creation, |
| + PasswordFormList* forms) { |
| + DCHECK(BrowserThread::CurrentlyOn(BrowserThread::DB)); |
| + // We could walk the list and add items as we find them, but it is much |
| + // easier to build the list and then filter the results. |
| + PasswordFormList all_forms; |
| + if (!GetAllLogins(&all_forms)) |
| + return false; |
| + |
| + base::Time autofill::PasswordForm::*date_member = date_is_creation ? |
| + &autofill::PasswordForm::date_created : |
| + &autofill::PasswordForm::date_synced; |
| + forms->reserve(forms->size() + all_forms.size()); |
|
vabr (Chromium)
2014/06/17 15:28:40
What are the reasons for this speed optimisation?
vasilii
2014/06/17 17:24:14
Done. I copied it from GetLoginsCreatedBetween().
|
| + for (size_t i = 0; i < all_forms.size(); ++i) { |
| + if (get_begin <= all_forms[i]->*date_member && |
| + (get_end.is_null() || all_forms[i]->*date_member < get_end)) { |
| + forms->push_back(all_forms[i]); |
| + } else { |
| + delete all_forms[i]; |
| + } |
| + } |
| + |
| + return true; |
| +} |
| + |
| +bool NativeBackendGnome::RemoveLoginsBetween( |
| + base::Time get_begin, |
| + base::Time get_end, |
| + bool date_is_creation, |
| + password_manager::PasswordStoreChangeList* changes) { |
| + DCHECK(BrowserThread::CurrentlyOn(BrowserThread::DB)); |
| + if (changes) |
| + changes->clear(); |
| + // We could walk the list and delete items as we find them, but it is much |
| + // easier to build the list and use RemoveLogin() to delete them. |
| + ScopedVector<autofill::PasswordForm> forms; |
| + if (!GetLoginsBetween(get_begin, get_end, date_is_creation, &forms.get())) |
| + return false; |
| + |
| + bool ok = true; |
| + for (size_t i = 0; i < forms.size(); ++i) { |
| + if (RemoveLogin(*forms[i])) { |
| + if (changes) { |
| + changes->push_back(password_manager::PasswordStoreChange( |
| + password_manager::PasswordStoreChange::REMOVE, *forms[i])); |
| + } |
| + } else { |
| + ok = false; |
| + } |
| + } |
| + return ok; |
| +} |
| + |
| std::string NativeBackendGnome::GetProfileSpecificAppString() const { |
| // Originally, the application string was always just "chrome" and used only |
| // so that we had *something* to search for since GNOME Keyring won't search |