| 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 d2448d0cb34cf83ca372603d845ff8afd45c3c61..6bb063dff17a2a65067d614c645ea6a9e88c2a89 100644
|
| --- a/components/password_manager/core/browser/password_store.h
|
| +++ b/components/password_manager/core/browser/password_store.h
|
| @@ -16,6 +16,7 @@
|
| #include "base/threading/thread_checker.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"
|
| #include "sync/api/syncable_service.h"
|
|
|
| class Task;
|
| @@ -56,7 +57,10 @@ class PasswordSyncableService;
|
| // Interface for storing form passwords in a platform-specific secure way.
|
| // The login request/manipulation API is not threadsafe and must be used
|
| // from the UI thread.
|
| -class PasswordStore : public base::RefCountedThreadSafe<PasswordStore> {
|
| +// PasswordStoreSync is a hidden base class because only PasswordSyncableService
|
| +// needs to access these methods.
|
| +class PasswordStore : protected PasswordStoreSync,
|
| + public base::RefCountedThreadSafe<PasswordStore> {
|
| public:
|
| // Whether or not it's acceptable for Chrome to request access to locked
|
| // passwords, which requires prompting the user for permission.
|
| @@ -169,6 +173,9 @@ class PasswordStore : public base::RefCountedThreadSafe<PasswordStore> {
|
| // Removes |observer| from the observer list.
|
| void RemoveObserver(Observer* observer);
|
|
|
| + // Schedules the given |task| to be run on the PasswordStore's TaskRunner.
|
| + bool ScheduleTask(const base::Closure& task);
|
| +
|
| // Before you destruct the store, call Shutdown to indicate that the store
|
| // needs to shut itself down.
|
| virtual void Shutdown();
|
| @@ -179,47 +186,31 @@ class PasswordStore : public base::RefCountedThreadSafe<PasswordStore> {
|
|
|
| protected:
|
| friend class base::RefCountedThreadSafe<PasswordStore>;
|
| - // Sync's interaction with password store needs to be synchronous.
|
| - // Since the synchronous methods are private these classes are made
|
| - // as friends. This can be fixed by moving the private impl to a new
|
| - // class. See http://crbug.com/307750
|
| - friend class browser_sync::PasswordChangeProcessor;
|
| - friend class browser_sync::PasswordDataTypeController;
|
| - friend class browser_sync::PasswordModelAssociator;
|
| - friend class browser_sync::PasswordModelWorker;
|
| - friend class PasswordSyncableService;
|
| - friend void passwords_helper::AddLogin(PasswordStore*,
|
| - const autofill::PasswordForm&);
|
| - friend void passwords_helper::RemoveLogin(PasswordStore*,
|
| - const autofill::PasswordForm&);
|
| - friend void passwords_helper::UpdateLogin(PasswordStore*,
|
| - const autofill::PasswordForm&);
|
| FRIEND_TEST_ALL_PREFIXES(PasswordStoreTest, IgnoreOldWwwGoogleLogins);
|
|
|
| typedef base::Callback<PasswordStoreChangeList(void)> ModificationTask;
|
|
|
| virtual ~PasswordStore();
|
|
|
| - // Schedules the given |task| to be run on the PasswordStore's TaskRunner.
|
| - bool ScheduleTask(const base::Closure& task);
|
| -
|
| // Get the TaskRunner to use for PasswordStore background tasks.
|
| // By default, a SingleThreadTaskRunner on the DB thread is used, but
|
| // subclasses can override.
|
| virtual scoped_refptr<base::SingleThreadTaskRunner> GetBackgroundTaskRunner();
|
|
|
| - // These will be run in PasswordStore's own thread.
|
| + // Methods below will be run in PasswordStore's own thread.
|
| // Synchronous implementation that reports usage metrics.
|
| virtual void ReportMetricsImpl() = 0;
|
| - // Synchronous implementation to add the given login.
|
| +
|
| + // Bring PasswordStoreSync methods to the scope of PasswordStore. Otherwise,
|
| + // base::Bind can't be used with them because it fails to cast PasswordStore
|
| + // to PasswordStoreSync.
|
| virtual PasswordStoreChangeList AddLoginImpl(
|
| const autofill::PasswordForm& form) = 0;
|
| - // Synchronous implementation to update the given login.
|
| virtual PasswordStoreChangeList UpdateLoginImpl(
|
| const autofill::PasswordForm& form) = 0;
|
| - // Synchronous implementation to remove the given login.
|
| virtual PasswordStoreChangeList RemoveLoginImpl(
|
| const autofill::PasswordForm& form) = 0;
|
| +
|
| // Synchronous implementation to remove the given logins.
|
| virtual PasswordStoreChangeList RemoveLoginsCreatedBetweenImpl(
|
| const base::Time& delete_begin, const base::Time& delete_end) = 0;
|
| @@ -241,14 +232,6 @@ class PasswordStore : public base::RefCountedThreadSafe<PasswordStore> {
|
| // Finds all blacklist PasswordForms, and notifies the consumer.
|
| virtual void GetBlacklistLoginsImpl(GetLoginsRequest* request) = 0;
|
|
|
| - // Finds all non-blacklist PasswordForms, and fills the vector.
|
| - virtual bool FillAutofillableLogins(
|
| - std::vector<autofill::PasswordForm*>* forms) = 0;
|
| -
|
| - // Finds all blacklist PasswordForms, and fills the vector.
|
| - virtual bool FillBlacklistLogins(
|
| - std::vector<autofill::PasswordForm*>* forms) = 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.
|
| virtual void ForwardLoginsResult(GetLoginsRequest* request);
|
| @@ -278,10 +261,12 @@ class PasswordStore : public base::RefCountedThreadSafe<PasswordStore> {
|
| // method will actually modify the password store data.
|
| virtual void WrapModificationTask(ModificationTask task);
|
|
|
| + // PasswordStoreSync:
|
| // Called by WrapModificationTask() once the underlying data-modifying
|
| // operation has been performed. Notifies observers that password store data
|
| // may have been changed.
|
| - void NotifyLoginsChanged(const PasswordStoreChangeList& changes);
|
| + virtual void NotifyLoginsChanged(
|
| + const PasswordStoreChangeList& changes) OVERRIDE;
|
|
|
| // Copies |matched_forms| into the request's result vector, then calls
|
| // |ForwardLoginsResult|. Temporarily used as an adapter between the API of
|
|
|