OLD | NEW |
| (Empty) |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | |
2 // Use of this source code is governed by a BSD-style license that can be | |
3 // found in the LICENSE file. | |
4 | |
5 #ifndef COMPONENTS_SYNC_DRIVER_SYNC_PREFS_H_ | |
6 #define COMPONENTS_SYNC_DRIVER_SYNC_PREFS_H_ | |
7 | |
8 #include <stdint.h> | |
9 | |
10 #include <map> | |
11 #include <memory> | |
12 #include <string> | |
13 | |
14 #include "base/compiler_specific.h" | |
15 #include "base/macros.h" | |
16 #include "base/memory/weak_ptr.h" | |
17 #include "base/observer_list.h" | |
18 #include "base/threading/non_thread_safe.h" | |
19 #include "base/time/time.h" | |
20 #include "build/build_config.h" | |
21 #include "components/prefs/pref_member.h" | |
22 #include "components/sync/base/model_type.h" | |
23 #include "components/sync/core/sync_encryption_handler.h" | |
24 | |
25 class PrefService; | |
26 class ProfileIOData; | |
27 | |
28 namespace user_prefs { | |
29 class PrefRegistrySyncable; | |
30 } | |
31 | |
32 namespace sync_driver { | |
33 | |
34 class SyncPrefObserver { | |
35 public: | |
36 // Called whenever the pref that controls whether sync is managed | |
37 // changes. | |
38 virtual void OnSyncManagedPrefChange(bool is_sync_managed) = 0; | |
39 | |
40 protected: | |
41 virtual ~SyncPrefObserver(); | |
42 }; | |
43 | |
44 // SyncPrefs is a helper class that manages getting, setting, and | |
45 // persisting global sync preferences. It is not thread-safe, and | |
46 // lives on the UI thread. | |
47 // | |
48 // TODO(akalin): Some classes still read the prefs directly. Consider | |
49 // passing down a pointer to SyncPrefs to them. A list of files: | |
50 // | |
51 // profile_sync_service_startup_unittest.cc | |
52 // profile_sync_service.cc | |
53 // sync_setup_flow.cc | |
54 // sync_setup_wizard.cc | |
55 // sync_setup_wizard_unittest.cc | |
56 // two_client_preferences_sync_test.cc | |
57 class SyncPrefs : NON_EXPORTED_BASE(public base::NonThreadSafe), | |
58 public base::SupportsWeakPtr<SyncPrefs> { | |
59 public: | |
60 // |pref_service| may not be NULL. | |
61 // Does not take ownership of |pref_service|. | |
62 explicit SyncPrefs(PrefService* pref_service); | |
63 | |
64 // For testing. | |
65 SyncPrefs(); | |
66 | |
67 virtual ~SyncPrefs(); | |
68 | |
69 static void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry); | |
70 | |
71 void AddSyncPrefObserver(SyncPrefObserver* sync_pref_observer); | |
72 void RemoveSyncPrefObserver(SyncPrefObserver* sync_pref_observer); | |
73 | |
74 // Clears important sync preferences. | |
75 void ClearPreferences(); | |
76 | |
77 // Getters and setters for global sync prefs. | |
78 | |
79 bool IsFirstSetupComplete() const; | |
80 void SetFirstSetupComplete(); | |
81 | |
82 bool SyncHasAuthError() const; | |
83 void SetSyncAuthError(bool error); | |
84 | |
85 bool IsSyncRequested() const; | |
86 void SetSyncRequested(bool is_requested); | |
87 | |
88 base::Time GetLastSyncedTime() const; | |
89 void SetLastSyncedTime(base::Time time); | |
90 | |
91 base::Time GetLastPollTime() const; | |
92 void SetLastPollTime(base::Time time); | |
93 | |
94 bool HasKeepEverythingSynced() const; | |
95 void SetKeepEverythingSynced(bool keep_everything_synced); | |
96 | |
97 // The returned set is guaranteed to be a subset of | |
98 // |registered_types|. Returns |registered_types| directly if | |
99 // HasKeepEverythingSynced() is true. | |
100 syncer::ModelTypeSet GetPreferredDataTypes( | |
101 syncer::ModelTypeSet registered_types) const; | |
102 // |preferred_types| should be a subset of |registered_types|. All | |
103 // types in |preferred_types| are marked preferred, and all types in | |
104 // |registered_types| \ |preferred_types| are marked not preferred. | |
105 // Changes are still made to the prefs even if | |
106 // HasKeepEverythingSynced() is true, but won't be visible until | |
107 // SetKeepEverythingSynced(false) is called. | |
108 void SetPreferredDataTypes(syncer::ModelTypeSet registered_types, | |
109 syncer::ModelTypeSet preferred_types); | |
110 | |
111 // This pref is set outside of sync. | |
112 bool IsManaged() const; | |
113 | |
114 // Use this encryption bootstrap token if we're using an explicit passphrase. | |
115 std::string GetEncryptionBootstrapToken() const; | |
116 void SetEncryptionBootstrapToken(const std::string& token); | |
117 | |
118 // Use this keystore bootstrap token if we're not using an explicit | |
119 // passphrase. | |
120 std::string GetKeystoreEncryptionBootstrapToken() const; | |
121 void SetKeystoreEncryptionBootstrapToken(const std::string& token); | |
122 | |
123 // Use this for the unique machine tag used for session sync. | |
124 std::string GetSyncSessionsGUID() const; | |
125 void SetSyncSessionsGUID(const std::string& guid); | |
126 | |
127 // Maps |data_type| to its corresponding preference name. | |
128 static const char* GetPrefNameForDataType(syncer::ModelType data_type); | |
129 | |
130 #if defined(OS_CHROMEOS) | |
131 // Use this spare bootstrap token only when setting up sync for the first | |
132 // time. | |
133 std::string GetSpareBootstrapToken() const; | |
134 void SetSpareBootstrapToken(const std::string& token); | |
135 #endif | |
136 | |
137 // Get/set/clear first sync time of current user. Used to roll back browsing | |
138 // data later when user signs out. | |
139 base::Time GetFirstSyncTime() const; | |
140 void SetFirstSyncTime(base::Time time); | |
141 void ClearFirstSyncTime(); | |
142 | |
143 // Out of band sync passphrase prompt getter/setter. | |
144 bool IsPassphrasePrompted() const; | |
145 void SetPassphrasePrompted(bool value); | |
146 | |
147 // For testing. | |
148 void SetManagedForTest(bool is_managed); | |
149 | |
150 // Get/Set number of memory warnings received. | |
151 int GetMemoryPressureWarningCount() const; | |
152 void SetMemoryPressureWarningCount(int value); | |
153 | |
154 // Check if the previous shutdown was clean. | |
155 bool DidSyncShutdownCleanly() const; | |
156 | |
157 // Set whether the last shutdown was clean. | |
158 void SetCleanShutdown(bool value); | |
159 | |
160 // Get/set for the last known sync invalidation versions. | |
161 void GetInvalidationVersions( | |
162 std::map<syncer::ModelType, int64_t>* invalidation_versions) const; | |
163 void UpdateInvalidationVersions( | |
164 const std::map<syncer::ModelType, int64_t>& invalidation_versions); | |
165 | |
166 // Will return the contents of the LastRunVersion preference. This may be an | |
167 // empty string if no version info was present, and is only valid at | |
168 // Sync startup time (after which the LastRunVersion preference will have been | |
169 // updated to the current version). | |
170 std::string GetLastRunVersion() const; | |
171 void SetLastRunVersion(const std::string& current_version); | |
172 | |
173 // Get/set for flag indicating that passphrase encryption transition is in | |
174 // progress. | |
175 void SetPassphraseEncryptionTransitionInProgress(bool value); | |
176 bool GetPassphraseEncryptionTransitionInProgress() const; | |
177 | |
178 // Get/set for saved Nigori state that needs to be passed to backend | |
179 // initialization after transition. | |
180 void SetSavedNigoriStateForPassphraseEncryptionTransition( | |
181 const syncer::SyncEncryptionHandler::NigoriState& nigori_state); | |
182 std::unique_ptr<syncer::SyncEncryptionHandler::NigoriState> | |
183 GetSavedNigoriStateForPassphraseEncryptionTransition() const; | |
184 | |
185 private: | |
186 void RegisterPrefGroups(); | |
187 | |
188 static void RegisterDataTypePreferredPref( | |
189 user_prefs::PrefRegistrySyncable* prefs, | |
190 syncer::ModelType type, | |
191 bool is_preferred); | |
192 bool GetDataTypePreferred(syncer::ModelType type) const; | |
193 void SetDataTypePreferred(syncer::ModelType type, bool is_preferred); | |
194 | |
195 // Returns a ModelTypeSet based on |types| expanded to include pref groups | |
196 // (see |pref_groups_|), but as a subset of |registered_types|. | |
197 syncer::ModelTypeSet ResolvePrefGroups(syncer::ModelTypeSet registered_types, | |
198 syncer::ModelTypeSet types) const; | |
199 | |
200 void OnSyncManagedPrefChanged(); | |
201 | |
202 // May be NULL. | |
203 PrefService* const pref_service_; | |
204 | |
205 base::ObserverList<SyncPrefObserver> sync_pref_observers_; | |
206 | |
207 // The preference that controls whether sync is under control by | |
208 // configuration management. | |
209 BooleanPrefMember pref_sync_managed_; | |
210 | |
211 // Groups of prefs that always have the same value as a "master" pref. | |
212 // For example, the APPS group has {APP_NOTIFICATIONS, APP_SETTINGS} | |
213 // (as well as APPS, but that is implied), so | |
214 // pref_groups_[syncer::APPS] = { syncer::APP_NOTIFICATIONS, | |
215 // syncer::APP_SETTINGS } | |
216 // pref_groups_[syncer::EXTENSIONS] = { syncer::EXTENSION_SETTINGS } | |
217 // etc. | |
218 typedef std::map<syncer::ModelType, syncer::ModelTypeSet> PrefGroupsMap; | |
219 PrefGroupsMap pref_groups_; | |
220 | |
221 DISALLOW_COPY_AND_ASSIGN(SyncPrefs); | |
222 }; | |
223 | |
224 } // namespace sync_driver | |
225 | |
226 #endif // COMPONENTS_SYNC_DRIVER_SYNC_PREFS_H_ | |
OLD | NEW |