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 CHROME_BROWSER_SYNC_SYNC_PREFS_H_ | |
6 #define CHROME_BROWSER_SYNC_SYNC_PREFS_H_ | |
7 | |
8 #include "base/basictypes.h" | |
9 #include "base/compiler_specific.h" | |
10 #include "base/memory/weak_ptr.h" | |
11 #include "base/observer_list.h" | |
12 #include "base/prefs/pref_member.h" | |
13 #include "base/threading/non_thread_safe.h" | |
14 #include "base/time/time.h" | |
15 #include "sync/internal_api/public/base/model_type.h" | |
16 #include "sync/notifier/invalidation_state_tracker.h" | |
17 | |
18 class PrefService; | |
19 class ProfileIOData; | |
20 | |
21 namespace user_prefs { | |
22 class PrefRegistrySyncable; | |
23 } | |
24 | |
25 namespace browser_sync { | |
26 | |
27 class SyncPrefObserver { | |
28 public: | |
29 // Called whenever the pref that controls whether sync is managed | |
30 // changes. | |
31 virtual void OnSyncManagedPrefChange(bool is_sync_managed) = 0; | |
32 | |
33 protected: | |
34 virtual ~SyncPrefObserver(); | |
35 }; | |
36 | |
37 // SyncPrefs is a helper class that manages getting, setting, and | |
38 // persisting global sync preferences. It is not thread-safe, and | |
39 // lives on the UI thread. | |
40 // | |
41 // TODO(akalin): Some classes still read the prefs directly. Consider | |
42 // passing down a pointer to SyncPrefs to them. A list of files: | |
43 // | |
44 // profile_sync_service_startup_unittest.cc | |
45 // profile_sync_service.cc | |
46 // sync_setup_flow.cc | |
47 // sync_setup_wizard.cc | |
48 // sync_setup_wizard_unittest.cc | |
49 // two_client_preferences_sync_test.cc | |
50 class SyncPrefs : NON_EXPORTED_BASE(public base::NonThreadSafe), | |
51 public base::SupportsWeakPtr<SyncPrefs> { | |
52 public: | |
53 // |pref_service| may not be NULL. | |
54 // Does not take ownership of |pref_service|. | |
55 explicit SyncPrefs(PrefService* pref_service); | |
56 | |
57 virtual ~SyncPrefs(); | |
58 | |
59 static void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry); | |
60 | |
61 void AddSyncPrefObserver(SyncPrefObserver* sync_pref_observer); | |
62 void RemoveSyncPrefObserver(SyncPrefObserver* sync_pref_observer); | |
63 | |
64 // Clears important sync preferences. | |
65 void ClearPreferences(); | |
66 | |
67 // Getters and setters for global sync prefs. | |
68 | |
69 bool HasSyncSetupCompleted() const; | |
70 void SetSyncSetupCompleted(); | |
71 | |
72 bool SyncHasAuthError() const; | |
73 void SetSyncAuthError(bool error); | |
74 | |
75 bool IsStartSuppressed() const; | |
76 void SetStartSuppressed(bool is_suppressed); | |
77 | |
78 std::string GetGoogleServicesUsername() const; | |
79 | |
80 base::Time GetLastSyncedTime() const; | |
81 void SetLastSyncedTime(base::Time time); | |
82 | |
83 bool HasKeepEverythingSynced() const; | |
84 void SetKeepEverythingSynced(bool keep_everything_synced); | |
85 | |
86 // The returned set is guaranteed to be a subset of | |
87 // |registered_types|. Returns |registered_types| directly if | |
88 // HasKeepEverythingSynced() is true. | |
89 syncer::ModelTypeSet GetPreferredDataTypes( | |
90 syncer::ModelTypeSet registered_types) const; | |
91 // |preferred_types| should be a subset of |registered_types|. All | |
92 // types in |preferred_types| are marked preferred, and all types in | |
93 // |registered_types| \ |preferred_types| are marked not preferred. | |
94 // Changes are still made to the prefs even if | |
95 // HasKeepEverythingSynced() is true, but won't be visible until | |
96 // SetKeepEverythingSynced(false) is called. | |
97 void SetPreferredDataTypes( | |
98 syncer::ModelTypeSet registered_types, | |
99 syncer::ModelTypeSet preferred_types); | |
100 | |
101 // This pref is set outside of sync. | |
102 bool IsManaged() const; | |
103 | |
104 // Use this encryption bootstrap token if we're using an explicit passphrase. | |
105 std::string GetEncryptionBootstrapToken() const; | |
106 void SetEncryptionBootstrapToken(const std::string& token); | |
107 | |
108 // Use this keystore bootstrap token if we're not using an explicit | |
109 // passphrase. | |
110 std::string GetKeystoreEncryptionBootstrapToken() const; | |
111 void SetKeystoreEncryptionBootstrapToken(const std::string& token); | |
112 | |
113 // Use this for the unique machine tag used for session sync. | |
114 std::string GetSyncSessionsGUID() const; | |
115 void SetSyncSessionsGUID(const std::string& guid); | |
116 | |
117 // Maps |data_type| to its corresponding preference name. | |
118 static const char* GetPrefNameForDataType(syncer::ModelType data_type); | |
119 | |
120 #if defined(OS_CHROMEOS) | |
121 // Use this spare bootstrap token only when setting up sync for the first | |
122 // time. | |
123 std::string GetSpareBootstrapToken() const; | |
124 void SetSpareBootstrapToken(const std::string& token); | |
125 #endif | |
126 | |
127 // Merges the given set of types with the set of acknowledged types. | |
128 void AcknowledgeSyncedTypes(syncer::ModelTypeSet types); | |
129 | |
130 // For testing. | |
131 | |
132 void SetManagedForTest(bool is_managed); | |
133 syncer::ModelTypeSet GetAcknowledgeSyncedTypesForTest() const; | |
134 | |
135 private: | |
136 void RegisterPrefGroups(); | |
137 | |
138 static void RegisterDataTypePreferredPref( | |
139 user_prefs::PrefRegistrySyncable* prefs, | |
140 syncer::ModelType type, | |
141 bool is_preferred); | |
142 bool GetDataTypePreferred(syncer::ModelType type) const; | |
143 void SetDataTypePreferred(syncer::ModelType type, bool is_preferred); | |
144 | |
145 // Returns a ModelTypeSet based on |types| expanded to include pref groups | |
146 // (see |pref_groups_|), but as a subset of |registered_types|. | |
147 syncer::ModelTypeSet ResolvePrefGroups( | |
148 syncer::ModelTypeSet registered_types, | |
149 syncer::ModelTypeSet types) const; | |
150 | |
151 void OnSyncManagedPrefChanged(); | |
152 | |
153 // May be NULL. | |
154 PrefService* const pref_service_; | |
155 | |
156 ObserverList<SyncPrefObserver> sync_pref_observers_; | |
157 | |
158 // The preference that controls whether sync is under control by | |
159 // configuration management. | |
160 BooleanPrefMember pref_sync_managed_; | |
161 | |
162 // Groups of prefs that always have the same value as a "master" pref. | |
163 // For example, the APPS group has {APP_NOTIFICATIONS, APP_SETTINGS} | |
164 // (as well as APPS, but that is implied), so | |
165 // pref_groups_[syncer::APPS] = { syncer::APP_NOTIFICATIONS, | |
166 // syncer::APP_SETTINGS } | |
167 // pref_groups_[syncer::EXTENSIONS] = { syncer::EXTENSION_SETTINGS } | |
168 // etc. | |
169 typedef std::map<syncer::ModelType, syncer::ModelTypeSet> PrefGroupsMap; | |
170 PrefGroupsMap pref_groups_; | |
171 | |
172 DISALLOW_COPY_AND_ASSIGN(SyncPrefs); | |
173 }; | |
174 | |
175 } // namespace browser_sync | |
176 | |
177 #endif // CHROME_BROWSER_SYNC_SYNC_PREFS_H_ | |
OLD | NEW |