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

Unified Diff: chrome/browser/password_manager/native_backend_gnome_x.cc

Issue 825773003: PasswordStore: Use ScopedVector to express ownership of forms (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Use assignment instead of construction Created 5 years, 11 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 side-by-side diff with in-line comments
Download patch
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 1035e951af10ade381290ccfce503b879da0180b..b3571d6b3384b2b690b2987418427bb155dae96d 100644
--- a/chrome/browser/password_manager/native_backend_gnome_x.cc
+++ b/chrome/browser/password_manager/native_backend_gnome_x.cc
@@ -147,17 +147,17 @@ scoped_ptr<PasswordForm> FormFromAttributes(GnomeKeyringAttributeList* attrs) {
return form.Pass();
}
-// Parse all the results from the given GList into a PasswordFormList, and free
-// the GList. PasswordForms are allocated on the heap, and should be deleted by
-// the consumer. If not NULL, |lookup_form| is used to filter out results --
-// only credentials with signon realms passing the PSL matching against
-// |lookup_form->signon_realm| will be kept. PSL matched results get their
-// signon_realm, origin, and action rewritten to those of |lookup_form_|, with
-// the original signon_realm saved into the result's original_signon_realm data
-// member.
+// Parse all the results from the given GList into a
+// ScopedVector<autofill::PasswordForm>, and free the GList. PasswordForms are
+// allocated on the heap, and should be deleted by the consumer. If not NULL,
+// |lookup_form| is used to filter out results -- only credentials with signon
+// realms passing the PSL matching against |lookup_form->signon_realm| will be
+// kept. PSL matched results get their signon_realm, origin, and action
+// rewritten to those of |lookup_form_|, with the original signon_realm saved
+// into the result's original_signon_realm data member.
void ConvertFormList(GList* found,
const PasswordForm* lookup_form,
- NativeBackendGnome::PasswordFormList* forms) {
+ ScopedVector<autofill::PasswordForm>* forms) {
password_manager::PSLDomainMatchMetric psl_domain_match_metric =
password_manager::PSL_DOMAIN_MATCH_NONE;
for (GList* element = g_list_first(found); element != NULL;
@@ -255,8 +255,6 @@ const GnomeKeyringPasswordSchema kGnomeSchema = {
// be used in parallel.
class GKRMethod : public GnomeKeyringLoader {
public:
- typedef NativeBackendGnome::PasswordFormList PasswordFormList;
-
GKRMethod() : event_(false, false), result_(GNOME_KEYRING_RESULT_CANCELLED) {}
// Action methods. These call gnome_keyring_* functions. Call from UI thread.
@@ -274,7 +272,7 @@ class GKRMethod : public GnomeKeyringLoader {
// Use after AddLoginSearch, UpdateLoginSearch, GetLogins, GetLoginsList,
// GetAllLogins.
- GnomeKeyringResult WaitResult(PasswordFormList* forms);
+ GnomeKeyringResult WaitResult(ScopedVector<autofill::PasswordForm>* forms);
private:
struct GnomeKeyringAttributeListFreeDeleter {
@@ -306,7 +304,7 @@ class GKRMethod : public GnomeKeyringLoader {
base::WaitableEvent event_;
GnomeKeyringResult result_;
- NativeBackendGnome::PasswordFormList forms_;
+ ScopedVector<autofill::PasswordForm> forms_;
// If the credential search is specified by a single form and needs to use PSL
// matching, then the specifying form is stored in |lookup_form_|. If PSL
// matching is used to find a result, then the results signon realm, origin
@@ -466,7 +464,8 @@ GnomeKeyringResult GKRMethod::WaitResult() {
return result_;
}
-GnomeKeyringResult GKRMethod::WaitResult(PasswordFormList* forms) {
+GnomeKeyringResult GKRMethod::WaitResult(
+ ScopedVector<autofill::PasswordForm>* forms) {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::DB));
event_.Wait();
if (forms->empty()) {
@@ -475,7 +474,7 @@ GnomeKeyringResult GKRMethod::WaitResult(PasswordFormList* forms) {
} else {
// Rare case. Append forms_ to *forms.
forms->insert(forms->end(), forms_.begin(), forms_.end());
- forms_.clear();
+ forms_.weak_clear();
}
return result_;
}
@@ -564,7 +563,7 @@ password_manager::PasswordStoreChangeList NativeBackendGnome::AddLogin(
base::Unretained(&method),
form, app_string_.c_str()));
ScopedVector<autofill::PasswordForm> forms;
- GnomeKeyringResult result = method.WaitResult(&forms.get());
+ GnomeKeyringResult result = method.WaitResult(&forms);
if (result != GNOME_KEYRING_RESULT_OK &&
result != GNOME_KEYRING_RESULT_NO_MATCH) {
LOG(ERROR) << "Keyring find failed: "
@@ -608,7 +607,7 @@ bool NativeBackendGnome::UpdateLogin(
base::Unretained(&method),
form, app_string_.c_str()));
ScopedVector<autofill::PasswordForm> forms;
- GnomeKeyringResult result = method.WaitResult(&forms.get());
+ GnomeKeyringResult result = method.WaitResult(&forms);
if (result != GNOME_KEYRING_RESULT_OK) {
LOG(ERROR) << "Keyring find failed: "
<< gnome_keyring_result_to_message(result);
@@ -667,8 +666,9 @@ bool NativeBackendGnome::RemoveLoginsSyncedBetween(
return RemoveLoginsBetween(delete_begin, delete_end, SYNC_TIMESTAMP, changes);
}
-bool NativeBackendGnome::GetLogins(const PasswordForm& form,
- PasswordFormList* forms) {
+bool NativeBackendGnome::GetLogins(
+ const PasswordForm& form,
+ ScopedVector<autofill::PasswordForm>* forms) {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::DB));
GKRMethod method;
BrowserThread::PostTask(BrowserThread::UI, FROM_HERE,
@@ -686,16 +686,19 @@ bool NativeBackendGnome::GetLogins(const PasswordForm& form,
return true;
}
-bool NativeBackendGnome::GetAutofillableLogins(PasswordFormList* forms) {
- return GetLoginsList(forms, true);
+bool NativeBackendGnome::GetAutofillableLogins(
+ ScopedVector<autofill::PasswordForm>* forms) {
+ return GetLoginsList(true, forms);
}
-bool NativeBackendGnome::GetBlacklistLogins(PasswordFormList* forms) {
- return GetLoginsList(forms, false);
+bool NativeBackendGnome::GetBlacklistLogins(
+ ScopedVector<autofill::PasswordForm>* forms) {
+ return GetLoginsList(false, forms);
}
-bool NativeBackendGnome::GetLoginsList(PasswordFormList* forms,
- bool autofillable) {
+bool NativeBackendGnome::GetLoginsList(
+ bool autofillable,
+ ScopedVector<autofill::PasswordForm>* forms) {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::DB));
uint32_t blacklisted_by_user = !autofillable;
@@ -716,7 +719,8 @@ bool NativeBackendGnome::GetLoginsList(PasswordFormList* forms,
return true;
}
-bool NativeBackendGnome::GetAllLogins(PasswordFormList* forms) {
+bool NativeBackendGnome::GetAllLogins(
+ ScopedVector<autofill::PasswordForm>* forms) {
GKRMethod method;
BrowserThread::PostTask(BrowserThread::UI, FROM_HERE,
base::Bind(&GKRMethod::GetAllLogins,
@@ -733,14 +737,15 @@ bool NativeBackendGnome::GetAllLogins(PasswordFormList* forms) {
return true;
}
-bool NativeBackendGnome::GetLoginsBetween(base::Time get_begin,
- base::Time get_end,
- TimestampToCompare date_to_compare,
- PasswordFormList* forms) {
+bool NativeBackendGnome::GetLoginsBetween(
+ base::Time get_begin,
+ base::Time get_end,
+ TimestampToCompare date_to_compare,
+ ScopedVector<autofill::PasswordForm>* 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;
+ ScopedVector<autofill::PasswordForm> all_forms;
if (!GetAllLogins(&all_forms))
return false;
@@ -748,12 +753,11 @@ bool NativeBackendGnome::GetLoginsBetween(base::Time get_begin,
date_to_compare == CREATION_TIMESTAMP
? &autofill::PasswordForm::date_created
: &autofill::PasswordForm::date_synced;
- 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];
+ for (auto& saved_form : all_forms) {
+ if (get_begin <= saved_form->*date_member &&
+ (get_end.is_null() || saved_form->*date_member < get_end)) {
+ forms->push_back(saved_form);
+ saved_form = nullptr;
}
}
@@ -771,7 +775,7 @@ bool NativeBackendGnome::RemoveLoginsBetween(
// 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_to_compare, &forms.get()))
+ if (!GetLoginsBetween(get_begin, get_end, date_to_compare, &forms))
return false;
bool ok = true;

Powered by Google App Engine
This is Rietveld 408576698