#ifndef COMPONENTS_SYNC_BASE_SYNC_PREFS_H_
#define COMPONENTS_SYNC_BASE_SYNC_PREFS_H_
#include <stdint.h>
#include <memory>
#include <string>
#include "base/compiler_specific.h"
#include "base/memory/raw_ptr.h"
#include "base/observer_list.h"
#include "base/sequence_checker.h"
#include "build/build_config.h"
#include "build/chromeos_buildflags.h"
#include "components/prefs/pref_member.h"
#include "components/sync/base/user_selectable_type.h"
class PrefRegistrySimple;
class PrefService;
namespace syncer {
class SyncPrefObserver {
public:
virtual void OnSyncManagedPrefChange(bool is_sync_managed) = 0;
virtual void OnFirstSetupCompletePrefChange(bool is_first_setup_complete) = 0;
virtual void OnPreferredDataTypesPrefChange() = 0;
protected:
virtual ~SyncPrefObserver();
};
class SyncPrefs {
public:
explicit SyncPrefs(PrefService* pref_service);
SyncPrefs(const SyncPrefs&) = delete;
SyncPrefs& operator=(const SyncPrefs&) = delete;
~SyncPrefs();
static void RegisterProfilePrefs(PrefRegistrySimple* registry);
void AddSyncPrefObserver(SyncPrefObserver* sync_pref_observer);
void RemoveSyncPrefObserver(SyncPrefObserver* sync_pref_observer);
bool IsFirstSetupComplete() const;
void SetFirstSetupComplete();
void ClearFirstSetupComplete();
bool IsSyncRequested() const;
void SetSyncRequested(bool is_requested);
bool IsSyncRequestedSetExplicitly() const;
bool HasKeepEverythingSynced() const;
UserSelectableTypeSet GetSelectedTypes() const;
bool IsTypeManagedByPolicy(UserSelectableType type) const;
void SetSelectedTypes(bool keep_everything_synced,
UserSelectableTypeSet registered_types,
UserSelectableTypeSet selected_types);
#if BUILDFLAG(IS_CHROMEOS_ASH)
bool IsSyncAllOsTypesEnabled() const;
UserSelectableOsTypeSet GetSelectedOsTypes() const;
bool IsOsTypeManagedByPolicy(UserSelectableOsType type) const;
void SetSelectedOsTypes(bool sync_all_os_types,
UserSelectableOsTypeSet registered_types,
UserSelectableOsTypeSet selected_types);
static const char* GetPrefNameForOsType(UserSelectableOsType type);
#endif
#if BUILDFLAG(IS_CHROMEOS_LACROS)
bool IsAppsSyncEnabledByOs() const;
void SetAppsSyncEnabledByOs(bool apps_sync_enabled);
#endif
bool IsSyncClientDisabledByPolicy() const;
static const char* GetPrefNameForType(UserSelectableType type);
bool IsLocalSyncEnabled() const;
std::string GetEncryptionBootstrapToken() const;
void SetEncryptionBootstrapToken(const std::string& token);
void ClearEncryptionBootstrapToken();
int GetPassphrasePromptMutedProductVersion() const;
void SetPassphrasePromptMutedProductVersion(int major_version);
void ClearPassphrasePromptMutedProductVersion();
private:
static void RegisterTypeSelectedPref(PrefRegistrySimple* prefs,
UserSelectableType type);
void OnSyncManagedPrefChanged();
void OnFirstSetupCompletePrefChange();
const raw_ptr<PrefService> pref_service_;
base::ObserverList<SyncPrefObserver>::Unchecked sync_pref_observers_;
BooleanPrefMember pref_sync_managed_;
BooleanPrefMember pref_first_setup_complete_;
bool local_sync_enabled_;
SEQUENCE_CHECKER(sequence_checker_);
};
#if BUILDFLAG(IS_ANDROID) || BUILDFLAG(IS_IOS)
void MigrateSyncRequestedPrefPostMice(PrefService* pref_service);
#endif
}
#endif