| Index: components/password_manager/core/browser/password_store.h
|
| diff --git a/components/password_manager/core/browser/password_store.h b/components/password_manager/core/browser/password_store.h
|
| index 8b7130c887fe944fa8e5065d72c84e8ac1e858c4..d6f7ca88dc58c6d744b78223524d550af22d635a 100644
|
| --- a/components/password_manager/core/browser/password_store.h
|
| +++ b/components/password_manager/core/browser/password_store.h
|
| @@ -5,15 +5,12 @@
|
| #ifndef COMPONENTS_PASSWORD_MANAGER_CORE_BROWSER_PASSWORD_STORE_H_
|
| #define COMPONENTS_PASSWORD_MANAGER_CORE_BROWSER_PASSWORD_STORE_H_
|
|
|
| -#include <vector>
|
| -
|
| #include "base/callback.h"
|
| #include "base/memory/ref_counted.h"
|
| #include "base/memory/scoped_ptr.h"
|
| #include "base/memory/scoped_vector.h"
|
| #include "base/observer_list_threadsafe.h"
|
| -#include "base/threading/thread.h"
|
| -#include "base/threading/thread_checker.h"
|
| +#include "base/single_thread_task_runner.h"
|
| #include "base/time/time.h"
|
| #include "components/password_manager/core/browser/password_store_change.h"
|
| #include "components/password_manager/core/browser/password_store_sync.h"
|
| @@ -49,46 +46,6 @@ class PasswordStore : protected PasswordStoreSync,
|
| // passwords, which requires prompting the user for permission.
|
| enum AuthorizationPromptPolicy { ALLOW_PROMPT, DISALLOW_PROMPT };
|
|
|
| - // PasswordForm vector elements are meant to be owned by the
|
| - // PasswordStoreConsumer. However, if the request is canceled after the
|
| - // allocation, then the request must take care of the deletion.
|
| - class GetLoginsRequest {
|
| - public:
|
| - explicit GetLoginsRequest(PasswordStoreConsumer* consumer);
|
| - virtual ~GetLoginsRequest();
|
| -
|
| - void set_ignore_logins_cutoff(base::Time cutoff) {
|
| - ignore_logins_cutoff_ = cutoff;
|
| - }
|
| -
|
| - // Removes any logins in the result list that were saved before the cutoff.
|
| - void ApplyIgnoreLoginsCutoff();
|
| -
|
| - // Forward the result to the consumer on the original message loop.
|
| - void ForwardResult();
|
| -
|
| - std::vector<autofill::PasswordForm*>* result() const {
|
| - return result_.get();
|
| - }
|
| -
|
| - private:
|
| - // See GetLogins(). Logins older than this will be removed from the reply.
|
| - base::Time ignore_logins_cutoff_;
|
| -
|
| - base::WeakPtr<PasswordStoreConsumer> consumer_weak_;
|
| -
|
| - // The result of the request. It is filled in on the PasswordStore's task
|
| - // thread and consumed on the UI thread.
|
| - // TODO(dubroy): Remove this, and instead pass the vector directly to the
|
| - // backend methods.
|
| - scoped_ptr<std::vector<autofill::PasswordForm*>> result_;
|
| -
|
| - base::ThreadChecker thread_checker_;
|
| - scoped_refptr<base::MessageLoopProxy> origin_loop_;
|
| -
|
| - DISALLOW_COPY_AND_ASSIGN(GetLoginsRequest);
|
| - };
|
| -
|
| // An interface used to notify clients (observers) of this object that data in
|
| // the password store has changed. Register the observer via
|
| // PasswordStore::AddObserver.
|
| @@ -174,6 +131,38 @@ class PasswordStore : protected PasswordStoreSync,
|
|
|
| typedef base::Callback<PasswordStoreChangeList(void)> ModificationTask;
|
|
|
| + class GetLoginsRequest {
|
| + public:
|
| + explicit GetLoginsRequest(PasswordStoreConsumer* consumer);
|
| + virtual ~GetLoginsRequest();
|
| +
|
| + void set_ignore_logins_cutoff(base::Time cutoff) {
|
| + ignore_logins_cutoff_ = cutoff;
|
| + }
|
| +
|
| + // Removes any logins in the result list that were saved before the cutoff.
|
| + void ApplyIgnoreLoginsCutoff();
|
| +
|
| + // Forward the result to the consumer on the original message loop.
|
| + void ForwardResult();
|
| +
|
| + ScopedVector<autofill::PasswordForm>* result() { return &result_; }
|
| +
|
| + private:
|
| + // See GetLogins(). Logins older than this will be removed from the reply.
|
| + base::Time ignore_logins_cutoff_;
|
| +
|
| + base::WeakPtr<PasswordStoreConsumer> consumer_weak_;
|
| +
|
| + // The result of the request. It is filled in on the PasswordStore's task
|
| + // thread and consumed on the UI thread.
|
| + ScopedVector<autofill::PasswordForm> result_;
|
| +
|
| + scoped_refptr<base::MessageLoopProxy> origin_loop_;
|
| +
|
| + DISALLOW_COPY_AND_ASSIGN(GetLoginsRequest);
|
| + };
|
| +
|
| ~PasswordStore() override;
|
|
|
| // Get the TaskRunner to use for PasswordStore background tasks.
|
| @@ -217,14 +206,15 @@ class PasswordStore : protected PasswordStoreSync,
|
| const ConsumerCallbackRunner& callback_runner) = 0;
|
|
|
| // Finds all non-blacklist PasswordForms, and notifies the consumer.
|
| - virtual void GetAutofillableLoginsImpl(GetLoginsRequest* request) = 0;
|
| + virtual void GetAutofillableLoginsImpl(
|
| + scoped_ptr<GetLoginsRequest> request) = 0;
|
|
|
| // Finds all blacklist PasswordForms, and notifies the consumer.
|
| - virtual void GetBlacklistLoginsImpl(GetLoginsRequest* request) = 0;
|
| + virtual void GetBlacklistLoginsImpl(scoped_ptr<GetLoginsRequest> request) = 0;
|
|
|
| // Dispatches the result to the PasswordStoreConsumer on the original caller's
|
| // thread so the callback can be executed there. This should be the UI thread.
|
| - static void ForwardLoginsResult(GetLoginsRequest* request);
|
| + static void ForwardLoginsResult(scoped_ptr<GetLoginsRequest> request);
|
|
|
| // Log UMA stats for number of bulk deletions.
|
| void LogStatsForBulkDeletion(int num_deletions);
|
| @@ -249,8 +239,8 @@ class PasswordStore : protected PasswordStoreSync,
|
| private:
|
| // Schedule the given |func| to be run in the PasswordStore's own thread with
|
| // responses delivered to |consumer| on the current thread.
|
| - template <typename BackendFunc>
|
| - void Schedule(BackendFunc func, PasswordStoreConsumer* consumer);
|
| + void Schedule(void (PasswordStore::*func)(scoped_ptr<GetLoginsRequest>),
|
| + PasswordStoreConsumer* consumer);
|
|
|
| // Wrapper method called on the destination thread (DB for non-mac) that
|
| // invokes |task| and then calls back into the source thread to notify
|
| @@ -268,12 +258,12 @@ class PasswordStore : protected PasswordStoreSync,
|
| void RemoveLoginsSyncedBetweenInternal(base::Time delete_begin,
|
| base::Time delete_end);
|
|
|
| - // Copies |matched_forms| into the request's result vector, then calls
|
| + // Moves |matched_forms| into the request's result vector, then calls
|
| // |ForwardLoginsResult|. Temporarily used as an adapter between the API of
|
| // |GetLoginsImpl| and |PasswordStoreConsumer|.
|
| // TODO(dubroy): Get rid of this.
|
| - static void CopyAndForwardLoginsResult(
|
| - PasswordStore::GetLoginsRequest* request,
|
| + static void MoveAndForwardLoginsResult(
|
| + scoped_ptr<PasswordStore::GetLoginsRequest> request,
|
| ScopedVector<autofill::PasswordForm> matched_forms);
|
|
|
| #if defined(PASSWORD_MANAGER_ENABLE_SYNC)
|
|
|