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/profile_sync_service.h" | 5 #include "chrome/browser/sync/profile_sync_service.h" |
6 | 6 |
7 #include <stddef.h> | 7 #include <stddef.h> |
8 #include <map> | 8 #include <map> |
9 #include <ostream> | 9 #include <ostream> |
10 #include <set> | 10 #include <set> |
(...skipping 296 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
307 pref_service->RegisterBooleanPref(prefs::kSyncManaged, | 307 pref_service->RegisterBooleanPref(prefs::kSyncManaged, |
308 false, | 308 false, |
309 PrefService::UNSYNCABLE_PREF); | 309 PrefService::UNSYNCABLE_PREF); |
310 pref_service->RegisterStringPref(prefs::kEncryptionBootstrapToken, | 310 pref_service->RegisterStringPref(prefs::kEncryptionBootstrapToken, |
311 "", | 311 "", |
312 PrefService::UNSYNCABLE_PREF); | 312 PrefService::UNSYNCABLE_PREF); |
313 | 313 |
314 pref_service->RegisterBooleanPref(prefs::kSyncAutofillProfile, | 314 pref_service->RegisterBooleanPref(prefs::kSyncAutofillProfile, |
315 enable_by_default, | 315 enable_by_default, |
316 PrefService::UNSYNCABLE_PREF); | 316 PrefService::UNSYNCABLE_PREF); |
| 317 |
| 318 // We started prompting people about new data types starting with the |
| 319 // rollout of TYPED_URLs - all previously launched data types are treated |
| 320 // as if they are already acknowledged. |
| 321 syncable::ModelTypeBitSet model_set; |
| 322 model_set.set(syncable::BOOKMARKS); |
| 323 model_set.set(syncable::PREFERENCES); |
| 324 model_set.set(syncable::PASSWORDS); |
| 325 model_set.set(syncable::AUTOFILL_PROFILE); |
| 326 model_set.set(syncable::AUTOFILL); |
| 327 model_set.set(syncable::THEMES); |
| 328 model_set.set(syncable::EXTENSIONS); |
| 329 model_set.set(syncable::NIGORI); |
| 330 model_set.set(syncable::SEARCH_ENGINES); |
| 331 model_set.set(syncable::APPS); |
| 332 pref_service->RegisterStringPref(prefs::kAcknowledgedSyncTypes, |
| 333 syncable::ModelTypeBitSetToString(model_set), |
| 334 PrefService::UNSYNCABLE_PREF); |
317 } | 335 } |
318 | 336 |
319 void ProfileSyncService::ClearPreferences() { | 337 void ProfileSyncService::ClearPreferences() { |
320 PrefService* pref_service = profile_->GetPrefs(); | 338 PrefService* pref_service = profile_->GetPrefs(); |
321 pref_service->ClearPref(prefs::kSyncLastSyncedTime); | 339 pref_service->ClearPref(prefs::kSyncLastSyncedTime); |
322 pref_service->ClearPref(prefs::kSyncHasSetupCompleted); | 340 pref_service->ClearPref(prefs::kSyncHasSetupCompleted); |
323 pref_service->ClearPref(prefs::kEncryptionBootstrapToken); | 341 pref_service->ClearPref(prefs::kEncryptionBootstrapToken); |
324 | 342 |
325 // TODO(nick): The current behavior does not clear e.g. prefs::kSyncBookmarks. | 343 // TODO(nick): The current behavior does not clear e.g. prefs::kSyncBookmarks. |
326 // Is that really what we want? | 344 // Is that really what we want? |
(...skipping 578 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
905 if (!backend_.get() && | 923 if (!backend_.get() && |
906 unrecoverable_error_detected_ == false) { | 924 unrecoverable_error_detected_ == false) { |
907 NOTREACHED(); | 925 NOTREACHED(); |
908 return; | 926 return; |
909 } | 927 } |
910 | 928 |
911 profile_->GetPrefs()->SetBoolean(prefs::kKeepEverythingSynced, | 929 profile_->GetPrefs()->SetBoolean(prefs::kKeepEverythingSynced, |
912 sync_everything); | 930 sync_everything); |
913 | 931 |
914 ChangePreferredDataTypes(chosen_types); | 932 ChangePreferredDataTypes(chosen_types); |
| 933 AcknowledgeSyncedTypes(); |
915 profile_->GetPrefs()->ScheduleSavePersistentPrefs(); | 934 profile_->GetPrefs()->ScheduleSavePersistentPrefs(); |
916 } | 935 } |
917 | 936 |
918 void ProfileSyncService::OnUserCancelledDialog() { | 937 void ProfileSyncService::OnUserCancelledDialog() { |
919 if (!HasSyncSetupCompleted()) { | 938 if (!HasSyncSetupCompleted()) { |
920 // A sync dialog was aborted before authentication. | 939 // A sync dialog was aborted before authentication. |
921 // Rollback. | 940 // Rollback. |
922 expect_sync_configuration_aborted_ = true; | 941 expect_sync_configuration_aborted_ = true; |
923 DisableForUser(); | 942 DisableForUser(); |
924 } | 943 } |
(...skipping 444 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1369 // is initialized, all enabled data types are consistent with one | 1388 // is initialized, all enabled data types are consistent with one |
1370 // another, and no unrecoverable error has transpired. | 1389 // another, and no unrecoverable error has transpired. |
1371 if (unrecoverable_error_detected_) | 1390 if (unrecoverable_error_detected_) |
1372 return false; | 1391 return false; |
1373 | 1392 |
1374 if (!data_type_manager_.get()) | 1393 if (!data_type_manager_.get()) |
1375 return false; | 1394 return false; |
1376 | 1395 |
1377 return data_type_manager_->state() == DataTypeManager::CONFIGURED; | 1396 return data_type_manager_->state() == DataTypeManager::CONFIGURED; |
1378 } | 1397 } |
| 1398 |
| 1399 void ProfileSyncService::AcknowledgeSyncedTypes() { |
| 1400 syncable::ModelTypeBitSet acknowledged; |
| 1401 CHECK(syncable::ModelTypeBitSetFromString( |
| 1402 profile_->GetPrefs()->GetString(prefs::kAcknowledgedSyncTypes), |
| 1403 &acknowledged)); |
| 1404 syncable::ModelTypeSet registered; |
| 1405 GetRegisteredDataTypes(®istered); |
| 1406 syncable::ModelTypeBitSet registered_bit_set = |
| 1407 syncable::ModelTypeBitSetFromSet(registered); |
| 1408 |
| 1409 // Add the registered types to the current set of acknowledged types, and then |
| 1410 // store the resulting set in prefs. |
| 1411 acknowledged |= registered_bit_set; |
| 1412 profile_->GetPrefs()->SetString( |
| 1413 prefs::kAcknowledgedSyncTypes, |
| 1414 syncable::ModelTypeBitSetToString(acknowledged)); |
| 1415 profile_->GetPrefs()->ScheduleSavePersistentPrefs(); |
| 1416 } |
| 1417 |
| 1418 string16 ProfileSyncService::GetSyncNotification() const { |
| 1419 string16 promo; |
| 1420 if (HasSyncSetupCompleted() && |
| 1421 profile_->GetPrefs()->GetBoolean(prefs::kKeepEverythingSynced)) { |
| 1422 // User is "syncing everything" - see if we've added any new data types. |
| 1423 syncable::ModelTypeBitSet acknowledged; |
| 1424 CHECK(syncable::ModelTypeBitSetFromString( |
| 1425 profile_->GetPrefs()->GetString(prefs::kAcknowledgedSyncTypes), |
| 1426 &acknowledged)); |
| 1427 syncable::ModelTypeSet registered; |
| 1428 GetRegisteredDataTypes(®istered); |
| 1429 syncable::ModelTypeBitSet registered_bit_set = |
| 1430 syncable::ModelTypeBitSetFromSet(registered); |
| 1431 |
| 1432 syncable::ModelTypeBitSet unacknowledged = |
| 1433 registered_bit_set & ~acknowledged; |
| 1434 // TODO(sync): As we add new data types, we'll probably need some more |
| 1435 // generic string to display to the user, since the method below won't |
| 1436 // scale indefinitely (we'd need N*(N+1)/2 different strings to represent |
| 1437 // all the combinations of unacknowledged types). But for now, we just |
| 1438 // have sessions and typed urls so this is OK. |
| 1439 if (unacknowledged.test(syncable::SESSIONS) && |
| 1440 unacknowledged.test(syncable::TYPED_URLS)) { |
| 1441 return l10n_util::GetStringUTF16(IDS_SYNC_ADDED_SESSIONS_AND_TYPED_URLS); |
| 1442 } else if (unacknowledged.test(syncable::SESSIONS)) { |
| 1443 return l10n_util::GetStringUTF16(IDS_SYNC_ADDED_SESSIONS); |
| 1444 } else if (unacknowledged.test(syncable::TYPED_URLS)) { |
| 1445 return l10n_util::GetStringUTF16(IDS_SYNC_ADDED_TYPED_URLS); |
| 1446 } else { |
| 1447 // Shouldn't be possible for any other types to be unacknowledged. |
| 1448 DCHECK(!unacknowledged.any()); |
| 1449 } |
| 1450 } |
| 1451 return promo; |
| 1452 } |
| 1453 |
OLD | NEW |