| 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 15 matching lines...) Expand all Loading... |
| 183 return pref_service_ ? | 183 return pref_service_ ? |
| 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(syncer::ModelTypeSet types) { |
| 194 syncable::ModelTypeSet types) { | |
| 195 DCHECK(CalledOnValidThread()); | 194 DCHECK(CalledOnValidThread()); |
| 196 CHECK(pref_service_); | 195 CHECK(pref_service_); |
| 197 // Add the types to the current set of acknowledged | 196 // Add the types to the current set of acknowledged |
| 198 // types, and then store the resulting set in prefs. | 197 // types, and then store the resulting set in prefs. |
| 199 const syncable::ModelTypeSet acknowledged_types = | 198 const syncer::ModelTypeSet acknowledged_types = |
| 200 Union(types, | 199 Union(types, |
| 201 syncable::ModelTypeSetFromValue( | 200 syncer::ModelTypeSetFromValue( |
| 202 *pref_service_->GetList(prefs::kSyncAcknowledgedSyncTypes))); | 201 *pref_service_->GetList(prefs::kSyncAcknowledgedSyncTypes))); |
| 203 | 202 |
| 204 scoped_ptr<ListValue> value( | 203 scoped_ptr<ListValue> value( |
| 205 syncable::ModelTypeSetToValue(acknowledged_types)); | 204 syncer::ModelTypeSetToValue(acknowledged_types)); |
| 206 pref_service_->Set(prefs::kSyncAcknowledgedSyncTypes, *value); | 205 pref_service_->Set(prefs::kSyncAcknowledgedSyncTypes, *value); |
| 207 } | 206 } |
| 208 | 207 |
| 209 void SyncPrefs::Observe(int type, | 208 void SyncPrefs::Observe(int type, |
| 210 const content::NotificationSource& source, | 209 const content::NotificationSource& source, |
| 211 const content::NotificationDetails& details) { | 210 const content::NotificationDetails& details) { |
| 212 DCHECK(CalledOnValidThread()); | 211 DCHECK(CalledOnValidThread()); |
| 213 DCHECK(content::Source<PrefService>(pref_service_) == source); | 212 DCHECK(content::Source<PrefService>(pref_service_) == source); |
| 214 switch (type) { | 213 switch (type) { |
| 215 case chrome::NOTIFICATION_PREF_CHANGED: { | 214 case chrome::NOTIFICATION_PREF_CHANGED: { |
| (...skipping 10 matching lines...) Expand all Loading... |
| 226 break; | 225 break; |
| 227 } | 226 } |
| 228 } | 227 } |
| 229 | 228 |
| 230 void SyncPrefs::SetManagedForTest(bool is_managed) { | 229 void SyncPrefs::SetManagedForTest(bool is_managed) { |
| 231 DCHECK(CalledOnValidThread()); | 230 DCHECK(CalledOnValidThread()); |
| 232 CHECK(pref_service_); | 231 CHECK(pref_service_); |
| 233 pref_service_->SetBoolean(prefs::kSyncManaged, is_managed); | 232 pref_service_->SetBoolean(prefs::kSyncManaged, is_managed); |
| 234 } | 233 } |
| 235 | 234 |
| 236 syncable::ModelTypeSet SyncPrefs::GetAcknowledgeSyncedTypesForTest() const { | 235 syncer::ModelTypeSet SyncPrefs::GetAcknowledgeSyncedTypesForTest() const { |
| 237 DCHECK(CalledOnValidThread()); | 236 DCHECK(CalledOnValidThread()); |
| 238 if (!pref_service_) { | 237 if (!pref_service_) { |
| 239 return syncable::ModelTypeSet(); | 238 return syncer::ModelTypeSet(); |
| 240 } | 239 } |
| 241 return syncable::ModelTypeSetFromValue( | 240 return syncer::ModelTypeSetFromValue( |
| 242 *pref_service_->GetList(prefs::kSyncAcknowledgedSyncTypes)); | 241 *pref_service_->GetList(prefs::kSyncAcknowledgedSyncTypes)); |
| 243 } | 242 } |
| 244 | 243 |
| 245 namespace { | 244 namespace { |
| 246 | 245 |
| 247 const char* GetPrefNameForDataType(syncable::ModelType data_type) { | 246 const char* GetPrefNameForDataType(syncer::ModelType data_type) { |
| 248 switch (data_type) { | 247 switch (data_type) { |
| 249 case syncable::BOOKMARKS: | 248 case syncer::BOOKMARKS: |
| 250 return prefs::kSyncBookmarks; | 249 return prefs::kSyncBookmarks; |
| 251 case syncable::PASSWORDS: | 250 case syncer::PASSWORDS: |
| 252 return prefs::kSyncPasswords; | 251 return prefs::kSyncPasswords; |
| 253 case syncable::PREFERENCES: | 252 case syncer::PREFERENCES: |
| 254 return prefs::kSyncPreferences; | 253 return prefs::kSyncPreferences; |
| 255 case syncable::AUTOFILL: | 254 case syncer::AUTOFILL: |
| 256 return prefs::kSyncAutofill; | 255 return prefs::kSyncAutofill; |
| 257 case syncable::AUTOFILL_PROFILE: | 256 case syncer::AUTOFILL_PROFILE: |
| 258 return prefs::kSyncAutofillProfile; | 257 return prefs::kSyncAutofillProfile; |
| 259 case syncable::THEMES: | 258 case syncer::THEMES: |
| 260 return prefs::kSyncThemes; | 259 return prefs::kSyncThemes; |
| 261 case syncable::TYPED_URLS: | 260 case syncer::TYPED_URLS: |
| 262 return prefs::kSyncTypedUrls; | 261 return prefs::kSyncTypedUrls; |
| 263 case syncable::EXTENSION_SETTINGS: | 262 case syncer::EXTENSION_SETTINGS: |
| 264 return prefs::kSyncExtensionSettings; | 263 return prefs::kSyncExtensionSettings; |
| 265 case syncable::EXTENSIONS: | 264 case syncer::EXTENSIONS: |
| 266 return prefs::kSyncExtensions; | 265 return prefs::kSyncExtensions; |
| 267 case syncable::APP_SETTINGS: | 266 case syncer::APP_SETTINGS: |
| 268 return prefs::kSyncAppSettings; | 267 return prefs::kSyncAppSettings; |
| 269 case syncable::APPS: | 268 case syncer::APPS: |
| 270 return prefs::kSyncApps; | 269 return prefs::kSyncApps; |
| 271 case syncable::SEARCH_ENGINES: | 270 case syncer::SEARCH_ENGINES: |
| 272 return prefs::kSyncSearchEngines; | 271 return prefs::kSyncSearchEngines; |
| 273 case syncable::SESSIONS: | 272 case syncer::SESSIONS: |
| 274 return prefs::kSyncSessions; | 273 return prefs::kSyncSessions; |
| 275 case syncable::APP_NOTIFICATIONS: | 274 case syncer::APP_NOTIFICATIONS: |
| 276 return prefs::kSyncAppNotifications; | 275 return prefs::kSyncAppNotifications; |
| 277 default: | 276 default: |
| 278 break; | 277 break; |
| 279 } | 278 } |
| 280 NOTREACHED(); | 279 NOTREACHED(); |
| 281 return NULL; | 280 return NULL; |
| 282 } | 281 } |
| 283 | 282 |
| 284 } // namespace | 283 } // namespace |
| 285 | 284 |
| 286 void SyncPrefs::RegisterPrefGroups() { | 285 void SyncPrefs::RegisterPrefGroups() { |
| 287 pref_groups_[syncable::APPS].Put(syncable::APP_NOTIFICATIONS); | 286 pref_groups_[syncer::APPS].Put(syncer::APP_NOTIFICATIONS); |
| 288 pref_groups_[syncable::APPS].Put(syncable::APP_SETTINGS); | 287 pref_groups_[syncer::APPS].Put(syncer::APP_SETTINGS); |
| 289 | 288 |
| 290 pref_groups_[syncable::AUTOFILL].Put(syncable::AUTOFILL_PROFILE); | 289 pref_groups_[syncer::AUTOFILL].Put(syncer::AUTOFILL_PROFILE); |
| 291 | 290 |
| 292 pref_groups_[syncable::EXTENSIONS].Put(syncable::EXTENSION_SETTINGS); | 291 pref_groups_[syncer::EXTENSIONS].Put(syncer::EXTENSION_SETTINGS); |
| 293 | 292 |
| 294 pref_groups_[syncable::PREFERENCES].Put(syncable::SEARCH_ENGINES); | 293 pref_groups_[syncer::PREFERENCES].Put(syncer::SEARCH_ENGINES); |
| 295 } | 294 } |
| 296 | 295 |
| 297 void SyncPrefs::RegisterPreferences() { | 296 void SyncPrefs::RegisterPreferences() { |
| 298 DCHECK(CalledOnValidThread()); | 297 DCHECK(CalledOnValidThread()); |
| 299 CHECK(pref_service_); | 298 CHECK(pref_service_); |
| 300 if (pref_service_->FindPreference(prefs::kSyncLastSyncedTime)) { | 299 if (pref_service_->FindPreference(prefs::kSyncLastSyncedTime)) { |
| 301 return; | 300 return; |
| 302 } | 301 } |
| 303 | 302 |
| 304 pref_service_->RegisterBooleanPref(prefs::kSyncHasSetupCompleted, | 303 pref_service_->RegisterBooleanPref(prefs::kSyncHasSetupCompleted, |
| (...skipping 15 matching lines...) Expand all Loading... |
| 320 #else | 319 #else |
| 321 bool enable_by_default = | 320 bool enable_by_default = |
| 322 !pref_service_->HasPrefPath(prefs::kSyncHasSetupCompleted); | 321 !pref_service_->HasPrefPath(prefs::kSyncHasSetupCompleted); |
| 323 #endif | 322 #endif |
| 324 | 323 |
| 325 pref_service_->RegisterBooleanPref(prefs::kSyncKeepEverythingSynced, | 324 pref_service_->RegisterBooleanPref(prefs::kSyncKeepEverythingSynced, |
| 326 enable_by_default, | 325 enable_by_default, |
| 327 PrefService::UNSYNCABLE_PREF); | 326 PrefService::UNSYNCABLE_PREF); |
| 328 | 327 |
| 329 // Treat bookmarks specially. | 328 // Treat bookmarks specially. |
| 330 RegisterDataTypePreferredPref(syncable::BOOKMARKS, true); | 329 RegisterDataTypePreferredPref(syncer::BOOKMARKS, true); |
| 331 for (int i = syncable::PREFERENCES; i < syncable::MODEL_TYPE_COUNT; ++i) { | 330 for (int i = syncer::PREFERENCES; i < syncer::MODEL_TYPE_COUNT; ++i) { |
| 332 const syncable::ModelType type = syncable::ModelTypeFromInt(i); | 331 const syncer::ModelType type = syncer::ModelTypeFromInt(i); |
| 333 // Also treat nigori specially. | 332 // Also treat nigori specially. |
| 334 if (type == syncable::NIGORI) { | 333 if (type == syncer::NIGORI) { |
| 335 continue; | 334 continue; |
| 336 } | 335 } |
| 337 RegisterDataTypePreferredPref(type, enable_by_default); | 336 RegisterDataTypePreferredPref(type, enable_by_default); |
| 338 } | 337 } |
| 339 | 338 |
| 340 pref_service_->RegisterBooleanPref(prefs::kSyncManaged, | 339 pref_service_->RegisterBooleanPref(prefs::kSyncManaged, |
| 341 false, | 340 false, |
| 342 PrefService::UNSYNCABLE_PREF); | 341 PrefService::UNSYNCABLE_PREF); |
| 343 pref_service_->RegisterStringPref(prefs::kSyncEncryptionBootstrapToken, | 342 pref_service_->RegisterStringPref(prefs::kSyncEncryptionBootstrapToken, |
| 344 "", | 343 "", |
| 345 PrefService::UNSYNCABLE_PREF); | 344 PrefService::UNSYNCABLE_PREF); |
| 346 #if defined(OS_CHROMEOS) | 345 #if defined(OS_CHROMEOS) |
| 347 pref_service_->RegisterStringPref(prefs::kSyncSpareBootstrapToken, | 346 pref_service_->RegisterStringPref(prefs::kSyncSpareBootstrapToken, |
| 348 "", | 347 "", |
| 349 PrefService::UNSYNCABLE_PREF); | 348 PrefService::UNSYNCABLE_PREF); |
| 350 #endif | 349 #endif |
| 351 | 350 |
| 352 // We will start prompting people about new data types after the launch of | 351 // 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 | 352 // SESSIONS - all previously launched data types are treated as if they are |
| 354 // already acknowledged. | 353 // already acknowledged. |
| 355 syncable::ModelTypeSet model_set; | 354 syncer::ModelTypeSet model_set; |
| 356 model_set.Put(syncable::BOOKMARKS); | 355 model_set.Put(syncer::BOOKMARKS); |
| 357 model_set.Put(syncable::PREFERENCES); | 356 model_set.Put(syncer::PREFERENCES); |
| 358 model_set.Put(syncable::PASSWORDS); | 357 model_set.Put(syncer::PASSWORDS); |
| 359 model_set.Put(syncable::AUTOFILL_PROFILE); | 358 model_set.Put(syncer::AUTOFILL_PROFILE); |
| 360 model_set.Put(syncable::AUTOFILL); | 359 model_set.Put(syncer::AUTOFILL); |
| 361 model_set.Put(syncable::THEMES); | 360 model_set.Put(syncer::THEMES); |
| 362 model_set.Put(syncable::EXTENSIONS); | 361 model_set.Put(syncer::EXTENSIONS); |
| 363 model_set.Put(syncable::NIGORI); | 362 model_set.Put(syncer::NIGORI); |
| 364 model_set.Put(syncable::SEARCH_ENGINES); | 363 model_set.Put(syncer::SEARCH_ENGINES); |
| 365 model_set.Put(syncable::APPS); | 364 model_set.Put(syncer::APPS); |
| 366 model_set.Put(syncable::TYPED_URLS); | 365 model_set.Put(syncer::TYPED_URLS); |
| 367 model_set.Put(syncable::SESSIONS); | 366 model_set.Put(syncer::SESSIONS); |
| 368 pref_service_->RegisterListPref(prefs::kSyncAcknowledgedSyncTypes, | 367 pref_service_->RegisterListPref(prefs::kSyncAcknowledgedSyncTypes, |
| 369 syncable::ModelTypeSetToValue(model_set), | 368 syncer::ModelTypeSetToValue(model_set), |
| 370 PrefService::UNSYNCABLE_PREF); | 369 PrefService::UNSYNCABLE_PREF); |
| 371 } | 370 } |
| 372 | 371 |
| 373 void SyncPrefs::RegisterDataTypePreferredPref(syncable::ModelType type, | 372 void SyncPrefs::RegisterDataTypePreferredPref(syncer::ModelType type, |
| 374 bool is_preferred) { | 373 bool is_preferred) { |
| 375 DCHECK(CalledOnValidThread()); | 374 DCHECK(CalledOnValidThread()); |
| 376 CHECK(pref_service_); | 375 CHECK(pref_service_); |
| 377 const char* pref_name = GetPrefNameForDataType(type); | 376 const char* pref_name = GetPrefNameForDataType(type); |
| 378 if (!pref_name) { | 377 if (!pref_name) { |
| 379 NOTREACHED(); | 378 NOTREACHED(); |
| 380 return; | 379 return; |
| 381 } | 380 } |
| 382 pref_service_->RegisterBooleanPref(pref_name, is_preferred, | 381 pref_service_->RegisterBooleanPref(pref_name, is_preferred, |
| 383 PrefService::UNSYNCABLE_PREF); | 382 PrefService::UNSYNCABLE_PREF); |
| 384 } | 383 } |
| 385 | 384 |
| 386 bool SyncPrefs::GetDataTypePreferred(syncable::ModelType type) const { | 385 bool SyncPrefs::GetDataTypePreferred(syncer::ModelType type) const { |
| 387 DCHECK(CalledOnValidThread()); | 386 DCHECK(CalledOnValidThread()); |
| 388 if (!pref_service_) { | 387 if (!pref_service_) { |
| 389 return false; | 388 return false; |
| 390 } | 389 } |
| 391 const char* pref_name = GetPrefNameForDataType(type); | 390 const char* pref_name = GetPrefNameForDataType(type); |
| 392 if (!pref_name) { | 391 if (!pref_name) { |
| 393 NOTREACHED(); | 392 NOTREACHED(); |
| 394 return false; | 393 return false; |
| 395 } | 394 } |
| 396 | 395 |
| 397 return pref_service_->GetBoolean(pref_name); | 396 return pref_service_->GetBoolean(pref_name); |
| 398 } | 397 } |
| 399 | 398 |
| 400 void SyncPrefs::SetDataTypePreferred( | 399 void SyncPrefs::SetDataTypePreferred( |
| 401 syncable::ModelType type, bool is_preferred) { | 400 syncer::ModelType type, bool is_preferred) { |
| 402 DCHECK(CalledOnValidThread()); | 401 DCHECK(CalledOnValidThread()); |
| 403 CHECK(pref_service_); | 402 CHECK(pref_service_); |
| 404 const char* pref_name = GetPrefNameForDataType(type); | 403 const char* pref_name = GetPrefNameForDataType(type); |
| 405 if (!pref_name) { | 404 if (!pref_name) { |
| 406 NOTREACHED(); | 405 NOTREACHED(); |
| 407 return; | 406 return; |
| 408 } | 407 } |
| 409 pref_service_->SetBoolean(pref_name, is_preferred); | 408 pref_service_->SetBoolean(pref_name, is_preferred); |
| 410 } | 409 } |
| 411 | 410 |
| 412 syncable::ModelTypeSet SyncPrefs::ResolvePrefGroups( | 411 syncer::ModelTypeSet SyncPrefs::ResolvePrefGroups( |
| 413 syncable::ModelTypeSet registered_types, | 412 syncer::ModelTypeSet registered_types, |
| 414 syncable::ModelTypeSet types) const { | 413 syncer::ModelTypeSet types) const { |
| 415 DCHECK(registered_types.HasAll(types)); | 414 DCHECK(registered_types.HasAll(types)); |
| 416 syncable::ModelTypeSet types_with_groups = types; | 415 syncer::ModelTypeSet types_with_groups = types; |
| 417 for (PrefGroupsMap::const_iterator i = pref_groups_.begin(); | 416 for (PrefGroupsMap::const_iterator i = pref_groups_.begin(); |
| 418 i != pref_groups_.end(); ++i) { | 417 i != pref_groups_.end(); ++i) { |
| 419 if (types.Has(i->first)) | 418 if (types.Has(i->first)) |
| 420 types_with_groups.PutAll(i->second); | 419 types_with_groups.PutAll(i->second); |
| 421 else | 420 else |
| 422 types_with_groups.RemoveAll(i->second); | 421 types_with_groups.RemoveAll(i->second); |
| 423 } | 422 } |
| 424 types_with_groups.RetainAll(registered_types); | 423 types_with_groups.RetainAll(registered_types); |
| 425 return types_with_groups; | 424 return types_with_groups; |
| 426 } | 425 } |
| 427 | 426 |
| 428 } // namespace browser_sync | 427 } // namespace browser_sync |
| OLD | NEW |