| 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()) {
|
| }
|
|
|