| 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::ModelEnumSet SyncPrefs::GetPreferredDataTypes( | 126 syncable::ModelTypeSet SyncPrefs::GetPreferredDataTypes( |
| 127 syncable::ModelEnumSet registered_types) const { | 127 syncable::ModelTypeSet 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::ModelEnumSet(); | 130 return syncable::ModelTypeSet(); |
| 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::ModelEnumSet user_selectable_types(registered_types); | 139 syncable::ModelTypeSet user_selectable_types(registered_types); |
| 140 DCHECK(!user_selectable_types.Has(syncable::NIGORI)); | 140 DCHECK(!user_selectable_types.Has(syncable::NIGORI)); |
| 141 user_selectable_types.Remove(syncable::AUTOFILL_PROFILE); | 141 user_selectable_types.Remove(syncable::AUTOFILL_PROFILE); |
| 142 user_selectable_types.Remove(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.Remove(syncable::APP_NOTIFICATIONS); | 147 user_selectable_types.Remove(syncable::APP_NOTIFICATIONS); |
| 148 | 148 |
| 149 syncable::ModelEnumSet preferred_types; | 149 syncable::ModelTypeSet preferred_types; |
| 150 | 150 |
| 151 for (syncable::ModelEnumSet::Iterator it = user_selectable_types.First(); | 151 for (syncable::ModelTypeSet::Iterator it = user_selectable_types.First(); |
| 152 it.Good(); it.Inc()) { | 152 it.Good(); it.Inc()) { |
| 153 if (GetDataTypePreferred(it.Get())) { | 153 if (GetDataTypePreferred(it.Get())) { |
| 154 preferred_types.Put(it.Get()); | 154 preferred_types.Put(it.Get()); |
| 155 } | 155 } |
| 156 } | 156 } |
| 157 | 157 |
| 158 // Group the enabled/disabled state of autofill_profile with autofill, and | 158 // Group the enabled/disabled state of autofill_profile with autofill, and |
| 159 // search_engines with preferences (since only autofill and preferences are | 159 // search_engines with preferences (since only autofill and preferences are |
| 160 // shown on the UI). | 160 // shown on the UI). |
| 161 if (registered_types.Has(syncable::AUTOFILL) && | 161 if (registered_types.Has(syncable::AUTOFILL) && |
| (...skipping 12 matching lines...) Expand all Loading... |
| 174 if (registered_types.Has(syncable::APPS) && | 174 if (registered_types.Has(syncable::APPS) && |
| 175 registered_types.Has(syncable::APP_NOTIFICATIONS) && | 175 registered_types.Has(syncable::APP_NOTIFICATIONS) && |
| 176 GetDataTypePreferred(syncable::APPS)) { | 176 GetDataTypePreferred(syncable::APPS)) { |
| 177 preferred_types.Put(syncable::APP_NOTIFICATIONS); | 177 preferred_types.Put(syncable::APP_NOTIFICATIONS); |
| 178 } | 178 } |
| 179 | 179 |
| 180 return preferred_types; | 180 return preferred_types; |
| 181 } | 181 } |
| 182 | 182 |
| 183 void SyncPrefs::SetPreferredDataTypes( | 183 void SyncPrefs::SetPreferredDataTypes( |
| 184 syncable::ModelEnumSet registered_types, | 184 syncable::ModelTypeSet registered_types, |
| 185 syncable::ModelEnumSet preferred_types) { | 185 syncable::ModelTypeSet preferred_types) { |
| 186 DCHECK(non_thread_safe_.CalledOnValidThread()); | 186 DCHECK(non_thread_safe_.CalledOnValidThread()); |
| 187 CHECK(pref_service_); | 187 CHECK(pref_service_); |
| 188 DCHECK(registered_types.HasAll(preferred_types)); | 188 DCHECK(registered_types.HasAll(preferred_types)); |
| 189 syncable::ModelEnumSet preferred_types_with_dependents(preferred_types); | 189 syncable::ModelTypeSet preferred_types_with_dependents(preferred_types); |
| 190 // Set autofill_profile to the same enabled/disabled state as | 190 // Set autofill_profile to the same enabled/disabled state as |
| 191 // autofill (since only autofill is shown in the UI). | 191 // autofill (since only autofill is shown in the UI). |
| 192 if (registered_types.Has(syncable::AUTOFILL) && | 192 if (registered_types.Has(syncable::AUTOFILL) && |
| 193 registered_types.Has(syncable::AUTOFILL_PROFILE)) { | 193 registered_types.Has(syncable::AUTOFILL_PROFILE)) { |
| 194 if (preferred_types_with_dependents.Has(syncable::AUTOFILL)) { | 194 if (preferred_types_with_dependents.Has(syncable::AUTOFILL)) { |
| 195 preferred_types_with_dependents.Put(syncable::AUTOFILL_PROFILE); | 195 preferred_types_with_dependents.Put(syncable::AUTOFILL_PROFILE); |
| 196 } else { | 196 } else { |
| 197 preferred_types_with_dependents.Remove(syncable::AUTOFILL_PROFILE); | 197 preferred_types_with_dependents.Remove(syncable::AUTOFILL_PROFILE); |
| 198 } | 198 } |
| 199 } | 199 } |
| (...skipping 11 matching lines...) Expand all Loading... |
| 211 // preferences (since only preferences is shown in the UI). | 211 // preferences (since only preferences is shown in the UI). |
| 212 if (registered_types.Has(syncable::PREFERENCES) && | 212 if (registered_types.Has(syncable::PREFERENCES) && |
| 213 registered_types.Has(syncable::SEARCH_ENGINES)) { | 213 registered_types.Has(syncable::SEARCH_ENGINES)) { |
| 214 if (preferred_types_with_dependents.Has(syncable::PREFERENCES)) { | 214 if (preferred_types_with_dependents.Has(syncable::PREFERENCES)) { |
| 215 preferred_types_with_dependents.Put(syncable::SEARCH_ENGINES); | 215 preferred_types_with_dependents.Put(syncable::SEARCH_ENGINES); |
| 216 } else { | 216 } else { |
| 217 preferred_types_with_dependents.Remove(syncable::SEARCH_ENGINES); | 217 preferred_types_with_dependents.Remove(syncable::SEARCH_ENGINES); |
| 218 } | 218 } |
| 219 } | 219 } |
| 220 | 220 |
| 221 for (syncable::ModelEnumSet::Iterator it = registered_types.First(); | 221 for (syncable::ModelTypeSet::Iterator it = registered_types.First(); |
| 222 it.Good(); it.Inc()) { | 222 it.Good(); it.Inc()) { |
| 223 SetDataTypePreferred( | 223 SetDataTypePreferred( |
| 224 it.Get(), preferred_types_with_dependents.Has(it.Get())); | 224 it.Get(), preferred_types_with_dependents.Has(it.Get())); |
| 225 } | 225 } |
| 226 } | 226 } |
| 227 | 227 |
| 228 bool SyncPrefs::IsManaged() const { | 228 bool SyncPrefs::IsManaged() const { |
| 229 DCHECK(non_thread_safe_.CalledOnValidThread()); | 229 DCHECK(non_thread_safe_.CalledOnValidThread()); |
| 230 return pref_service_ && pref_service_->GetBoolean(prefs::kSyncManaged); | 230 return pref_service_ && pref_service_->GetBoolean(prefs::kSyncManaged); |
| 231 } | 231 } |
| (...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 306 max_versions.begin(); | 306 max_versions.begin(); |
| 307 it != max_versions.end(); ++it) { | 307 it != max_versions.end(); ++it) { |
| 308 max_versions_dict.SetString( | 308 max_versions_dict.SetString( |
| 309 base::IntToString(it->first), | 309 base::IntToString(it->first), |
| 310 base::Int64ToString(it->second)); | 310 base::Int64ToString(it->second)); |
| 311 } | 311 } |
| 312 pref_service_->Set(prefs::kSyncMaxInvalidationVersions, max_versions_dict); | 312 pref_service_->Set(prefs::kSyncMaxInvalidationVersions, max_versions_dict); |
| 313 } | 313 } |
| 314 | 314 |
| 315 void SyncPrefs::AcknowledgeSyncedTypes( | 315 void SyncPrefs::AcknowledgeSyncedTypes( |
| 316 syncable::ModelEnumSet types) { | 316 syncable::ModelTypeSet types) { |
| 317 DCHECK(non_thread_safe_.CalledOnValidThread()); | 317 DCHECK(non_thread_safe_.CalledOnValidThread()); |
| 318 CHECK(pref_service_); | 318 CHECK(pref_service_); |
| 319 // Add the types to the current set of acknowledged | 319 // Add the types to the current set of acknowledged |
| 320 // types, and then store the resulting set in prefs. | 320 // types, and then store the resulting set in prefs. |
| 321 const syncable::ModelEnumSet acknowledged_types = | 321 const syncable::ModelTypeSet acknowledged_types = |
| 322 Union(types, | 322 Union(types, |
| 323 syncable::ModelEnumSetFromValue( | 323 syncable::ModelTypeSetFromValue( |
| 324 *pref_service_->GetList(prefs::kSyncAcknowledgedSyncTypes))); | 324 *pref_service_->GetList(prefs::kSyncAcknowledgedSyncTypes))); |
| 325 | 325 |
| 326 scoped_ptr<ListValue> value( | 326 scoped_ptr<ListValue> value( |
| 327 syncable::ModelEnumSetToValue(acknowledged_types)); | 327 syncable::ModelTypeSetToValue(acknowledged_types)); |
| 328 pref_service_->Set(prefs::kSyncAcknowledgedSyncTypes, *value); | 328 pref_service_->Set(prefs::kSyncAcknowledgedSyncTypes, *value); |
| 329 pref_service_->ScheduleSavePersistentPrefs(); | 329 pref_service_->ScheduleSavePersistentPrefs(); |
| 330 } | 330 } |
| 331 | 331 |
| 332 void SyncPrefs::Observe(int type, | 332 void SyncPrefs::Observe(int type, |
| 333 const content::NotificationSource& source, | 333 const content::NotificationSource& source, |
| 334 const content::NotificationDetails& details) { | 334 const content::NotificationDetails& details) { |
| 335 DCHECK(non_thread_safe_.CalledOnValidThread()); | 335 DCHECK(non_thread_safe_.CalledOnValidThread()); |
| 336 DCHECK(content::Source<PrefService>(pref_service_) == source); | 336 DCHECK(content::Source<PrefService>(pref_service_) == source); |
| 337 switch (type) { | 337 switch (type) { |
| (...skipping 12 matching lines...) Expand all Loading... |
| 350 } | 350 } |
| 351 } | 351 } |
| 352 | 352 |
| 353 void SyncPrefs::SetManagedForTest(bool is_managed) { | 353 void SyncPrefs::SetManagedForTest(bool is_managed) { |
| 354 DCHECK(non_thread_safe_.CalledOnValidThread()); | 354 DCHECK(non_thread_safe_.CalledOnValidThread()); |
| 355 CHECK(pref_service_); | 355 CHECK(pref_service_); |
| 356 pref_service_->SetBoolean(prefs::kSyncManaged, is_managed); | 356 pref_service_->SetBoolean(prefs::kSyncManaged, is_managed); |
| 357 pref_service_->ScheduleSavePersistentPrefs(); | 357 pref_service_->ScheduleSavePersistentPrefs(); |
| 358 } | 358 } |
| 359 | 359 |
| 360 syncable::ModelEnumSet SyncPrefs::GetAcknowledgeSyncedTypesForTest() const { | 360 syncable::ModelTypeSet SyncPrefs::GetAcknowledgeSyncedTypesForTest() const { |
| 361 DCHECK(non_thread_safe_.CalledOnValidThread()); | 361 DCHECK(non_thread_safe_.CalledOnValidThread()); |
| 362 if (!pref_service_) { | 362 if (!pref_service_) { |
| 363 return syncable::ModelEnumSet(); | 363 return syncable::ModelTypeSet(); |
| 364 } | 364 } |
| 365 return syncable::ModelEnumSetFromValue( | 365 return syncable::ModelTypeSetFromValue( |
| 366 *pref_service_->GetList(prefs::kSyncAcknowledgedSyncTypes)); | 366 *pref_service_->GetList(prefs::kSyncAcknowledgedSyncTypes)); |
| 367 } | 367 } |
| 368 | 368 |
| 369 namespace { | 369 namespace { |
| 370 | 370 |
| 371 const char* GetPrefNameForDataType(syncable::ModelType data_type) { | 371 const char* GetPrefNameForDataType(syncable::ModelType data_type) { |
| 372 switch (data_type) { | 372 switch (data_type) { |
| 373 case syncable::BOOKMARKS: | 373 case syncable::BOOKMARKS: |
| 374 return prefs::kSyncBookmarks; | 374 return prefs::kSyncBookmarks; |
| 375 case syncable::PASSWORDS: | 375 case syncable::PASSWORDS: |
| (...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 453 pref_service_->RegisterBooleanPref(prefs::kSyncManaged, | 453 pref_service_->RegisterBooleanPref(prefs::kSyncManaged, |
| 454 false, | 454 false, |
| 455 PrefService::UNSYNCABLE_PREF); | 455 PrefService::UNSYNCABLE_PREF); |
| 456 pref_service_->RegisterStringPref(prefs::kSyncEncryptionBootstrapToken, | 456 pref_service_->RegisterStringPref(prefs::kSyncEncryptionBootstrapToken, |
| 457 "", | 457 "", |
| 458 PrefService::UNSYNCABLE_PREF); | 458 PrefService::UNSYNCABLE_PREF); |
| 459 | 459 |
| 460 // We will start prompting people about new data types after the launch of | 460 // We will start prompting people about new data types after the launch of |
| 461 // SESSIONS - all previously launched data types are treated as if they are | 461 // SESSIONS - all previously launched data types are treated as if they are |
| 462 // already acknowledged. | 462 // already acknowledged. |
| 463 syncable::ModelEnumSet model_set; | 463 syncable::ModelTypeSet model_set; |
| 464 model_set.Put(syncable::BOOKMARKS); | 464 model_set.Put(syncable::BOOKMARKS); |
| 465 model_set.Put(syncable::PREFERENCES); | 465 model_set.Put(syncable::PREFERENCES); |
| 466 model_set.Put(syncable::PASSWORDS); | 466 model_set.Put(syncable::PASSWORDS); |
| 467 model_set.Put(syncable::AUTOFILL_PROFILE); | 467 model_set.Put(syncable::AUTOFILL_PROFILE); |
| 468 model_set.Put(syncable::AUTOFILL); | 468 model_set.Put(syncable::AUTOFILL); |
| 469 model_set.Put(syncable::THEMES); | 469 model_set.Put(syncable::THEMES); |
| 470 model_set.Put(syncable::EXTENSIONS); | 470 model_set.Put(syncable::EXTENSIONS); |
| 471 model_set.Put(syncable::NIGORI); | 471 model_set.Put(syncable::NIGORI); |
| 472 model_set.Put(syncable::SEARCH_ENGINES); | 472 model_set.Put(syncable::SEARCH_ENGINES); |
| 473 model_set.Put(syncable::APPS); | 473 model_set.Put(syncable::APPS); |
| 474 model_set.Put(syncable::TYPED_URLS); | 474 model_set.Put(syncable::TYPED_URLS); |
| 475 model_set.Put(syncable::SESSIONS); | 475 model_set.Put(syncable::SESSIONS); |
| 476 pref_service_->RegisterListPref(prefs::kSyncAcknowledgedSyncTypes, | 476 pref_service_->RegisterListPref(prefs::kSyncAcknowledgedSyncTypes, |
| 477 syncable::ModelEnumSetToValue(model_set), | 477 syncable::ModelTypeSetToValue(model_set), |
| 478 PrefService::UNSYNCABLE_PREF); | 478 PrefService::UNSYNCABLE_PREF); |
| 479 | 479 |
| 480 pref_service_->RegisterDictionaryPref(prefs::kSyncMaxInvalidationVersions, | 480 pref_service_->RegisterDictionaryPref(prefs::kSyncMaxInvalidationVersions, |
| 481 PrefService::UNSYNCABLE_PREF); | 481 PrefService::UNSYNCABLE_PREF); |
| 482 } | 482 } |
| 483 | 483 |
| 484 void SyncPrefs::RegisterDataTypePreferredPref(syncable::ModelType type, | 484 void SyncPrefs::RegisterDataTypePreferredPref(syncable::ModelType type, |
| 485 bool is_preferred) { | 485 bool is_preferred) { |
| 486 DCHECK(non_thread_safe_.CalledOnValidThread()); | 486 DCHECK(non_thread_safe_.CalledOnValidThread()); |
| 487 CHECK(pref_service_); | 487 CHECK(pref_service_); |
| (...skipping 27 matching lines...) Expand all Loading... |
| 515 const char* pref_name = GetPrefNameForDataType(type); | 515 const char* pref_name = GetPrefNameForDataType(type); |
| 516 if (!pref_name) { | 516 if (!pref_name) { |
| 517 NOTREACHED(); | 517 NOTREACHED(); |
| 518 return; | 518 return; |
| 519 } | 519 } |
| 520 pref_service_->SetBoolean(pref_name, is_preferred); | 520 pref_service_->SetBoolean(pref_name, is_preferred); |
| 521 pref_service_->ScheduleSavePersistentPrefs(); | 521 pref_service_->ScheduleSavePersistentPrefs(); |
| 522 } | 522 } |
| 523 | 523 |
| 524 } // namespace browser_sync | 524 } // namespace browser_sync |
| OLD | NEW |