| // Copyright 2021 The Chromium Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef CHROME_BROWSER_LACROS_ACCOUNT_MANAGER_ACCOUNT_CACHE_H_ |
| #define CHROME_BROWSER_LACROS_ACCOUNT_MANAGER_ACCOUNT_CACHE_H_ |
| |
| #include <string> |
| #include <vector> |
| |
| #include "base/containers/flat_map.h" |
| #include "base/containers/flat_set.h" |
| #include "base/memory/raw_ptr.h" |
| |
| class PrefService; |
| class PrefRegistrySimple; |
| |
| namespace account_manager { |
| struct Account; |
| } |
| |
| // Data structure holding in memory a map of all Lacros accounts keyed by Gaia |
| // id. Also maintains a snapshot of one of the previous cache states. Gaia ids |
| // from this snapshot are persisted in local state preferences and restored on |
| // startup. |
| class AccountCache { |
| public: |
| using AccountByGaiaIdMap = |
| base::flat_map<std::string, account_manager::Account>; |
| using AccountIdSet = base::flat_set<std::string>; |
| |
| explicit AccountCache(PrefService* local_state); |
| |
| AccountCache(const AccountCache&) = delete; |
| AccountCache& operator=(const AccountCache&) = delete; |
| |
| ~AccountCache(); |
| |
| // Registers account cache related preferences in local state. |
| static void RegisterLocalStatePrefs(PrefRegistrySimple* registry); |
| |
| // Rewrites the `accounts_` map with Gaia accounts found in `system_accounts`. |
| // Does not modify the snapshot. |
| void UpdateAccounts( |
| const std::vector<account_manager::Account>& system_accounts); |
| |
| // Saves `accounts_` in `snapshot_` and persists the accounts Gaia ids in |
| // local state prefs. |
| // Returns the list of Gaia ids saved previously in local state prefs. |
| // Must be called only once, before the first `UpdateSnapshot()` call. |
| AccountIdSet CreateSnapshot(); |
| |
| // Similarly to `CreateSnapshot()`, saves `accounts_` in `snapshot_` and |
| // persists the accounts Gaia ids in local state prefs. |
| // Returns previously stored snapshot. |
| // `CreateSnapshot()` must have been called before this method. |
| AccountByGaiaIdMap UpdateSnapshot(); |
| |
| // Returns an Account with `gaia_id` if found in the `accounts_` map or |
| // nullptr if not found. |
| const account_manager::Account* FindAccountByGaiaId( |
| const std::string& gaia_id) const; |
| |
| // Returns a deep copy of the `accounts_` map. |
| AccountByGaiaIdMap GetAccountsCopy() const; |
| |
| private: |
| const raw_ptr<PrefService> local_state_; |
| |
| bool snapshot_created_ = false; |
| |
| // Map of account_manager::Account keyed by Gaia id as provided by the last |
| // `UpdateAccounts()` call. Contains only Gaia accounts. |
| AccountByGaiaIdMap accounts_; |
| // The state of the `accounts_` map at the moment `CreateSnapshot()` or |
| // `UpdateSnapshot()` was called for the last time. |
| AccountByGaiaIdMap snapshot_; |
| }; |
| |
| #endif // CHROME_BROWSER_LACROS_ACCOUNT_MANAGER_ACCOUNT_CACHE_H_ |