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

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

Issue 6646051: Fix DCHECK, memory leak, and refactor PasswordStore to use CancelableRequest (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: git try works all platforms now. Created 9 years, 9 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/password_store.cc
diff --git a/chrome/browser/password_manager/password_store.cc b/chrome/browser/password_manager/password_store.cc
index 712ef1cb96ebcf22b899104bcd207ccfaf657688..8a3640e18a6859e8c28158f2f27996d14902f3b6 100644
--- a/chrome/browser/password_manager/password_store.cc
+++ b/chrome/browser/password_manager/password_store.cc
@@ -6,13 +6,14 @@
#include "base/message_loop.h"
#include "base/scoped_ptr.h"
+#include "base/stl_util-inl.h"
#include "base/task.h"
#include "content/browser/browser_thread.h"
using std::vector;
using webkit_glue::PasswordForm;
-PasswordStore::PasswordStore() : handle_(0) {
+PasswordStore::PasswordStore() {
}
bool PasswordStore::Init() {
@@ -49,75 +50,28 @@ void PasswordStore::RemoveLoginsCreatedBetween(const base::Time& delete_begin,
delete_begin, delete_end));
}
-int PasswordStore::GetLogins(const PasswordForm& form,
- PasswordStoreConsumer* consumer) {
- int handle = GetNewRequestHandle();
- GetLoginsRequest* request = new GetLoginsRequest(consumer, handle);
- ScheduleTask(NewRunnableMethod(this, &PasswordStore::GetLoginsImpl, request,
- form));
- return handle;
+PasswordStore::Handle PasswordStore::GetLogins(
+ const PasswordForm& form, PasswordStoreConsumer* consumer) {
+ return Schedule(&PasswordStore::GetLoginsImpl, consumer, form);
}
-int PasswordStore::GetAutofillableLogins(PasswordStoreConsumer* consumer) {
- int handle = GetNewRequestHandle();
- GetLoginsRequest* request = new GetLoginsRequest(consumer, handle);
- ScheduleTask(NewRunnableMethod(this,
- &PasswordStore::GetAutofillableLoginsImpl,
- request));
- return handle;
+PasswordStore::Handle PasswordStore::GetAutofillableLogins(
+ PasswordStoreConsumer* consumer) {
+ return Schedule(&PasswordStore::GetAutofillableLoginsImpl, consumer);
}
-int PasswordStore::GetBlacklistLogins(PasswordStoreConsumer* consumer) {
- int handle = GetNewRequestHandle();
- GetLoginsRequest* request = new GetLoginsRequest(consumer, handle);
- ScheduleTask(NewRunnableMethod(this,
- &PasswordStore::GetBlacklistLoginsImpl,
- request));
- return handle;
+PasswordStore::Handle PasswordStore::GetBlacklistLogins(
+ PasswordStoreConsumer* consumer) {
+ return Schedule(&PasswordStore::GetBlacklistLoginsImpl, consumer);
}
-void PasswordStore::NotifyConsumer(GetLoginsRequest* request,
- const vector<PasswordForm*>& forms) {
- scoped_ptr<GetLoginsRequest> request_ptr(request);
-
-#if !defined(OS_MACOSX)
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::DB));
-#endif
- request->message_loop->PostTask(FROM_HERE,
- NewRunnableMethod(this,
- &PasswordStore::NotifyConsumerImpl,
- request->consumer, request->handle, forms));
+void PasswordStore::ForwardLoginsResult(GetLoginsRequest* request) {
+ request->ForwardResult(GetLoginsRequest::TupleType(request->handle(),
+ request->value));
}
-void PasswordStore::NotifyConsumerImpl(PasswordStoreConsumer* consumer,
- int handle,
- const vector<PasswordForm*>& forms) {
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
- // Don't notify the consumer if the request was canceled.
- if (pending_requests_.find(handle) == pending_requests_.end()) {
- // |forms| is const so we iterate rather than use STLDeleteElements().
- for (size_t i = 0; i < forms.size(); ++i)
- delete forms[i];
- return;
+PasswordStore::GetLoginsRequest::~GetLoginsRequest() {
+ if (canceled()) {
+ STLDeleteElements(&value);
}
- pending_requests_.erase(handle);
-
- consumer->OnPasswordStoreRequestDone(handle, forms);
-}
-
-int PasswordStore::GetNewRequestHandle() {
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
- int handle = handle_++;
- pending_requests_.insert(handle);
- return handle;
-}
-
-void PasswordStore::CancelLoginsQuery(int handle) {
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
- pending_requests_.erase(handle);
-}
-
-PasswordStore::GetLoginsRequest::GetLoginsRequest(
- PasswordStoreConsumer* consumer, int handle)
- : consumer(consumer), handle(handle), message_loop(MessageLoop::current()) {
}

Powered by Google App Engine
This is Rietveld 408576698