| // Copyright 2024 The Chromium Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef COMPONENTS_SYNC_SERVICE_ACCOUNT_PREF_UTILS_H_ |
| #define COMPONENTS_SYNC_SERVICE_ACCOUNT_PREF_UTILS_H_ |
| |
| #include <vector> |
| |
| #include "base/values.h" |
| |
| namespace signin { |
| class GaiaIdHash; |
| } // namespace signin |
| |
| class PrefService; |
| |
| namespace syncer { |
| |
| // Helpers to ease the use of account-keyed prefs. These prefs are structured as |
| // follows. Note that the leaf values may be any `base::Value` type, and special |
| // helpers exist for dictionaries (pref_path2 in the example): |
| // |
| // { |
| // "pref_path1": { |
| // "base64_gaia_id_hash1": "value1", |
| // "base64_gaia_id_hash2": "value2" |
| // }, |
| // "pref_path2": { |
| // "base64_gaia_id_hash1": { |
| // "key1": "value1", |
| // "key2": 123 |
| // }, |
| // "base64_gaia_id_hash2": { |
| // "key1": "value2", |
| // "key2": 456 |
| // } |
| // } |
| // } |
| |
| // In the account-keyed pref at `pref_path` (which must be a valid registered |
| // pref), looks up the entry corresponding to `gaia_id_hash` and returns the |
| // corresponding value. If the `gaia_id_hash` isn't found, returns null. |
| const base::Value* GetAccountKeyedPrefValue( |
| const PrefService* pref_service, |
| const char* pref_path, |
| const signin::GaiaIdHash& gaia_id_hash); |
| |
| // In the account-keyed pref at `pref_path` (which must be a valid registered |
| // pref), sets the value for the given `gaia_id_hash` to `value`. |
| void SetAccountKeyedPrefValue(PrefService* pref_service, |
| const char* pref_path, |
| const signin::GaiaIdHash& gaia_id_hash, |
| base::Value value); |
| |
| // In the account-keyed pref at `pref_path` (which must be a valid registered |
| // pref), clears any value for the given `gaia_id_hash`. |
| void ClearAccountKeyedPrefValue(PrefService* pref_service, |
| const char* pref_path, |
| const signin::GaiaIdHash& gaia_id_hash); |
| |
| // In the account-keyed dictionary pref at `pref_path` (which must be a valid |
| // registered pref), looks up the entry corresponding to `gaia_id_hash`, and |
| // within that, further looks up the `key` and returns the corresponding value. |
| // If either the `gaia_id_hash` or the `key` aren't found, returns null. |
| const base::Value* GetAccountKeyedPrefDictEntry( |
| const PrefService* pref_service, |
| const char* pref_path, |
| const signin::GaiaIdHash& gaia_id_hash, |
| const char* key); |
| |
| // In the account-keyed dictionary pref at `pref_path` (which must be a valid |
| // registered pref), sets the value under `key` for the given `gaia_id_hash` to |
| // `value`, creating the entry if required. |
| void SetAccountKeyedPrefDictEntry(PrefService* pref_service, |
| const char* pref_path, |
| const signin::GaiaIdHash& gaia_id_hash, |
| const char* key, |
| base::Value value); |
| |
| // For the account-keyed pref at `pref_path` (which must be a valid registered |
| // pref), drops all entries for accounts that are *not* listed in |
| // `available_gaia_ids`. |
| void KeepAccountKeyedPrefValuesOnlyForUsers( |
| PrefService* pref_service, |
| const char* pref_path, |
| const std::vector<signin::GaiaIdHash>& available_gaia_ids); |
| |
| } // namespace syncer |
| |
| #endif // COMPONENTS_SYNC_SERVICE_ACCOUNT_PREF_UTILS_H_ |