OLD | NEW |
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "chrome/browser/sync/sync_prefs.h" | 5 #include "chrome/browser/sync/sync_prefs.h" |
6 | 6 |
7 #include "base/logging.h" | 7 #include "base/logging.h" |
8 #include "base/string_number_conversions.h" | 8 #include "base/string_number_conversions.h" |
9 #include "base/values.h" | 9 #include "base/values.h" |
10 #include "build/build_config.h" | 10 #include "build/build_config.h" |
(...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
116 } | 116 } |
117 | 117 |
118 void SyncPrefs::SetKeepEverythingSynced(bool keep_everything_synced) { | 118 void SyncPrefs::SetKeepEverythingSynced(bool keep_everything_synced) { |
119 DCHECK(non_thread_safe_.CalledOnValidThread()); | 119 DCHECK(non_thread_safe_.CalledOnValidThread()); |
120 CHECK(pref_service_); | 120 CHECK(pref_service_); |
121 pref_service_->SetBoolean(prefs::kSyncKeepEverythingSynced, | 121 pref_service_->SetBoolean(prefs::kSyncKeepEverythingSynced, |
122 keep_everything_synced); | 122 keep_everything_synced); |
123 pref_service_->ScheduleSavePersistentPrefs(); | 123 pref_service_->ScheduleSavePersistentPrefs(); |
124 } | 124 } |
125 | 125 |
126 syncable::ModelTypeSet SyncPrefs::GetPreferredDataTypes( | 126 syncable::ModelEnumSet SyncPrefs::GetPreferredDataTypes( |
127 const syncable::ModelTypeSet& registered_types) const { | 127 syncable::ModelEnumSet registered_types) const { |
128 DCHECK(non_thread_safe_.CalledOnValidThread()); | 128 DCHECK(non_thread_safe_.CalledOnValidThread()); |
129 if (!pref_service_) { | 129 if (!pref_service_) { |
130 return syncable::ModelTypeSet(); | 130 return syncable::ModelEnumSet(); |
131 } | 131 } |
132 | 132 |
133 if (pref_service_->GetBoolean(prefs::kSyncKeepEverythingSynced)) { | 133 if (pref_service_->GetBoolean(prefs::kSyncKeepEverythingSynced)) { |
134 return registered_types; | 134 return registered_types; |
135 } | 135 } |
136 | 136 |
137 // Remove autofill_profile since it's controlled by autofill, and | 137 // Remove autofill_profile since it's controlled by autofill, and |
138 // search_engines since it's controlled by preferences (see code below). | 138 // search_engines since it's controlled by preferences (see code below). |
139 syncable::ModelTypeSet user_selectable_types(registered_types); | 139 syncable::ModelEnumSet user_selectable_types(registered_types); |
140 DCHECK_EQ(user_selectable_types.count(syncable::NIGORI), 0u); | 140 DCHECK(!user_selectable_types.Has(syncable::NIGORI)); |
141 user_selectable_types.erase(syncable::AUTOFILL_PROFILE); | 141 user_selectable_types.Remove(syncable::AUTOFILL_PROFILE); |
142 user_selectable_types.erase(syncable::SEARCH_ENGINES); | 142 user_selectable_types.Remove(syncable::SEARCH_ENGINES); |
143 | 143 |
144 // Remove app_notifications since it's controlled by apps (see | 144 // Remove app_notifications since it's controlled by apps (see |
145 // code below). | 145 // code below). |
146 // TODO(akalin): Centralize notion of all user selectable data types. | 146 // TODO(akalin): Centralize notion of all user selectable data types. |
147 user_selectable_types.erase(syncable::APP_NOTIFICATIONS); | 147 user_selectable_types.Remove(syncable::APP_NOTIFICATIONS); |
148 | 148 |
149 syncable::ModelTypeSet preferred_types; | 149 syncable::ModelEnumSet preferred_types; |
150 | 150 |
151 for (syncable::ModelTypeSet::const_iterator it = | 151 for (syncable::ModelEnumSet::Iterator it = user_selectable_types.First(); |
152 user_selectable_types.begin(); | 152 it.Good(); it.Inc()) { |
153 it != user_selectable_types.end(); ++it) { | 153 if (GetDataTypePreferred(it.Get())) { |
154 if (GetDataTypePreferred(*it)) { | 154 preferred_types.Put(it.Get()); |
155 preferred_types.insert(*it); | |
156 } | 155 } |
157 } | 156 } |
158 | 157 |
159 // Group the enabled/disabled state of autofill_profile with autofill, and | 158 // Group the enabled/disabled state of autofill_profile with autofill, and |
160 // search_engines with preferences (since only autofill and preferences are | 159 // search_engines with preferences (since only autofill and preferences are |
161 // shown on the UI). | 160 // shown on the UI). |
162 if (registered_types.count(syncable::AUTOFILL) && | 161 if (registered_types.Has(syncable::AUTOFILL) && |
163 registered_types.count(syncable::AUTOFILL_PROFILE) && | 162 registered_types.Has(syncable::AUTOFILL_PROFILE) && |
164 GetDataTypePreferred(syncable::AUTOFILL)) { | 163 GetDataTypePreferred(syncable::AUTOFILL)) { |
165 preferred_types.insert(syncable::AUTOFILL_PROFILE); | 164 preferred_types.Put(syncable::AUTOFILL_PROFILE); |
166 } | 165 } |
167 if (registered_types.count(syncable::PREFERENCES) && | 166 if (registered_types.Has(syncable::PREFERENCES) && |
168 registered_types.count(syncable::SEARCH_ENGINES) && | 167 registered_types.Has(syncable::SEARCH_ENGINES) && |
169 GetDataTypePreferred(syncable::PREFERENCES)) { | 168 GetDataTypePreferred(syncable::PREFERENCES)) { |
170 preferred_types.insert(syncable::SEARCH_ENGINES); | 169 preferred_types.Put(syncable::SEARCH_ENGINES); |
171 } | 170 } |
172 | 171 |
173 // Set app_notifications to the same enabled/disabled state as | 172 // Set app_notifications to the same enabled/disabled state as |
174 // apps (since only apps is shown on the UI). | 173 // apps (since only apps is shown on the UI). |
175 if (registered_types.count(syncable::APPS) && | 174 if (registered_types.Has(syncable::APPS) && |
176 registered_types.count(syncable::APP_NOTIFICATIONS) && | 175 registered_types.Has(syncable::APP_NOTIFICATIONS) && |
177 GetDataTypePreferred(syncable::APPS)) { | 176 GetDataTypePreferred(syncable::APPS)) { |
178 preferred_types.insert(syncable::APP_NOTIFICATIONS); | 177 preferred_types.Put(syncable::APP_NOTIFICATIONS); |
179 } | 178 } |
180 | 179 |
181 return preferred_types; | 180 return preferred_types; |
182 } | 181 } |
183 | 182 |
184 void SyncPrefs::SetPreferredDataTypes( | 183 void SyncPrefs::SetPreferredDataTypes( |
185 const syncable::ModelTypeSet& registered_types, | 184 syncable::ModelEnumSet registered_types, |
186 const syncable::ModelTypeSet& preferred_types) { | 185 syncable::ModelEnumSet preferred_types) { |
187 DCHECK(non_thread_safe_.CalledOnValidThread()); | 186 DCHECK(non_thread_safe_.CalledOnValidThread()); |
188 CHECK(pref_service_); | 187 CHECK(pref_service_); |
189 DCHECK(std::includes(registered_types.begin(), registered_types.end(), | 188 DCHECK(registered_types.HasAll(preferred_types)); |
190 preferred_types.begin(), preferred_types.end())); | 189 syncable::ModelEnumSet preferred_types_with_dependents(preferred_types); |
191 syncable::ModelTypeSet preferred_types_with_dependents(preferred_types); | |
192 // Set autofill_profile to the same enabled/disabled state as | 190 // Set autofill_profile to the same enabled/disabled state as |
193 // autofill (since only autofill is shown in the UI). | 191 // autofill (since only autofill is shown in the UI). |
194 if (registered_types.count(syncable::AUTOFILL) && | 192 if (registered_types.Has(syncable::AUTOFILL) && |
195 registered_types.count(syncable::AUTOFILL_PROFILE)) { | 193 registered_types.Has(syncable::AUTOFILL_PROFILE)) { |
196 if (preferred_types_with_dependents.count(syncable::AUTOFILL)) { | 194 if (preferred_types_with_dependents.Has(syncable::AUTOFILL)) { |
197 preferred_types_with_dependents.insert(syncable::AUTOFILL_PROFILE); | 195 preferred_types_with_dependents.Put(syncable::AUTOFILL_PROFILE); |
198 } else { | 196 } else { |
199 preferred_types_with_dependents.erase(syncable::AUTOFILL_PROFILE); | 197 preferred_types_with_dependents.Remove(syncable::AUTOFILL_PROFILE); |
200 } | 198 } |
201 } | 199 } |
202 // Set app_notifications to the same enabled/disabled state as | 200 // Set app_notifications to the same enabled/disabled state as |
203 // apps (since only apps is shown in the UI). | 201 // apps (since only apps is shown in the UI). |
204 if (registered_types.count(syncable::APPS) && | 202 if (registered_types.Has(syncable::APPS) && |
205 registered_types.count(syncable::APP_NOTIFICATIONS)) { | 203 registered_types.Has(syncable::APP_NOTIFICATIONS)) { |
206 if (preferred_types_with_dependents.count(syncable::APPS)) { | 204 if (preferred_types_with_dependents.Has(syncable::APPS)) { |
207 preferred_types_with_dependents.insert(syncable::APP_NOTIFICATIONS); | 205 preferred_types_with_dependents.Put(syncable::APP_NOTIFICATIONS); |
208 } else { | 206 } else { |
209 preferred_types_with_dependents.erase(syncable::APP_NOTIFICATIONS); | 207 preferred_types_with_dependents.Remove(syncable::APP_NOTIFICATIONS); |
210 } | 208 } |
211 } | 209 } |
212 // Set search_engines to the same enabled/disabled state as | 210 // Set search_engines to the same enabled/disabled state as |
213 // preferences (since only preferences is shown in the UI). | 211 // preferences (since only preferences is shown in the UI). |
214 if (registered_types.count(syncable::PREFERENCES) && | 212 if (registered_types.Has(syncable::PREFERENCES) && |
215 registered_types.count(syncable::SEARCH_ENGINES)) { | 213 registered_types.Has(syncable::SEARCH_ENGINES)) { |
216 if (preferred_types_with_dependents.count(syncable::PREFERENCES)) { | 214 if (preferred_types_with_dependents.Has(syncable::PREFERENCES)) { |
217 preferred_types_with_dependents.insert(syncable::SEARCH_ENGINES); | 215 preferred_types_with_dependents.Put(syncable::SEARCH_ENGINES); |
218 } else { | 216 } else { |
219 preferred_types_with_dependents.erase(syncable::SEARCH_ENGINES); | 217 preferred_types_with_dependents.Remove(syncable::SEARCH_ENGINES); |
220 } | 218 } |
221 } | 219 } |
222 | 220 |
223 for (syncable::ModelTypeSet::const_iterator it = registered_types.begin(); | 221 for (syncable::ModelEnumSet::Iterator it = registered_types.First(); |
224 it != registered_types.end(); ++it) { | 222 it.Good(); it.Inc()) { |
225 SetDataTypePreferred(*it, preferred_types_with_dependents.count(*it) > 0); | 223 SetDataTypePreferred( |
| 224 it.Get(), preferred_types_with_dependents.Has(it.Get())); |
226 } | 225 } |
227 } | 226 } |
228 | 227 |
229 bool SyncPrefs::IsManaged() const { | 228 bool SyncPrefs::IsManaged() const { |
230 DCHECK(non_thread_safe_.CalledOnValidThread()); | 229 DCHECK(non_thread_safe_.CalledOnValidThread()); |
231 return pref_service_ && pref_service_->GetBoolean(prefs::kSyncManaged); | 230 return pref_service_ && pref_service_->GetBoolean(prefs::kSyncManaged); |
232 } | 231 } |
233 | 232 |
234 std::string SyncPrefs::GetEncryptionBootstrapToken() const { | 233 std::string SyncPrefs::GetEncryptionBootstrapToken() const { |
235 DCHECK(non_thread_safe_.CalledOnValidThread()); | 234 DCHECK(non_thread_safe_.CalledOnValidThread()); |
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
307 max_versions.begin(); | 306 max_versions.begin(); |
308 it != max_versions.end(); ++it) { | 307 it != max_versions.end(); ++it) { |
309 max_versions_dict.SetString( | 308 max_versions_dict.SetString( |
310 base::IntToString(it->first), | 309 base::IntToString(it->first), |
311 base::Int64ToString(it->second)); | 310 base::Int64ToString(it->second)); |
312 } | 311 } |
313 pref_service_->Set(prefs::kSyncMaxInvalidationVersions, max_versions_dict); | 312 pref_service_->Set(prefs::kSyncMaxInvalidationVersions, max_versions_dict); |
314 } | 313 } |
315 | 314 |
316 void SyncPrefs::AcknowledgeSyncedTypes( | 315 void SyncPrefs::AcknowledgeSyncedTypes( |
317 const syncable::ModelTypeSet& types) { | 316 syncable::ModelEnumSet types) { |
318 DCHECK(non_thread_safe_.CalledOnValidThread()); | 317 DCHECK(non_thread_safe_.CalledOnValidThread()); |
319 CHECK(pref_service_); | 318 CHECK(pref_service_); |
320 syncable::ModelTypeSet acknowledged_types = | |
321 syncable::ModelTypeSetFromValue( | |
322 *pref_service_->GetList(prefs::kSyncAcknowledgedSyncTypes)); | |
323 | |
324 // Add the types to the current set of acknowledged | 319 // Add the types to the current set of acknowledged |
325 // types, and then store the resulting set in prefs. | 320 // types, and then store the resulting set in prefs. |
326 { | 321 const syncable::ModelEnumSet acknowledged_types = |
327 syncable::ModelTypeSet temp; | 322 Union(types, |
328 std::set_union(acknowledged_types.begin(), acknowledged_types.end(), | 323 syncable::ModelEnumSetFromValue( |
329 types.begin(), types.end(), | 324 *pref_service_->GetList(prefs::kSyncAcknowledgedSyncTypes))); |
330 std::inserter(temp, temp.end())); | |
331 std::swap(acknowledged_types, temp); | |
332 } | |
333 | 325 |
334 scoped_ptr<ListValue> value( | 326 scoped_ptr<ListValue> value( |
335 syncable::ModelTypeSetToValue(acknowledged_types)); | 327 syncable::ModelEnumSetToValue(acknowledged_types)); |
336 pref_service_->Set(prefs::kSyncAcknowledgedSyncTypes, *value); | 328 pref_service_->Set(prefs::kSyncAcknowledgedSyncTypes, *value); |
337 pref_service_->ScheduleSavePersistentPrefs(); | 329 pref_service_->ScheduleSavePersistentPrefs(); |
338 } | 330 } |
339 | 331 |
340 void SyncPrefs::Observe(int type, | 332 void SyncPrefs::Observe(int type, |
341 const content::NotificationSource& source, | 333 const content::NotificationSource& source, |
342 const content::NotificationDetails& details) { | 334 const content::NotificationDetails& details) { |
343 DCHECK(non_thread_safe_.CalledOnValidThread()); | 335 DCHECK(non_thread_safe_.CalledOnValidThread()); |
344 DCHECK(content::Source<PrefService>(pref_service_) == source); | 336 DCHECK(content::Source<PrefService>(pref_service_) == source); |
345 switch (type) { | 337 switch (type) { |
(...skipping 12 matching lines...) Expand all Loading... |
358 } | 350 } |
359 } | 351 } |
360 | 352 |
361 void SyncPrefs::SetManagedForTest(bool is_managed) { | 353 void SyncPrefs::SetManagedForTest(bool is_managed) { |
362 DCHECK(non_thread_safe_.CalledOnValidThread()); | 354 DCHECK(non_thread_safe_.CalledOnValidThread()); |
363 CHECK(pref_service_); | 355 CHECK(pref_service_); |
364 pref_service_->SetBoolean(prefs::kSyncManaged, is_managed); | 356 pref_service_->SetBoolean(prefs::kSyncManaged, is_managed); |
365 pref_service_->ScheduleSavePersistentPrefs(); | 357 pref_service_->ScheduleSavePersistentPrefs(); |
366 } | 358 } |
367 | 359 |
368 syncable::ModelTypeSet SyncPrefs::GetAcknowledgeSyncedTypesForTest() const { | 360 syncable::ModelEnumSet SyncPrefs::GetAcknowledgeSyncedTypesForTest() const { |
369 DCHECK(non_thread_safe_.CalledOnValidThread()); | 361 DCHECK(non_thread_safe_.CalledOnValidThread()); |
370 if (!pref_service_) { | 362 if (!pref_service_) { |
371 return syncable::ModelTypeSet(); | 363 return syncable::ModelEnumSet(); |
372 } | 364 } |
373 return syncable::ModelTypeSetFromValue( | 365 return syncable::ModelEnumSetFromValue( |
374 *pref_service_->GetList(prefs::kSyncAcknowledgedSyncTypes)); | 366 *pref_service_->GetList(prefs::kSyncAcknowledgedSyncTypes)); |
375 } | 367 } |
376 | 368 |
377 namespace { | 369 namespace { |
378 | 370 |
379 const char* GetPrefNameForDataType(syncable::ModelType data_type) { | 371 const char* GetPrefNameForDataType(syncable::ModelType data_type) { |
380 switch (data_type) { | 372 switch (data_type) { |
381 case syncable::BOOKMARKS: | 373 case syncable::BOOKMARKS: |
382 return prefs::kSyncBookmarks; | 374 return prefs::kSyncBookmarks; |
383 case syncable::PASSWORDS: | 375 case syncable::PASSWORDS: |
(...skipping 139 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
523 const char* pref_name = GetPrefNameForDataType(type); | 515 const char* pref_name = GetPrefNameForDataType(type); |
524 if (!pref_name) { | 516 if (!pref_name) { |
525 NOTREACHED(); | 517 NOTREACHED(); |
526 return; | 518 return; |
527 } | 519 } |
528 pref_service_->SetBoolean(pref_name, is_preferred); | 520 pref_service_->SetBoolean(pref_name, is_preferred); |
529 pref_service_->ScheduleSavePersistentPrefs(); | 521 pref_service_->ScheduleSavePersistentPrefs(); |
530 } | 522 } |
531 | 523 |
532 } // namespace browser_sync | 524 } // namespace browser_sync |
OLD | NEW |