| OLD | NEW |
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #ifndef CHROME_BROWSER_PASSWORD_MANAGER_PASSWORD_STORE_PROXY_MAC_H_ | 5 #ifndef CHROME_BROWSER_PASSWORD_MANAGER_PASSWORD_STORE_PROXY_MAC_H_ |
| 6 #define CHROME_BROWSER_PASSWORD_MANAGER_PASSWORD_STORE_PROXY_MAC_H_ | 6 #define CHROME_BROWSER_PASSWORD_MANAGER_PASSWORD_STORE_PROXY_MAC_H_ |
| 7 | 7 |
| 8 #include <string> | 8 #include <memory> |
| 9 #include <vector> | |
| 10 | 9 |
| 11 #include "base/macros.h" | 10 #include "base/macros.h" |
| 12 #include "base/single_thread_task_runner.h" | |
| 13 #include "base/threading/thread.h" | 11 #include "base/threading/thread.h" |
| 14 #include "components/password_manager/core/browser/keychain_migration_status_mac
.h" | 12 #include "components/password_manager/core/browser/keychain_migration_status_mac
.h" |
| 15 #include "components/password_manager/core/browser/password_store.h" | 13 #include "components/password_manager/core/browser/password_store_default.h" |
| 16 #include "components/password_manager/core/common/password_manager_pref_names.h" | |
| 17 #include "components/prefs/pref_member.h" | 14 #include "components/prefs/pref_member.h" |
| 18 | 15 |
| 19 namespace crypto { | |
| 20 class AppleKeychain; | |
| 21 } | |
| 22 | |
| 23 namespace password_manager { | 16 namespace password_manager { |
| 24 class LoginDatabase; | 17 class LoginDatabase; |
| 25 } | 18 } |
| 26 | 19 |
| 27 class SimplePasswordStoreMac; | 20 // Password store for Mac. It creates a dedicated background thread |
| 28 | 21 class PasswordStoreProxyMac : public password_manager::PasswordStoreDefault { |
| 29 // The class is a proxy for either PasswordStoreMac or SimplePasswordStoreMac. | |
| 30 // It is responsible for performing migration from PasswordStoreMac to | |
| 31 // SimplePasswordStoreMac and instantiating a correct backend according to the | |
| 32 // user's state. | |
| 33 class PasswordStoreProxyMac : public password_manager::PasswordStore { | |
| 34 public: | 22 public: |
| 35 PasswordStoreProxyMac( | 23 PasswordStoreProxyMac( |
| 36 scoped_refptr<base::SingleThreadTaskRunner> main_thread_runner, | 24 scoped_refptr<base::SingleThreadTaskRunner> main_thread_runner, |
| 37 std::unique_ptr<crypto::AppleKeychain> keychain, | |
| 38 std::unique_ptr<password_manager::LoginDatabase> login_db, | 25 std::unique_ptr<password_manager::LoginDatabase> login_db, |
| 39 PrefService* prefs); | 26 PrefService* prefs); |
| 40 | 27 |
| 28 // PasswordStore: |
| 41 bool Init(const syncer::SyncableService::StartSyncFlare& flare, | 29 bool Init(const syncer::SyncableService::StartSyncFlare& flare, |
| 42 PrefService* prefs) override; | 30 PrefService* prefs) override; |
| 43 void ShutdownOnUIThread() override; | 31 void ShutdownOnUIThread() override; |
| 44 scoped_refptr<base::SingleThreadTaskRunner> GetBackgroundTaskRunner() | 32 scoped_refptr<base::SingleThreadTaskRunner> GetBackgroundTaskRunner() |
| 45 override; | 33 override; |
| 46 | 34 |
| 47 #if defined(UNIT_TEST) | 35 #if defined(UNIT_TEST) |
| 48 password_manager::LoginDatabase* login_metadata_db() { | 36 password_manager::LoginDatabase* login_metadata_db() { return login_db(); } |
| 49 return login_metadata_db_.get(); | |
| 50 } | |
| 51 | |
| 52 crypto::AppleKeychain* keychain() { | |
| 53 return keychain_.get(); | |
| 54 } | |
| 55 #endif | 37 #endif |
| 56 | 38 |
| 57 private: | 39 private: |
| 58 ~PasswordStoreProxyMac() override; | 40 ~PasswordStoreProxyMac() override; |
| 59 | 41 |
| 60 password_manager::PasswordStore* GetBackend() const; | |
| 61 | |
| 62 // Opens LoginDatabase on the background |thread_|. | |
| 63 void InitOnBackgroundThread(password_manager::MigrationStatus status); | 42 void InitOnBackgroundThread(password_manager::MigrationStatus status); |
| 64 | 43 |
| 65 // Writes status to the prefs. | 44 // Writes status to the prefs. |
| 66 void UpdateStatusPref(password_manager::MigrationStatus status); | 45 void UpdateStatusPref(password_manager::MigrationStatus status); |
| 67 | 46 |
| 68 // Executes |pending_ui_tasks_| on the UI thread. | |
| 69 void FlushPendingTasks(); | |
| 70 | |
| 71 // PasswordStore: | |
| 72 void ReportMetricsImpl(const std::string& sync_username, | |
| 73 bool custom_passphrase_sync_enabled) override; | |
| 74 password_manager::PasswordStoreChangeList AddLoginImpl( | |
| 75 const autofill::PasswordForm& form) override; | |
| 76 password_manager::PasswordStoreChangeList UpdateLoginImpl( | |
| 77 const autofill::PasswordForm& form) override; | |
| 78 password_manager::PasswordStoreChangeList RemoveLoginImpl( | |
| 79 const autofill::PasswordForm& form) override; | |
| 80 password_manager::PasswordStoreChangeList RemoveLoginsByURLAndTimeImpl( | |
| 81 const base::Callback<bool(const GURL&)>& url_filter, | |
| 82 base::Time delete_begin, | |
| 83 base::Time delete_end) override; | |
| 84 password_manager::PasswordStoreChangeList RemoveLoginsCreatedBetweenImpl( | |
| 85 base::Time delete_begin, | |
| 86 base::Time delete_end) override; | |
| 87 password_manager::PasswordStoreChangeList RemoveLoginsSyncedBetweenImpl( | |
| 88 base::Time delete_begin, | |
| 89 base::Time delete_end) override; | |
| 90 password_manager::PasswordStoreChangeList DisableAutoSignInForOriginsImpl( | |
| 91 const base::Callback<bool(const GURL&)>& origin_filter) override; | |
| 92 bool RemoveStatisticsByOriginAndTimeImpl( | |
| 93 const base::Callback<bool(const GURL&)>& origin_filter, | |
| 94 base::Time delete_begin, | |
| 95 base::Time delete_end) override; | |
| 96 std::vector<std::unique_ptr<autofill::PasswordForm>> FillMatchingLogins( | |
| 97 const FormDigest& form) override; | |
| 98 std::vector<std::unique_ptr<autofill::PasswordForm>> | |
| 99 FillLoginsForSameOrganizationName(const std::string& signon_realm) override; | |
| 100 bool FillAutofillableLogins( | |
| 101 std::vector<std::unique_ptr<autofill::PasswordForm>>* forms) override; | |
| 102 bool FillBlacklistLogins( | |
| 103 std::vector<std::unique_ptr<autofill::PasswordForm>>* forms) override; | |
| 104 void AddSiteStatsImpl( | |
| 105 const password_manager::InteractionsStats& stats) override; | |
| 106 void RemoveSiteStatsImpl(const GURL& origin_domain) override; | |
| 107 std::vector<password_manager::InteractionsStats> GetAllSiteStatsImpl() | |
| 108 override; | |
| 109 std::vector<password_manager::InteractionsStats> GetSiteStatsImpl( | |
| 110 const GURL& origin_domain) override; | |
| 111 | |
| 112 scoped_refptr<SimplePasswordStoreMac> password_store_simple_; | |
| 113 | |
| 114 // The login metadata SQL database. If opening the DB on |thread_| fails, | |
| 115 // |login_metadata_db_| will be reset to NULL for the lifetime of |this|. | |
| 116 // The ownership may be transferred to |password_store_simple_|. | |
| 117 std::unique_ptr<password_manager::LoginDatabase> login_metadata_db_; | |
| 118 | |
| 119 // Keychain wrapper. | |
| 120 const std::unique_ptr<crypto::AppleKeychain> keychain_; | |
| 121 | |
| 122 // Thread that the synchronous methods are run on. | 47 // Thread that the synchronous methods are run on. |
| 123 std::unique_ptr<base::Thread> thread_; | 48 std::unique_ptr<base::Thread> thread_; |
| 124 | 49 |
| 125 // Current migration status for the profile. | 50 // Current migration status for the profile. |
| 126 IntegerPrefMember migration_status_; | 51 IntegerPrefMember migration_status_; |
| 127 | 52 |
| 128 // List of tasks filled by InitOnBackgroundThread. They can't be just posted | |
| 129 // to the UI thread because the message loop can shut down before executing | |
| 130 // them. If this is the case then Shutdown() flushes the tasks after stopping | |
| 131 // the background thread. | |
| 132 // After InitOnBackgroundThread is run once, the queue may not be modified on | |
| 133 // the background thread any more. | |
| 134 std::vector<base::Closure> pending_ui_tasks_; | |
| 135 | |
| 136 DISALLOW_COPY_AND_ASSIGN(PasswordStoreProxyMac); | 53 DISALLOW_COPY_AND_ASSIGN(PasswordStoreProxyMac); |
| 137 }; | 54 }; |
| 138 | 55 |
| 139 #endif // CHROME_BROWSER_PASSWORD_MANAGER_PASSWORD_STORE_PROXY_MAC_H_ | 56 #endif // CHROME_BROWSER_PASSWORD_MANAGER_PASSWORD_STORE_PROXY_MAC_H_ |
| OLD | NEW |