blob: 889aff9e308680ee757136022cf1bb49c38e00ad [file] [log] [blame]
// Copyright 2018 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_SYNC_USER_SETTINGS_IMPL_H_
#define COMPONENTS_SYNC_SERVICE_SYNC_USER_SETTINGS_IMPL_H_
#include <memory>
#include <string>
#include <vector>
#include "base/memory/raw_ptr.h"
#include "base/scoped_observation.h"
#include "build/build_config.h"
#include "components/signin/public/identity_manager/account_info.h"
#include "components/sync/base/data_type.h"
#include "components/sync/base/user_selectable_type.h"
#include "components/sync/service/sync_prefs.h"
#include "components/sync/service/sync_user_settings.h"
namespace syncer {
class SyncServiceCrypto;
class SyncUserSettingsImpl : public SyncUserSettings, public SyncPrefObserver {
public:
class Delegate {
public:
Delegate() = default;
virtual ~Delegate() = default;
virtual bool IsCustomPassphraseAllowed() const = 0;
virtual SyncPrefs::SyncAccountState GetSyncAccountStateForPrefs() const = 0;
virtual CoreAccountInfo GetSyncAccountInfoForPrefs() const = 0;
// Observer-like notifications.
virtual void OnSyncClientDisabledByPolicyChanged() = 0;
virtual void OnSelectedTypesChanged() = 0;
#if BUILDFLAG(IS_CHROMEOS)
virtual void OnSyncFeatureDisabledViaDashboardCleared() = 0;
#else // BUILDFLAG(IS_CHROMEOS)
virtual void OnInitialSyncFeatureSetupCompleted() = 0;
#endif // BUILDFLAG(IS_CHROMEOS)
};
// `delegate`, `crypto` and `prefs` must not be null and must outlive this
// object.
SyncUserSettingsImpl(Delegate* delegate,
SyncServiceCrypto* crypto,
SyncPrefs* prefs,
DataTypeSet registered_types);
~SyncUserSettingsImpl() override;
DataTypeSet GetPreferredDataTypes() const;
bool IsEncryptedDatatypePreferred() const;
// The encryption bootstrap token is used for explicit passphrase users
// (usually custom passphrase) and represents a user-entered passphrase.
std::string GetEncryptionBootstrapToken() const;
void SetEncryptionBootstrapToken(const std::string& token);
bool IsSyncClientDisabledByPolicy() const;
#if BUILDFLAG(IS_CHROMEOS)
void SetSyncFeatureDisabledViaDashboard();
#endif // BUILDFLAG(IS_CHROMEOS)
// SyncUserSettings implementation.
bool IsInitialSyncFeatureSetupComplete() const override;
#if !BUILDFLAG(IS_CHROMEOS)
void SetInitialSyncFeatureSetupComplete(
SyncFirstSetupCompleteSource source) override;
#endif // !BUILDFLAG(IS_CHROMEOS)
bool IsSyncEverythingEnabled() const override;
// TODO(b/321217859): On Android, temporarily remove kPasswords from the
// selected types while the local UPM migration is ongoing. This was
// previously implemented via GetPreconditionState() but that only affects
// the "active" state of the data type, not the "enabled" one.
UserSelectableTypeSet GetSelectedTypes() const override;
bool IsTypeManagedByPolicy(UserSelectableType type) const override;
bool IsTypeManagedByCustodian(UserSelectableType type) const override;
SyncUserSettings::UserSelectableTypePrefState GetTypePrefStateForAccount(
UserSelectableType type) const override;
void SetSelectedTypes(bool sync_everything,
UserSelectableTypeSet types) override;
void SetSelectedType(UserSelectableType type, bool is_type_on) override;
void ResetSelectedType(UserSelectableType type) override;
void KeepAccountSettingsPrefsOnlyForUsers(
const std::vector<GaiaId>& available_gaia_ids) override;
UserSelectableTypeSet GetRegisteredSelectableTypes() const override;
#if BUILDFLAG(IS_CHROMEOS)
bool IsSyncFeatureDisabledViaDashboard() const override;
void ClearSyncFeatureDisabledViaDashboard() override;
bool IsSyncAllOsTypesEnabled() const override;
UserSelectableOsTypeSet GetSelectedOsTypes() const override;
bool IsOsTypeManagedByPolicy(UserSelectableOsType type) const override;
void SetSelectedOsTypes(bool sync_all_os_types,
UserSelectableOsTypeSet types) override;
UserSelectableOsTypeSet GetRegisteredSelectableOsTypes() const override;
#endif // BUILDFLAG(IS_CHROMEOS)
bool IsCustomPassphraseAllowed() const override;
bool IsEncryptEverythingEnabled() const override;
DataTypeSet GetAllEncryptedDataTypes() const override;
bool IsPassphraseRequired() const override;
bool IsPassphraseRequiredForPreferredDataTypes() const override;
bool IsPassphrasePromptMutedForCurrentProductVersion() const override;
void MarkPassphrasePromptMutedForCurrentProductVersion() override;
bool IsTrustedVaultKeyRequired() const override;
bool IsTrustedVaultKeyRequiredForPreferredDataTypes() const override;
bool IsTrustedVaultRecoverabilityDegraded() const override;
bool IsUsingExplicitPassphrase() const override;
base::Time GetExplicitPassphraseTime() const override;
std::optional<PassphraseType> GetPassphraseType() const override;
void SetEncryptionPassphrase(const std::string& passphrase) override;
bool SetDecryptionPassphrase(const std::string& passphrase) override;
// SyncPrefObserver implementation.
void OnSyncManagedPrefChange(bool is_sync_managed) override;
void OnSelectedTypesPrefChange() override;
private:
const raw_ptr<Delegate> delegate_;
const raw_ptr<SyncServiceCrypto> crypto_;
const raw_ptr<SyncPrefs> prefs_;
const DataTypeSet registered_data_types_;
base::ScopedObservation<SyncPrefs, SyncPrefObserver> prefs_observation_{this};
};
} // namespace syncer
#endif // COMPONENTS_SYNC_SERVICE_SYNC_USER_SETTINGS_IMPL_H_