File: sync_user_settings_impl.h

package info (click to toggle)
chromium 139.0.7258.127-1
  • links: PTS, VCS
  • area: main
  • in suites:
  • size: 6,122,068 kB
  • sloc: cpp: 35,100,771; ansic: 7,163,530; javascript: 4,103,002; python: 1,436,920; asm: 946,517; xml: 746,709; pascal: 187,653; perl: 88,691; sh: 88,436; objc: 79,953; sql: 51,488; cs: 44,583; fortran: 24,137; makefile: 22,147; tcl: 15,277; php: 13,980; yacc: 8,984; ruby: 7,485; awk: 3,720; lisp: 3,096; lex: 1,327; ada: 727; jsp: 228; sed: 36
file content (133 lines) | stat: -rw-r--r-- 5,805 bytes parent folder | download | duplicates (5)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
// 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;
  void SetExplicitPassphraseDecryptionNigoriKey(
      std::unique_ptr<Nigori> nigori) override;
  std::unique_ptr<Nigori> GetExplicitPassphraseDecryptionNigoriKey()
      const 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_