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

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: Now acknowledges sync types when notification is clocked. 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,
akalin 2011/08/02 20:16:53 Wouldn't it better to have this as a List pref?
Andrew T Wilson (Slow) 2011/08/02 22:07:42 Not really - I really just want to serialize a Mod
akalin 2011/08/04 01:26:06 Yes, but it's conceivable that in the future that
Andrew T Wilson (Slow) 2011/08/07 02:45:38 So, in the interest of getting this landed, I made
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 577 matching lines...) Expand 10 before | Expand all | Expand 10 after
904 if (!backend_.get() && 922 if (!backend_.get() &&
905 unrecoverable_error_detected_ == false) { 923 unrecoverable_error_detected_ == false) {
906 NOTREACHED(); 924 NOTREACHED();
907 return; 925 return;
908 } 926 }
909 927
910 profile_->GetPrefs()->SetBoolean(prefs::kKeepEverythingSynced, 928 profile_->GetPrefs()->SetBoolean(prefs::kKeepEverythingSynced,
911 sync_everything); 929 sync_everything);
912 930
913 ChangePreferredDataTypes(chosen_types); 931 ChangePreferredDataTypes(chosen_types);
932 AcknowledgeSyncedTypes();
914 profile_->GetPrefs()->ScheduleSavePersistentPrefs(); 933 profile_->GetPrefs()->ScheduleSavePersistentPrefs();
915 } 934 }
916 935
917 void ProfileSyncService::OnUserCancelledDialog() { 936 void ProfileSyncService::OnUserCancelledDialog() {
918 if (!HasSyncSetupCompleted()) { 937 if (!HasSyncSetupCompleted()) {
919 // A sync dialog was aborted before authentication. 938 // A sync dialog was aborted before authentication.
920 // Rollback. 939 // Rollback.
921 expect_sync_configuration_aborted_ = true; 940 expect_sync_configuration_aborted_ = true;
922 DisableForUser(); 941 DisableForUser();
923 } 942 }
(...skipping 432 matching lines...) Expand 10 before | Expand all | Expand 10 after
1356 // is initialized, all enabled data types are consistent with one 1375 // is initialized, all enabled data types are consistent with one
1357 // another, and no unrecoverable error has transpired. 1376 // another, and no unrecoverable error has transpired.
1358 if (unrecoverable_error_detected_) 1377 if (unrecoverable_error_detected_)
1359 return false; 1378 return false;
1360 1379
1361 if (!data_type_manager_.get()) 1380 if (!data_type_manager_.get())
1362 return false; 1381 return false;
1363 1382
1364 return data_type_manager_->state() == DataTypeManager::CONFIGURED; 1383 return data_type_manager_->state() == DataTypeManager::CONFIGURED;
1365 } 1384 }
1385
1386 void ProfileSyncService::AcknowledgeSyncedTypes() {
1387 syncable::ModelTypeBitSet acknowledged;
1388 CHECK(syncable::ModelTypeBitSetFromString(
1389 profile_->GetPrefs()->GetString(prefs::kAcknowledgedSyncTypes),
1390 &acknowledged));
1391 syncable::ModelTypeSet registered;
1392 GetRegisteredDataTypes(&registered);
1393 syncable::ModelTypeBitSet registered_bit_set =
1394 syncable::ModelTypeBitSetFromSet(registered);
1395
1396 // Add the registered types to the current set of acknowledged types, and then
1397 // store the resulting set in prefs.
1398 acknowledged |= registered_bit_set;
1399 profile_->GetPrefs()->SetString(
akalin 2011/08/04 01:26:06 and here you'd just do: scoped_ptr<ListValue> ack
Andrew T Wilson (Slow) 2011/08/07 02:45:38 Done.
1400 prefs::kAcknowledgedSyncTypes,
1401 syncable::ModelTypeBitSetToString(acknowledged));
1402 profile_->GetPrefs()->ScheduleSavePersistentPrefs();
1403 }
1404
1405 string16 ProfileSyncService::GetSyncNotification() {
1406 string16 promo;
1407 if (HasSyncSetupCompleted() &&
1408 profile_->GetPrefs()->GetBoolean(prefs::kKeepEverythingSynced)) {
1409 // User is "syncing everything" - see if we've added any new data types.
1410 syncable::ModelTypeBitSet acknowledged;
1411 CHECK(syncable::ModelTypeBitSetFromString(
akalin 2011/08/04 01:26:06 I guess here you'd have to write ModelTypeBitSetFr
Andrew T Wilson (Slow) 2011/08/07 02:45:38 Done.
1412 profile_->GetPrefs()->GetString(prefs::kAcknowledgedSyncTypes),
1413 &acknowledged));
1414 syncable::ModelTypeSet registered;
1415 GetRegisteredDataTypes(&registered);
1416 syncable::ModelTypeBitSet registered_bit_set =
1417 syncable::ModelTypeBitSetFromSet(registered);
1418
1419 syncable::ModelTypeBitSet unacknowledged =
1420 registered_bit_set & ~acknowledged;
1421 // TODO(sync): As we add new data types, we'll probably need some more
1422 // generic string to display to the user, since the method below won't
1423 // scale indefinitely (we'd need N*(N+1)/2 different strings to represent
1424 // all the combinations of unacknowledged types). But for now, we just
1425 // have sessions and typed urls so this is OK.
1426 if (unacknowledged.test(syncable::SESSIONS) &&
1427 unacknowledged.test(syncable::TYPED_URLS)) {
1428 return l10n_util::GetStringUTF16(IDS_SYNC_ADDED_SESSIONS_AND_TYPED_URLS);
1429 } else if (unacknowledged.test(syncable::SESSIONS)) {
1430 return l10n_util::GetStringUTF16(IDS_SYNC_ADDED_SESSIONS);
1431 } else if (unacknowledged.test(syncable::TYPED_URLS)) {
1432 return l10n_util::GetStringUTF16(IDS_SYNC_ADDED_TYPED_URLS);
1433 } else {
1434 // Shouldn't be possible for any other types to be unacknowledged.
1435 DCHECK(!unacknowledged.any());
1436 }
1437 }
1438 return promo;
1439 }
1440
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698