| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 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 | 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 101 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 112 pref_service_->GetBoolean(prefs::kSyncKeepEverythingSynced); | 112 pref_service_->GetBoolean(prefs::kSyncKeepEverythingSynced); |
| 113 } | 113 } |
| 114 | 114 |
| 115 void SyncPrefs::SetKeepEverythingSynced(bool keep_everything_synced) { | 115 void SyncPrefs::SetKeepEverythingSynced(bool keep_everything_synced) { |
| 116 DCHECK(CalledOnValidThread()); | 116 DCHECK(CalledOnValidThread()); |
| 117 CHECK(pref_service_); | 117 CHECK(pref_service_); |
| 118 pref_service_->SetBoolean(prefs::kSyncKeepEverythingSynced, | 118 pref_service_->SetBoolean(prefs::kSyncKeepEverythingSynced, |
| 119 keep_everything_synced); | 119 keep_everything_synced); |
| 120 } | 120 } |
| 121 | 121 |
| 122 syncable::ModelTypeSet SyncPrefs::GetPreferredDataTypes( | 122 syncer::ModelTypeSet SyncPrefs::GetPreferredDataTypes( |
| 123 syncable::ModelTypeSet registered_types) const { | 123 syncer::ModelTypeSet registered_types) const { |
| 124 DCHECK(CalledOnValidThread()); | 124 DCHECK(CalledOnValidThread()); |
| 125 if (!pref_service_) { | 125 if (!pref_service_) { |
| 126 return syncable::ModelTypeSet(); | 126 return syncer::ModelTypeSet(); |
| 127 } | 127 } |
| 128 | 128 |
| 129 // First remove any datatypes that are inconsistent with the current policies | 129 // First remove any datatypes that are inconsistent with the current policies |
| 130 // on the client (so that "keep everything synced" doesn't include them). | 130 // on the client (so that "keep everything synced" doesn't include them). |
| 131 if (pref_service_->HasPrefPath(prefs::kSavingBrowserHistoryDisabled) && | 131 if (pref_service_->HasPrefPath(prefs::kSavingBrowserHistoryDisabled) && |
| 132 pref_service_->GetBoolean(prefs::kSavingBrowserHistoryDisabled)) { | 132 pref_service_->GetBoolean(prefs::kSavingBrowserHistoryDisabled)) { |
| 133 registered_types.Remove(syncable::TYPED_URLS); | 133 registered_types.Remove(syncer::TYPED_URLS); |
| 134 } | 134 } |
| 135 | 135 |
| 136 if (pref_service_->GetBoolean(prefs::kSyncKeepEverythingSynced)) { | 136 if (pref_service_->GetBoolean(prefs::kSyncKeepEverythingSynced)) { |
| 137 return registered_types; | 137 return registered_types; |
| 138 } | 138 } |
| 139 | 139 |
| 140 syncable::ModelTypeSet preferred_types; | 140 syncer::ModelTypeSet preferred_types; |
| 141 for (syncable::ModelTypeSet::Iterator it = registered_types.First(); | 141 for (syncer::ModelTypeSet::Iterator it = registered_types.First(); |
| 142 it.Good(); it.Inc()) { | 142 it.Good(); it.Inc()) { |
| 143 if (GetDataTypePreferred(it.Get())) { | 143 if (GetDataTypePreferred(it.Get())) { |
| 144 preferred_types.Put(it.Get()); | 144 preferred_types.Put(it.Get()); |
| 145 } | 145 } |
| 146 } | 146 } |
| 147 return ResolvePrefGroups(registered_types, preferred_types); | 147 return ResolvePrefGroups(registered_types, preferred_types); |
| 148 } | 148 } |
| 149 | 149 |
| 150 void SyncPrefs::SetPreferredDataTypes( | 150 void SyncPrefs::SetPreferredDataTypes( |
| 151 syncable::ModelTypeSet registered_types, | 151 syncer::ModelTypeSet registered_types, |
| 152 syncable::ModelTypeSet preferred_types) { | 152 syncer::ModelTypeSet preferred_types) { |
| 153 DCHECK(CalledOnValidThread()); | 153 DCHECK(CalledOnValidThread()); |
| 154 CHECK(pref_service_); | 154 CHECK(pref_service_); |
| 155 DCHECK(registered_types.HasAll(preferred_types)); | 155 DCHECK(registered_types.HasAll(preferred_types)); |
| 156 preferred_types = ResolvePrefGroups(registered_types, preferred_types); | 156 preferred_types = ResolvePrefGroups(registered_types, preferred_types); |
| 157 for (syncable::ModelTypeSet::Iterator i = registered_types.First(); | 157 for (syncer::ModelTypeSet::Iterator i = registered_types.First(); |
| 158 i.Good(); i.Inc()) { | 158 i.Good(); i.Inc()) { |
| 159 SetDataTypePreferred(i.Get(), preferred_types.Has(i.Get())); | 159 SetDataTypePreferred(i.Get(), preferred_types.Has(i.Get())); |
| 160 } | 160 } |
| 161 } | 161 } |
| 162 | 162 |
| 163 bool SyncPrefs::IsManaged() const { | 163 bool SyncPrefs::IsManaged() const { |
| 164 DCHECK(CalledOnValidThread()); | 164 DCHECK(CalledOnValidThread()); |
| 165 return pref_service_ && pref_service_->GetBoolean(prefs::kSyncManaged); | 165 return pref_service_ && pref_service_->GetBoolean(prefs::kSyncManaged); |
| 166 } | 166 } |
| 167 | 167 |
| (...skipping 16 matching lines...) Expand all Loading... |
| 184 pref_service_->GetString(prefs::kSyncSpareBootstrapToken) : ""; | 184 pref_service_->GetString(prefs::kSyncSpareBootstrapToken) : ""; |
| 185 } | 185 } |
| 186 | 186 |
| 187 void SyncPrefs::SetSpareBootstrapToken(const std::string& token) { | 187 void SyncPrefs::SetSpareBootstrapToken(const std::string& token) { |
| 188 DCHECK(CalledOnValidThread()); | 188 DCHECK(CalledOnValidThread()); |
| 189 pref_service_->SetString(prefs::kSyncSpareBootstrapToken, token); | 189 pref_service_->SetString(prefs::kSyncSpareBootstrapToken, token); |
| 190 } | 190 } |
| 191 #endif | 191 #endif |
| 192 | 192 |
| 193 void SyncPrefs::AcknowledgeSyncedTypes( | 193 void SyncPrefs::AcknowledgeSyncedTypes( |
| 194 syncable::ModelTypeSet types) { | 194 syncer::ModelTypeSet types) { |
| 195 DCHECK(CalledOnValidThread()); | 195 DCHECK(CalledOnValidThread()); |
| 196 CHECK(pref_service_); | 196 CHECK(pref_service_); |
| 197 // Add the types to the current set of acknowledged | 197 // Add the types to the current set of acknowledged |
| 198 // types, and then store the resulting set in prefs. | 198 // types, and then store the resulting set in prefs. |
| 199 const syncable::ModelTypeSet acknowledged_types = | 199 const syncer::ModelTypeSet acknowledged_types = |
| 200 Union(types, | 200 Union(types, |
| 201 syncable::ModelTypeSetFromValue( | 201 syncer::ModelTypeSetFromValue( |
| 202 *pref_service_->GetList(prefs::kSyncAcknowledgedSyncTypes))); | 202 *pref_service_->GetList(prefs::kSyncAcknowledgedSyncTypes))); |
| 203 | 203 |
| 204 scoped_ptr<ListValue> value( | 204 scoped_ptr<ListValue> value( |
| 205 syncable::ModelTypeSetToValue(acknowledged_types)); | 205 syncer::ModelTypeSetToValue(acknowledged_types)); |
| 206 pref_service_->Set(prefs::kSyncAcknowledgedSyncTypes, *value); | 206 pref_service_->Set(prefs::kSyncAcknowledgedSyncTypes, *value); |
| 207 } | 207 } |
| 208 | 208 |
| 209 void SyncPrefs::Observe(int type, | 209 void SyncPrefs::Observe(int type, |
| 210 const content::NotificationSource& source, | 210 const content::NotificationSource& source, |
| 211 const content::NotificationDetails& details) { | 211 const content::NotificationDetails& details) { |
| 212 DCHECK(CalledOnValidThread()); | 212 DCHECK(CalledOnValidThread()); |
| 213 DCHECK(content::Source<PrefService>(pref_service_) == source); | 213 DCHECK(content::Source<PrefService>(pref_service_) == source); |
| 214 switch (type) { | 214 switch (type) { |
| 215 case chrome::NOTIFICATION_PREF_CHANGED: { | 215 case chrome::NOTIFICATION_PREF_CHANGED: { |
| (...skipping 10 matching lines...) Expand all Loading... |
| 226 break; | 226 break; |
| 227 } | 227 } |
| 228 } | 228 } |
| 229 | 229 |
| 230 void SyncPrefs::SetManagedForTest(bool is_managed) { | 230 void SyncPrefs::SetManagedForTest(bool is_managed) { |
| 231 DCHECK(CalledOnValidThread()); | 231 DCHECK(CalledOnValidThread()); |
| 232 CHECK(pref_service_); | 232 CHECK(pref_service_); |
| 233 pref_service_->SetBoolean(prefs::kSyncManaged, is_managed); | 233 pref_service_->SetBoolean(prefs::kSyncManaged, is_managed); |
| 234 } | 234 } |
| 235 | 235 |
| 236 syncable::ModelTypeSet SyncPrefs::GetAcknowledgeSyncedTypesForTest() const { | 236 syncer::ModelTypeSet SyncPrefs::GetAcknowledgeSyncedTypesForTest() const { |
| 237 DCHECK(CalledOnValidThread()); | 237 DCHECK(CalledOnValidThread()); |
| 238 if (!pref_service_) { | 238 if (!pref_service_) { |
| 239 return syncable::ModelTypeSet(); | 239 return syncer::ModelTypeSet(); |
| 240 } | 240 } |
| 241 return syncable::ModelTypeSetFromValue( | 241 return syncer::ModelTypeSetFromValue( |
| 242 *pref_service_->GetList(prefs::kSyncAcknowledgedSyncTypes)); | 242 *pref_service_->GetList(prefs::kSyncAcknowledgedSyncTypes)); |
| 243 } | 243 } |
| 244 | 244 |
| 245 namespace { | 245 namespace { |
| 246 | 246 |
| 247 const char* GetPrefNameForDataType(syncable::ModelType data_type) { | 247 const char* GetPrefNameForDataType(syncer::ModelType data_type) { |
| 248 switch (data_type) { | 248 switch (data_type) { |
| 249 case syncable::BOOKMARKS: | 249 case syncer::BOOKMARKS: |
| 250 return prefs::kSyncBookmarks; | 250 return prefs::kSyncBookmarks; |
| 251 case syncable::PASSWORDS: | 251 case syncer::PASSWORDS: |
| 252 return prefs::kSyncPasswords; | 252 return prefs::kSyncPasswords; |
| 253 case syncable::PREFERENCES: | 253 case syncer::PREFERENCES: |
| 254 return prefs::kSyncPreferences; | 254 return prefs::kSyncPreferences; |
| 255 case syncable::AUTOFILL: | 255 case syncer::AUTOFILL: |
| 256 return prefs::kSyncAutofill; | 256 return prefs::kSyncAutofill; |
| 257 case syncable::AUTOFILL_PROFILE: | 257 case syncer::AUTOFILL_PROFILE: |
| 258 return prefs::kSyncAutofillProfile; | 258 return prefs::kSyncAutofillProfile; |
| 259 case syncable::THEMES: | 259 case syncer::THEMES: |
| 260 return prefs::kSyncThemes; | 260 return prefs::kSyncThemes; |
| 261 case syncable::TYPED_URLS: | 261 case syncer::TYPED_URLS: |
| 262 return prefs::kSyncTypedUrls; | 262 return prefs::kSyncTypedUrls; |
| 263 case syncable::EXTENSION_SETTINGS: | 263 case syncer::EXTENSION_SETTINGS: |
| 264 return prefs::kSyncExtensionSettings; | 264 return prefs::kSyncExtensionSettings; |
| 265 case syncable::EXTENSIONS: | 265 case syncer::EXTENSIONS: |
| 266 return prefs::kSyncExtensions; | 266 return prefs::kSyncExtensions; |
| 267 case syncable::APP_SETTINGS: | 267 case syncer::APP_SETTINGS: |
| 268 return prefs::kSyncAppSettings; | 268 return prefs::kSyncAppSettings; |
| 269 case syncable::APPS: | 269 case syncer::APPS: |
| 270 return prefs::kSyncApps; | 270 return prefs::kSyncApps; |
| 271 case syncable::SEARCH_ENGINES: | 271 case syncer::SEARCH_ENGINES: |
| 272 return prefs::kSyncSearchEngines; | 272 return prefs::kSyncSearchEngines; |
| 273 case syncable::SESSIONS: | 273 case syncer::SESSIONS: |
| 274 return prefs::kSyncSessions; | 274 return prefs::kSyncSessions; |
| 275 case syncable::APP_NOTIFICATIONS: | 275 case syncer::APP_NOTIFICATIONS: |
| 276 return prefs::kSyncAppNotifications; | 276 return prefs::kSyncAppNotifications; |
| 277 default: | 277 default: |
| 278 break; | 278 break; |
| 279 } | 279 } |
| 280 NOTREACHED(); | 280 NOTREACHED(); |
| 281 return NULL; | 281 return NULL; |
| 282 } | 282 } |
| 283 | 283 |
| 284 } // namespace | 284 } // namespace |
| 285 | 285 |
| 286 void SyncPrefs::RegisterPrefGroups() { | 286 void SyncPrefs::RegisterPrefGroups() { |
| 287 pref_groups_[syncable::APPS].Put(syncable::APP_NOTIFICATIONS); | 287 pref_groups_[syncer::APPS].Put(syncer::APP_NOTIFICATIONS); |
| 288 pref_groups_[syncable::APPS].Put(syncable::APP_SETTINGS); | 288 pref_groups_[syncer::APPS].Put(syncer::APP_SETTINGS); |
| 289 | 289 |
| 290 pref_groups_[syncable::AUTOFILL].Put(syncable::AUTOFILL_PROFILE); | 290 pref_groups_[syncer::AUTOFILL].Put(syncer::AUTOFILL_PROFILE); |
| 291 | 291 |
| 292 pref_groups_[syncable::EXTENSIONS].Put(syncable::EXTENSION_SETTINGS); | 292 pref_groups_[syncer::EXTENSIONS].Put(syncer::EXTENSION_SETTINGS); |
| 293 | 293 |
| 294 pref_groups_[syncable::PREFERENCES].Put(syncable::SEARCH_ENGINES); | 294 pref_groups_[syncer::PREFERENCES].Put(syncer::SEARCH_ENGINES); |
| 295 } | 295 } |
| 296 | 296 |
| 297 void SyncPrefs::RegisterPreferences() { | 297 void SyncPrefs::RegisterPreferences() { |
| 298 DCHECK(CalledOnValidThread()); | 298 DCHECK(CalledOnValidThread()); |
| 299 CHECK(pref_service_); | 299 CHECK(pref_service_); |
| 300 if (pref_service_->FindPreference(prefs::kSyncLastSyncedTime)) { | 300 if (pref_service_->FindPreference(prefs::kSyncLastSyncedTime)) { |
| 301 return; | 301 return; |
| 302 } | 302 } |
| 303 | 303 |
| 304 pref_service_->RegisterBooleanPref(prefs::kSyncHasSetupCompleted, | 304 pref_service_->RegisterBooleanPref(prefs::kSyncHasSetupCompleted, |
| (...skipping 15 matching lines...) Expand all Loading... |
| 320 #else | 320 #else |
| 321 bool enable_by_default = | 321 bool enable_by_default = |
| 322 !pref_service_->HasPrefPath(prefs::kSyncHasSetupCompleted); | 322 !pref_service_->HasPrefPath(prefs::kSyncHasSetupCompleted); |
| 323 #endif | 323 #endif |
| 324 | 324 |
| 325 pref_service_->RegisterBooleanPref(prefs::kSyncKeepEverythingSynced, | 325 pref_service_->RegisterBooleanPref(prefs::kSyncKeepEverythingSynced, |
| 326 enable_by_default, | 326 enable_by_default, |
| 327 PrefService::UNSYNCABLE_PREF); | 327 PrefService::UNSYNCABLE_PREF); |
| 328 | 328 |
| 329 // Treat bookmarks specially. | 329 // Treat bookmarks specially. |
| 330 RegisterDataTypePreferredPref(syncable::BOOKMARKS, true); | 330 RegisterDataTypePreferredPref(syncer::BOOKMARKS, true); |
| 331 for (int i = syncable::PREFERENCES; i < syncable::MODEL_TYPE_COUNT; ++i) { | 331 for (int i = syncer::PREFERENCES; i < syncer::MODEL_TYPE_COUNT; ++i) { |
| 332 const syncable::ModelType type = syncable::ModelTypeFromInt(i); | 332 const syncer::ModelType type = syncer::ModelTypeFromInt(i); |
| 333 // Also treat nigori specially. | 333 // Also treat nigori specially. |
| 334 if (type == syncable::NIGORI) { | 334 if (type == syncer::NIGORI) { |
| 335 continue; | 335 continue; |
| 336 } | 336 } |
| 337 RegisterDataTypePreferredPref(type, enable_by_default); | 337 RegisterDataTypePreferredPref(type, enable_by_default); |
| 338 } | 338 } |
| 339 | 339 |
| 340 pref_service_->RegisterBooleanPref(prefs::kSyncManaged, | 340 pref_service_->RegisterBooleanPref(prefs::kSyncManaged, |
| 341 false, | 341 false, |
| 342 PrefService::UNSYNCABLE_PREF); | 342 PrefService::UNSYNCABLE_PREF); |
| 343 pref_service_->RegisterStringPref(prefs::kSyncEncryptionBootstrapToken, | 343 pref_service_->RegisterStringPref(prefs::kSyncEncryptionBootstrapToken, |
| 344 "", | 344 "", |
| 345 PrefService::UNSYNCABLE_PREF); | 345 PrefService::UNSYNCABLE_PREF); |
| 346 #if defined(OS_CHROMEOS) | 346 #if defined(OS_CHROMEOS) |
| 347 pref_service_->RegisterStringPref(prefs::kSyncSpareBootstrapToken, | 347 pref_service_->RegisterStringPref(prefs::kSyncSpareBootstrapToken, |
| 348 "", | 348 "", |
| 349 PrefService::UNSYNCABLE_PREF); | 349 PrefService::UNSYNCABLE_PREF); |
| 350 #endif | 350 #endif |
| 351 | 351 |
| 352 // We will start prompting people about new data types after the launch of | 352 // We will start prompting people about new data types after the launch of |
| 353 // SESSIONS - all previously launched data types are treated as if they are | 353 // SESSIONS - all previously launched data types are treated as if they are |
| 354 // already acknowledged. | 354 // already acknowledged. |
| 355 syncable::ModelTypeSet model_set; | 355 syncer::ModelTypeSet model_set; |
| 356 model_set.Put(syncable::BOOKMARKS); | 356 model_set.Put(syncer::BOOKMARKS); |
| 357 model_set.Put(syncable::PREFERENCES); | 357 model_set.Put(syncer::PREFERENCES); |
| 358 model_set.Put(syncable::PASSWORDS); | 358 model_set.Put(syncer::PASSWORDS); |
| 359 model_set.Put(syncable::AUTOFILL_PROFILE); | 359 model_set.Put(syncer::AUTOFILL_PROFILE); |
| 360 model_set.Put(syncable::AUTOFILL); | 360 model_set.Put(syncer::AUTOFILL); |
| 361 model_set.Put(syncable::THEMES); | 361 model_set.Put(syncer::THEMES); |
| 362 model_set.Put(syncable::EXTENSIONS); | 362 model_set.Put(syncer::EXTENSIONS); |
| 363 model_set.Put(syncable::NIGORI); | 363 model_set.Put(syncer::NIGORI); |
| 364 model_set.Put(syncable::SEARCH_ENGINES); | 364 model_set.Put(syncer::SEARCH_ENGINES); |
| 365 model_set.Put(syncable::APPS); | 365 model_set.Put(syncer::APPS); |
| 366 model_set.Put(syncable::TYPED_URLS); | 366 model_set.Put(syncer::TYPED_URLS); |
| 367 model_set.Put(syncable::SESSIONS); | 367 model_set.Put(syncer::SESSIONS); |
| 368 pref_service_->RegisterListPref(prefs::kSyncAcknowledgedSyncTypes, | 368 pref_service_->RegisterListPref(prefs::kSyncAcknowledgedSyncTypes, |
| 369 syncable::ModelTypeSetToValue(model_set), | 369 syncer::ModelTypeSetToValue(model_set), |
| 370 PrefService::UNSYNCABLE_PREF); | 370 PrefService::UNSYNCABLE_PREF); |
| 371 } | 371 } |
| 372 | 372 |
| 373 void SyncPrefs::RegisterDataTypePreferredPref(syncable::ModelType type, | 373 void SyncPrefs::RegisterDataTypePreferredPref(syncer::ModelType type, |
| 374 bool is_preferred) { | 374 bool is_preferred) { |
| 375 DCHECK(CalledOnValidThread()); | 375 DCHECK(CalledOnValidThread()); |
| 376 CHECK(pref_service_); | 376 CHECK(pref_service_); |
| 377 const char* pref_name = GetPrefNameForDataType(type); | 377 const char* pref_name = GetPrefNameForDataType(type); |
| 378 if (!pref_name) { | 378 if (!pref_name) { |
| 379 NOTREACHED(); | 379 NOTREACHED(); |
| 380 return; | 380 return; |
| 381 } | 381 } |
| 382 pref_service_->RegisterBooleanPref(pref_name, is_preferred, | 382 pref_service_->RegisterBooleanPref(pref_name, is_preferred, |
| 383 PrefService::UNSYNCABLE_PREF); | 383 PrefService::UNSYNCABLE_PREF); |
| 384 } | 384 } |
| 385 | 385 |
| 386 bool SyncPrefs::GetDataTypePreferred(syncable::ModelType type) const { | 386 bool SyncPrefs::GetDataTypePreferred(syncer::ModelType type) const { |
| 387 DCHECK(CalledOnValidThread()); | 387 DCHECK(CalledOnValidThread()); |
| 388 if (!pref_service_) { | 388 if (!pref_service_) { |
| 389 return false; | 389 return false; |
| 390 } | 390 } |
| 391 const char* pref_name = GetPrefNameForDataType(type); | 391 const char* pref_name = GetPrefNameForDataType(type); |
| 392 if (!pref_name) { | 392 if (!pref_name) { |
| 393 NOTREACHED(); | 393 NOTREACHED(); |
| 394 return false; | 394 return false; |
| 395 } | 395 } |
| 396 | 396 |
| 397 return pref_service_->GetBoolean(pref_name); | 397 return pref_service_->GetBoolean(pref_name); |
| 398 } | 398 } |
| 399 | 399 |
| 400 void SyncPrefs::SetDataTypePreferred( | 400 void SyncPrefs::SetDataTypePreferred( |
| 401 syncable::ModelType type, bool is_preferred) { | 401 syncer::ModelType type, bool is_preferred) { |
| 402 DCHECK(CalledOnValidThread()); | 402 DCHECK(CalledOnValidThread()); |
| 403 CHECK(pref_service_); | 403 CHECK(pref_service_); |
| 404 const char* pref_name = GetPrefNameForDataType(type); | 404 const char* pref_name = GetPrefNameForDataType(type); |
| 405 if (!pref_name) { | 405 if (!pref_name) { |
| 406 NOTREACHED(); | 406 NOTREACHED(); |
| 407 return; | 407 return; |
| 408 } | 408 } |
| 409 pref_service_->SetBoolean(pref_name, is_preferred); | 409 pref_service_->SetBoolean(pref_name, is_preferred); |
| 410 } | 410 } |
| 411 | 411 |
| 412 syncable::ModelTypeSet SyncPrefs::ResolvePrefGroups( | 412 syncer::ModelTypeSet SyncPrefs::ResolvePrefGroups( |
| 413 syncable::ModelTypeSet registered_types, | 413 syncer::ModelTypeSet registered_types, |
| 414 syncable::ModelTypeSet types) const { | 414 syncer::ModelTypeSet types) const { |
| 415 DCHECK(registered_types.HasAll(types)); | 415 DCHECK(registered_types.HasAll(types)); |
| 416 syncable::ModelTypeSet types_with_groups = types; | 416 syncer::ModelTypeSet types_with_groups = types; |
| 417 for (PrefGroupsMap::const_iterator i = pref_groups_.begin(); | 417 for (PrefGroupsMap::const_iterator i = pref_groups_.begin(); |
| 418 i != pref_groups_.end(); ++i) { | 418 i != pref_groups_.end(); ++i) { |
| 419 if (types.Has(i->first)) | 419 if (types.Has(i->first)) |
| 420 types_with_groups.PutAll(i->second); | 420 types_with_groups.PutAll(i->second); |
| 421 else | 421 else |
| 422 types_with_groups.RemoveAll(i->second); | 422 types_with_groups.RemoveAll(i->second); |
| 423 } | 423 } |
| 424 types_with_groups.RetainAll(registered_types); | 424 types_with_groups.RetainAll(registered_types); |
| 425 return types_with_groups; | 425 return types_with_groups; |
| 426 } | 426 } |
| 427 | 427 |
| 428 } // namespace browser_sync | 428 } // namespace browser_sync |
| OLD | NEW |