Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(203)

Side by Side Diff: chrome/browser/sync/profile_sync_service.cc

Issue 7481023: Adding notifications for new sync types. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: More changes for review feedback. Created 9 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
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
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
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
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(&registered);
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(&registered);
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698