15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)#include "components/sync_driver/sync_prefs.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/logging.h" 82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/prefs/pref_member.h" 92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/prefs/pref_service.h" 102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/strings/string_number_conversions.h" 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/values.h" 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "build/build_config.h" 13cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "components/pref_registry/pref_registry_syncable.h" 1423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)#include "components/sync_driver/pref_names.h" 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)namespace sync_driver { 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)SyncPrefObserver::~SyncPrefObserver() {} 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)SyncPrefs::SyncPrefs(PrefService* pref_service) : pref_service_(pref_service) { 21f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) DCHECK(pref_service); 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RegisterPrefGroups(); 23f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Watch the preference that indicates sync is managed so we can take 24f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // appropriate action. 2523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) pref_sync_managed_.Init( 2623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) prefs::kSyncManaged, 2723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) pref_service_, 2823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) base::Bind(&SyncPrefs::OnSyncManagedPrefChanged, base::Unretained(this))); 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 31cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)SyncPrefs::SyncPrefs() : pref_service_(NULL) {} 32cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 3323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)SyncPrefs::~SyncPrefs() { DCHECK(CalledOnValidThread()); } 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// static 367dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochvoid SyncPrefs::RegisterProfilePrefs( 377dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch user_prefs::PrefRegistrySyncable* registry) { 38c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) registry->RegisterBooleanPref( 39c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) prefs::kSyncHasSetupCompleted, 40c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) false, 41c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF); 42c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) registry->RegisterBooleanPref( 43c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) prefs::kSyncSuppressStart, 44c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) false, 45c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF); 46c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) registry->RegisterInt64Pref( 47c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) prefs::kSyncLastSyncedTime, 48c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 0, 49c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF); 5046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) registry->RegisterInt64Pref( 5146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) prefs::kSyncFirstSyncTime, 5246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 0, 5346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF); 542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // All datatypes are on by default, but this gets set explicitly 562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // when you configure sync (when turning it on), in 572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // ProfileSyncService::OnUserChoseDatatypes. 58c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) registry->RegisterBooleanPref( 59c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) prefs::kSyncKeepEverythingSynced, 60c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) true, 61c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF); 622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) syncer::ModelTypeSet user_types = syncer::UserTypes(); 642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Include proxy types as well, as they can be individually selected, 662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // although they don't have sync representations. 672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) user_types.PutAll(syncer::ProxyTypes()); 682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 69e4256316f8b5e8d1ec0df1f7762771622a53fa63Ben Murdoch // Treat bookmarks and device info specially. 702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) RegisterDataTypePreferredPref(registry, syncer::BOOKMARKS, true); 71e4256316f8b5e8d1ec0df1f7762771622a53fa63Ben Murdoch RegisterDataTypePreferredPref(registry, syncer::DEVICE_INFO, true); 722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) user_types.Remove(syncer::BOOKMARKS); 73e4256316f8b5e8d1ec0df1f7762771622a53fa63Ben Murdoch user_types.Remove(syncer::DEVICE_INFO); 742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 755d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // These two prefs are set from sync experiment to enable enhanced bookmarks. 76a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) registry->RegisterIntegerPref( 775d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) prefs::kEnhancedBookmarksExperimentEnabled, 78a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 0, 795d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF); 805d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 815d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) registry->RegisterStringPref( 825d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) prefs::kEnhancedBookmarksExtensionId, 835d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) std::string(), 845d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF); 855d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // All types are set to off by default, which forces a configuration to 872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // explicitly enable them. GetPreferredTypes() will ensure that any new 882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // implicit types are enabled when their pref group is, or via 892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // KeepEverythingSynced. 9023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) for (syncer::ModelTypeSet::Iterator it = user_types.First(); it.Good(); 9123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) it.Inc()) { 922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) RegisterDataTypePreferredPref(registry, it.Get(), false); 932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 95c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) registry->RegisterBooleanPref( 96c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) prefs::kSyncManaged, 97c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) false, 98c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF); 99c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) registry->RegisterStringPref( 100c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) prefs::kSyncEncryptionBootstrapToken, 101c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::string(), 102c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF); 103c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) registry->RegisterStringPref( 104c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) prefs::kSyncKeystoreEncryptionBootstrapToken, 105c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::string(), 106c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF); 1072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#if defined(OS_CHROMEOS) 108c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) registry->RegisterStringPref( 109c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) prefs::kSyncSpareBootstrapToken, 110c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "", 111c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF); 1122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif 1132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 114f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) registry->RegisterBooleanPref( 115f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) prefs::kSyncHasAuthError, 116f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) false, 117f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF); 118f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 119c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) registry->RegisterStringPref( 120c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) prefs::kSyncSessionsGUID, 121c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::string(), 122c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF); 1232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // We will start prompting people about new data types after the launch of 1252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // SESSIONS - all previously launched data types are treated as if they are 1262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // already acknowledged. 1272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) syncer::ModelTypeSet model_set; 1282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) model_set.Put(syncer::BOOKMARKS); 1292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) model_set.Put(syncer::PREFERENCES); 1302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) model_set.Put(syncer::PASSWORDS); 1312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) model_set.Put(syncer::AUTOFILL_PROFILE); 1322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) model_set.Put(syncer::AUTOFILL); 1332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) model_set.Put(syncer::THEMES); 1342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) model_set.Put(syncer::EXTENSIONS); 1352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) model_set.Put(syncer::NIGORI); 1362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) model_set.Put(syncer::SEARCH_ENGINES); 1372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) model_set.Put(syncer::APPS); 1385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) model_set.Put(syncer::APP_LIST); 1392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) model_set.Put(syncer::TYPED_URLS); 1402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) model_set.Put(syncer::SESSIONS); 1414e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) model_set.Put(syncer::ARTICLES); 1422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) registry->RegisterListPref(prefs::kSyncAcknowledgedSyncTypes, 1432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) syncer::ModelTypeSetToValue(model_set), 144c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF); 145cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 146cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) registry->RegisterIntegerPref( 147cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) prefs::kSyncRemainingRollbackTries, 0, 148cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF); 1492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void SyncPrefs::AddSyncPrefObserver(SyncPrefObserver* sync_pref_observer) { 1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(CalledOnValidThread()); 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sync_pref_observers_.AddObserver(sync_pref_observer); 1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void SyncPrefs::RemoveSyncPrefObserver(SyncPrefObserver* sync_pref_observer) { 1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(CalledOnValidThread()); 1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sync_pref_observers_.RemoveObserver(sync_pref_observer); 1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void SyncPrefs::ClearPreferences() { 1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(CalledOnValidThread()); 1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pref_service_->ClearPref(prefs::kSyncLastSyncedTime); 1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pref_service_->ClearPref(prefs::kSyncHasSetupCompleted); 1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pref_service_->ClearPref(prefs::kSyncEncryptionBootstrapToken); 1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pref_service_->ClearPref(prefs::kSyncKeystoreEncryptionBootstrapToken); 1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // TODO(nick): The current behavior does not clear 1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // e.g. prefs::kSyncBookmarks. Is that really what we want? 1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool SyncPrefs::HasSyncSetupCompleted() const { 1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(CalledOnValidThread()); 174f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) return pref_service_->GetBoolean(prefs::kSyncHasSetupCompleted); 1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void SyncPrefs::SetSyncSetupCompleted() { 1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(CalledOnValidThread()); 1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pref_service_->SetBoolean(prefs::kSyncHasSetupCompleted, true); 1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetStartSuppressed(false); 1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 183f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)bool SyncPrefs::SyncHasAuthError() const { 184f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) DCHECK(CalledOnValidThread()); 185f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) return pref_service_->GetBoolean(prefs::kSyncHasAuthError); 186f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 187f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 188f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void SyncPrefs::SetSyncAuthError(bool error) { 189f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) DCHECK(CalledOnValidThread()); 190f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) pref_service_->SetBoolean(prefs::kSyncHasAuthError, error); 191f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 192f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool SyncPrefs::IsStartSuppressed() const { 1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(CalledOnValidThread()); 195f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) return pref_service_->GetBoolean(prefs::kSyncSuppressStart); 1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void SyncPrefs::SetStartSuppressed(bool is_suppressed) { 1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(CalledOnValidThread()); 2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pref_service_->SetBoolean(prefs::kSyncSuppressStart, is_suppressed); 2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)base::Time SyncPrefs::GetLastSyncedTime() const { 2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(CalledOnValidThread()); 20523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) return base::Time::FromInternalValue( 20623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) pref_service_->GetInt64(prefs::kSyncLastSyncedTime)); 2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void SyncPrefs::SetLastSyncedTime(base::Time time) { 2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(CalledOnValidThread()); 2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pref_service_->SetInt64(prefs::kSyncLastSyncedTime, time.ToInternalValue()); 2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool SyncPrefs::HasKeepEverythingSynced() const { 2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(CalledOnValidThread()); 216f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) return pref_service_->GetBoolean(prefs::kSyncKeepEverythingSynced); 2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void SyncPrefs::SetKeepEverythingSynced(bool keep_everything_synced) { 2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(CalledOnValidThread()); 2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pref_service_->SetBoolean(prefs::kSyncKeepEverythingSynced, 2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keep_everything_synced); 2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)syncer::ModelTypeSet SyncPrefs::GetPreferredDataTypes( 2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) syncer::ModelTypeSet registered_types) const { 2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(CalledOnValidThread()); 2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (pref_service_->GetBoolean(prefs::kSyncKeepEverythingSynced)) { 2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return registered_types; 2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) syncer::ModelTypeSet preferred_types; 23423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) for (syncer::ModelTypeSet::Iterator it = registered_types.First(); it.Good(); 23523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) it.Inc()) { 2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (GetDataTypePreferred(it.Get())) { 2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) preferred_types.Put(it.Get()); 2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return ResolvePrefGroups(registered_types, preferred_types); 2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 24323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)void SyncPrefs::SetPreferredDataTypes(syncer::ModelTypeSet registered_types, 24423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) syncer::ModelTypeSet preferred_types) { 2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(CalledOnValidThread()); 2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(registered_types.HasAll(preferred_types)); 2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) preferred_types = ResolvePrefGroups(registered_types, preferred_types); 24823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) for (syncer::ModelTypeSet::Iterator i = registered_types.First(); i.Good(); 24923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) i.Inc()) { 2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetDataTypePreferred(i.Get(), preferred_types.Has(i.Get())); 2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool SyncPrefs::IsManaged() const { 2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(CalledOnValidThread()); 256f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) return pref_service_->GetBoolean(prefs::kSyncManaged); 2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)std::string SyncPrefs::GetEncryptionBootstrapToken() const { 2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(CalledOnValidThread()); 261f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) return pref_service_->GetString(prefs::kSyncEncryptionBootstrapToken); 2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void SyncPrefs::SetEncryptionBootstrapToken(const std::string& token) { 2655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(CalledOnValidThread()); 2665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pref_service_->SetString(prefs::kSyncEncryptionBootstrapToken, token); 2675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)std::string SyncPrefs::GetKeystoreEncryptionBootstrapToken() const { 2705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(CalledOnValidThread()); 27123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) return pref_service_->GetString(prefs::kSyncKeystoreEncryptionBootstrapToken); 2725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void SyncPrefs::SetKeystoreEncryptionBootstrapToken(const std::string& token) { 2755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(CalledOnValidThread()); 2765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pref_service_->SetString(prefs::kSyncKeystoreEncryptionBootstrapToken, token); 2775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)std::string SyncPrefs::GetSyncSessionsGUID() const { 2802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DCHECK(CalledOnValidThread()); 281f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) return pref_service_->GetString(prefs::kSyncSessionsGUID); 2822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 2832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void SyncPrefs::SetSyncSessionsGUID(const std::string& guid) { 2852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DCHECK(CalledOnValidThread()); 2862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) pref_service_->SetString(prefs::kSyncSessionsGUID, guid); 2872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 2882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// static 2905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char* SyncPrefs::GetPrefNameForDataType(syncer::ModelType data_type) { 2915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) switch (data_type) { 2925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case syncer::BOOKMARKS: 2935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return prefs::kSyncBookmarks; 2945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case syncer::PASSWORDS: 2955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return prefs::kSyncPasswords; 2965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case syncer::PREFERENCES: 2975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return prefs::kSyncPreferences; 2985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case syncer::AUTOFILL: 2995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return prefs::kSyncAutofill; 3005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case syncer::AUTOFILL_PROFILE: 3015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return prefs::kSyncAutofillProfile; 3025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case syncer::THEMES: 3035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return prefs::kSyncThemes; 3045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case syncer::TYPED_URLS: 3055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return prefs::kSyncTypedUrls; 3065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case syncer::EXTENSION_SETTINGS: 3075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return prefs::kSyncExtensionSettings; 3085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case syncer::EXTENSIONS: 3095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return prefs::kSyncExtensions; 3105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) case syncer::APP_LIST: 3115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return prefs::kSyncAppList; 3125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case syncer::APP_SETTINGS: 3135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return prefs::kSyncAppSettings; 3145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case syncer::APPS: 3155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return prefs::kSyncApps; 3165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case syncer::SEARCH_ENGINES: 3175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return prefs::kSyncSearchEngines; 3185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case syncer::SESSIONS: 3195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return prefs::kSyncSessions; 3205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case syncer::APP_NOTIFICATIONS: 3215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return prefs::kSyncAppNotifications; 3225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case syncer::HISTORY_DELETE_DIRECTIVES: 3235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return prefs::kSyncHistoryDeleteDirectives; 3242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) case syncer::SYNCED_NOTIFICATIONS: 3252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return prefs::kSyncSyncedNotifications; 3265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) case syncer::SYNCED_NOTIFICATION_APP_INFO: 3275d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return prefs::kSyncSyncedNotificationAppInfo; 3282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) case syncer::DICTIONARY: 3292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return prefs::kSyncDictionary; 3302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) case syncer::FAVICON_IMAGES: 3312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return prefs::kSyncFaviconImages; 3322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) case syncer::FAVICON_TRACKING: 3332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return prefs::kSyncFaviconTracking; 334f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) case syncer::SUPERVISED_USER_SETTINGS: 335f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) return prefs::kSyncSupervisedUserSettings; 3362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) case syncer::PROXY_TABS: 3372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return prefs::kSyncTabs; 338c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) case syncer::PRIORITY_PREFERENCES: 339c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return prefs::kSyncPriorityPreferences; 340f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) case syncer::SUPERVISED_USERS: 341f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) return prefs::kSyncSupervisedUsers; 3424e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) case syncer::ARTICLES: 3434e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) return prefs::kSyncArticles; 344f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) case syncer::SUPERVISED_USER_SHARED_SETTINGS: 345f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) return prefs::kSyncSupervisedUserSharedSettings; 3461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci case syncer::DEVICE_INFO: 3471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return prefs::kSyncDeviceInfo; 3485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) default: 3495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 3505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 351e4256316f8b5e8d1ec0df1f7762771622a53fa63Ben Murdoch NOTREACHED() << "Type is " << data_type; 3525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return NULL; 3535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_CHROMEOS) 3565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)std::string SyncPrefs::GetSpareBootstrapToken() const { 3575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(CalledOnValidThread()); 358f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) return pref_service_->GetString(prefs::kSyncSpareBootstrapToken); 3595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void SyncPrefs::SetSpareBootstrapToken(const std::string& token) { 3625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(CalledOnValidThread()); 3635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pref_service_->SetString(prefs::kSyncSpareBootstrapToken, token); 3645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 3665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void SyncPrefs::AcknowledgeSyncedTypes(syncer::ModelTypeSet types) { 3685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(CalledOnValidThread()); 3695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Add the types to the current set of acknowledged 3705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // types, and then store the resulting set in prefs. 3715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const syncer::ModelTypeSet acknowledged_types = 3725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Union(types, 3735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) syncer::ModelTypeSetFromValue( 3745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *pref_service_->GetList(prefs::kSyncAcknowledgedSyncTypes))); 3755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3765d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) scoped_ptr<base::ListValue> value( 3775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) syncer::ModelTypeSetToValue(acknowledged_types)); 3785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pref_service_->Set(prefs::kSyncAcknowledgedSyncTypes, *value); 3795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 381cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)int SyncPrefs::GetRemainingRollbackTries() const { 382cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return pref_service_->GetInteger(prefs::kSyncRemainingRollbackTries); 383cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 384cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 385cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)void SyncPrefs::SetRemainingRollbackTries(int times) { 386cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) pref_service_->SetInteger(prefs::kSyncRemainingRollbackTries, times); 387cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 388cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 3892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void SyncPrefs::OnSyncManagedPrefChanged() { 3905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(CalledOnValidThread()); 39123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) FOR_EACH_OBSERVER(SyncPrefObserver, 39223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) sync_pref_observers_, 3932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) OnSyncManagedPrefChange(*pref_sync_managed_)); 3945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void SyncPrefs::SetManagedForTest(bool is_managed) { 3975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(CalledOnValidThread()); 3985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pref_service_->SetBoolean(prefs::kSyncManaged, is_managed); 3995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)syncer::ModelTypeSet SyncPrefs::GetAcknowledgeSyncedTypesForTest() const { 4025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(CalledOnValidThread()); 4035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return syncer::ModelTypeSetFromValue( 4045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *pref_service_->GetList(prefs::kSyncAcknowledgedSyncTypes)); 4055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void SyncPrefs::RegisterPrefGroups() { 4085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pref_groups_[syncer::APPS].Put(syncer::APP_NOTIFICATIONS); 4095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pref_groups_[syncer::APPS].Put(syncer::APP_SETTINGS); 4105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) pref_groups_[syncer::APPS].Put(syncer::APP_LIST); 4115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pref_groups_[syncer::AUTOFILL].Put(syncer::AUTOFILL_PROFILE); 4135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pref_groups_[syncer::EXTENSIONS].Put(syncer::EXTENSION_SETTINGS); 4155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) pref_groups_[syncer::PREFERENCES].Put(syncer::DICTIONARY); 417c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) pref_groups_[syncer::PREFERENCES].Put(syncer::PRIORITY_PREFERENCES); 4185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pref_groups_[syncer::PREFERENCES].Put(syncer::SEARCH_ENGINES); 4195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) pref_groups_[syncer::TYPED_URLS].Put(syncer::HISTORY_DELETE_DIRECTIVES); 42123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) pref_groups_[syncer::TYPED_URLS].Put(syncer::SESSIONS); 42223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) pref_groups_[syncer::TYPED_URLS].Put(syncer::FAVICON_IMAGES); 42323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) pref_groups_[syncer::TYPED_URLS].Put(syncer::FAVICON_TRACKING); 4245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) pref_groups_[syncer::PROXY_TABS].Put(syncer::SESSIONS); 4262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) pref_groups_[syncer::PROXY_TABS].Put(syncer::FAVICON_IMAGES); 4272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) pref_groups_[syncer::PROXY_TABS].Put(syncer::FAVICON_TRACKING); 4285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // TODO(zea): put favicons in the bookmarks group as well once it handles 4302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // those favicons. 4315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// static 434c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void SyncPrefs::RegisterDataTypePreferredPref( 435c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) user_prefs::PrefRegistrySyncable* registry, 436c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) syncer::ModelType type, 437c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) bool is_preferred) { 4385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const char* pref_name = GetPrefNameForDataType(type); 4395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!pref_name) { 4405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NOTREACHED(); 4415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 4425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 443c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) registry->RegisterBooleanPref( 444c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) pref_name, 445c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) is_preferred, 446c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF); 4475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool SyncPrefs::GetDataTypePreferred(syncer::ModelType type) const { 4505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(CalledOnValidThread()); 4515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const char* pref_name = GetPrefNameForDataType(type); 4525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!pref_name) { 4535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NOTREACHED(); 4545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 4555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 456e4256316f8b5e8d1ec0df1f7762771622a53fa63Ben Murdoch 457e4256316f8b5e8d1ec0df1f7762771622a53fa63Ben Murdoch // Device info is always enabled. 458e4256316f8b5e8d1ec0df1f7762771622a53fa63Ben Murdoch if (pref_name == prefs::kSyncDeviceInfo) 459e4256316f8b5e8d1ec0df1f7762771622a53fa63Ben Murdoch return true; 460e4256316f8b5e8d1ec0df1f7762771622a53fa63Ben Murdoch 4612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (type == syncer::PROXY_TABS && 4622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) pref_service_->GetUserPrefValue(pref_name) == NULL && 4632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) pref_service_->IsUserModifiablePreference(pref_name)) { 4642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // If there is no tab sync preference yet (i.e. newly enabled type), 4652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // default to the session sync preference value. 4662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) pref_name = GetPrefNameForDataType(syncer::SESSIONS); 4672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 4685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return pref_service_->GetBoolean(pref_name); 4705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 47223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)void SyncPrefs::SetDataTypePreferred(syncer::ModelType type, 47323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) bool is_preferred) { 4745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(CalledOnValidThread()); 4755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const char* pref_name = GetPrefNameForDataType(type); 4765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!pref_name) { 4775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NOTREACHED(); 4785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 4795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 480e4256316f8b5e8d1ec0df1f7762771622a53fa63Ben Murdoch 481e4256316f8b5e8d1ec0df1f7762771622a53fa63Ben Murdoch // Device info is always preferred. 482e4256316f8b5e8d1ec0df1f7762771622a53fa63Ben Murdoch if (type == syncer::DEVICE_INFO) 483e4256316f8b5e8d1ec0df1f7762771622a53fa63Ben Murdoch return; 484e4256316f8b5e8d1ec0df1f7762771622a53fa63Ben Murdoch 4855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pref_service_->SetBoolean(pref_name, is_preferred); 4865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)syncer::ModelTypeSet SyncPrefs::ResolvePrefGroups( 4895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) syncer::ModelTypeSet registered_types, 4905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) syncer::ModelTypeSet types) const { 4915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(registered_types.HasAll(types)); 4925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) syncer::ModelTypeSet types_with_groups = types; 4935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (PrefGroupsMap::const_iterator i = pref_groups_.begin(); 49423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) i != pref_groups_.end(); 49523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) ++i) { 4965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (types.Has(i->first)) 4975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) types_with_groups.PutAll(i->second); 4985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) types_with_groups.RetainAll(registered_types); 5005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return types_with_groups; 5015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 50346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)base::Time SyncPrefs::GetFirstSyncTime() const { 50446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) return base::Time::FromInternalValue( 50546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) pref_service_->GetInt64(prefs::kSyncFirstSyncTime)); 50646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)} 50746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 50846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)void SyncPrefs::SetFirstSyncTime(base::Time time) { 50946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) pref_service_->SetInt64(prefs::kSyncFirstSyncTime, time.ToInternalValue()); 51046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)} 51146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 51246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)void SyncPrefs::ClearFirstSyncTime() { 51346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) pref_service_->ClearPref(prefs::kSyncFirstSyncTime); 51446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)} 51546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 5165f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} // namespace sync_driver 517