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