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 852a51e5eea80a9dddcde4cb1e73b82b075221f1..0cfa55a55dddf8d579e937c2aa50cd891d54a815 100644 |
--- a/components/password_manager/core/browser/password_store.h |
+++ b/components/password_manager/core/browser/password_store.h |
@@ -6,6 +6,7 @@ |
#define COMPONENTS_PASSWORD_MANAGER_CORE_BROWSER_PASSWORD_STORE_H_ |
#include "base/callback.h" |
+#include "base/gtest_prod_util.h" |
#include "base/memory/ref_counted.h" |
#include "base/memory/scoped_ptr.h" |
#include "base/memory/scoped_vector.h" |
@@ -181,16 +182,6 @@ class PasswordStore : protected PasswordStoreSync, |
virtual void ReportMetricsImpl(const std::string& sync_username, |
bool custom_passphrase_sync_enabled) = 0; |
- // 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. |
- PasswordStoreChangeList AddLoginImpl( |
- const autofill::PasswordForm& form) override = 0; |
- PasswordStoreChangeList UpdateLoginImpl( |
- const autofill::PasswordForm& form) override = 0; |
- PasswordStoreChangeList RemoveLoginImpl( |
- const autofill::PasswordForm& form) override = 0; |
- |
// Synchronous implementation to remove the given logins. |
virtual PasswordStoreChangeList RemoveLoginsCreatedBetweenImpl( |
base::Time delete_begin, |
@@ -211,6 +202,20 @@ class PasswordStore : protected PasswordStoreSync, |
AuthorizationPromptPolicy prompt_policy, |
scoped_ptr<GetLoginsRequest> request); |
+ // Synchronous implementation provided by subclasses to add the given login. |
+ virtual PasswordStoreChangeList AddLoginImpl( |
+ const autofill::PasswordForm& form) = 0; |
+ |
+ // Synchronous implementation provided by subclasses to update the given |
+ // login. |
+ virtual PasswordStoreChangeList UpdateLoginImpl( |
+ const autofill::PasswordForm& form) = 0; |
+ |
+ // Synchronous implementation provided by subclasses to remove the given |
+ // login. |
+ virtual PasswordStoreChangeList RemoveLoginImpl( |
+ const autofill::PasswordForm& form) = 0; |
+ |
// Finds and returns all PasswordForms with the same signon_realm as |form|, |
// or with a signon_realm that is a PSL-match to that of |form|. |
virtual ScopedVector<autofill::PasswordForm> FillMatchingLogins( |
@@ -232,6 +237,13 @@ class PasswordStore : protected PasswordStoreSync, |
void LogStatsForBulkDeletionDuringRollback(int num_deletions); |
// PasswordStoreSync: |
+ PasswordStoreChangeList AddLoginSync( |
+ const autofill::PasswordForm& form) override; |
+ PasswordStoreChangeList UpdateLoginSync( |
+ const autofill::PasswordForm& form) override; |
+ PasswordStoreChangeList RemoveLoginSync( |
+ const autofill::PasswordForm& form) override; |
+ |
// Called by WrapModificationTask() once the underlying data-modifying |
// operation has been performed. Notifies observers that password store data |
// may have been changed. |
@@ -245,6 +257,9 @@ class PasswordStore : protected PasswordStoreSync, |
scoped_refptr<base::SingleThreadTaskRunner> db_thread_runner_; |
private: |
+ FRIEND_TEST_ALL_PREFIXES(PasswordStoreTest, |
+ UpdatePasswordsStoredForAffiliatedWebsites); |
+ |
// Schedule the given |func| to be run in the PasswordStore's own thread with |
// responses delivered to |consumer| on the current thread. |
void Schedule(void (PasswordStore::*func)(scoped_ptr<GetLoginsRequest>), |
@@ -286,6 +301,34 @@ class PasswordStore : protected PasswordStoreSync, |
scoped_ptr<GetLoginsRequest> request, |
const std::vector<std::string>& additional_android_realms); |
+ // Retrieves the currently stored form, if any, with the same primary key as |
+ // |form|, that is, with the same signon_realm, origin, username_element, |
+ // username_value and password_element attributes. |
+ scoped_ptr<autofill::PasswordForm> GetLoginImpl( |
+ const autofill::PasswordForm& primary_key); |
+ |
+ // Called when a password is added or updated for an Android application, and |
+ // triggers finding web sites affiliated with the Android application and |
+ // propagating the new password to credentials for those web sites, if any. |
+ void FindAndUpdateAffiliatedWebLogins( |
+ const autofill::PasswordForm& added_or_updated_android_form); |
+ |
+ // Posts FindAndUpdateAffiliatedWebLogins() to the main thread. |
+ void ScheduleFindAndUpdateAffiliatedWebLogins( |
+ const autofill::PasswordForm& added_or_updated_android_form); |
+ |
+ // Called when a password is added or updated for an Android application, and |
+ // propagates these changes to credentials stored for |affiliated_web_realms| |
+ // under the same username, if there are any. |
+ void UpdateAffiliatedWebLoginsImpl( |
+ const autofill::PasswordForm& updated_android_form, |
+ const std::vector<std::string>& affiliated_web_realms); |
+ |
+ // Schedules UpdateAffiliatedWebLoginsImpl() to run on the DB thread. |
+ void ScheduleUpdateAffiliatedWebLoginsImpl( |
+ const autofill::PasswordForm& updated_android_form, |
+ const std::vector<std::string>& affiliated_web_realms); |
+ |
// Creates PasswordSyncableService instance on the background thread. |
void InitSyncableService( |
const syncer::SyncableService::StartSyncFlare& flare); |