sync_prefs.h revision 23730a6e56a168d1879203e4b3819bb36e3d8f1f
1// Copyright (c) 2012 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#ifndef COMPONENTS_SYNC_DRIVER_SYNC_PREFS_H_ 6#define COMPONENTS_SYNC_DRIVER_SYNC_PREFS_H_ 7 8#include "base/basictypes.h" 9#include "base/compiler_specific.h" 10#include "base/memory/weak_ptr.h" 11#include "base/observer_list.h" 12#include "base/prefs/pref_member.h" 13#include "base/threading/non_thread_safe.h" 14#include "base/time/time.h" 15#include "sync/internal_api/public/base/model_type.h" 16#include "sync/notifier/invalidation_state_tracker.h" 17 18class PrefService; 19class ProfileIOData; 20 21namespace user_prefs { 22class PrefRegistrySyncable; 23} 24 25namespace sync_driver { 26 27class SyncPrefObserver { 28 public: 29 // Called whenever the pref that controls whether sync is managed 30 // changes. 31 virtual void OnSyncManagedPrefChange(bool is_sync_managed) = 0; 32 33 protected: 34 virtual ~SyncPrefObserver(); 35}; 36 37// SyncPrefs is a helper class that manages getting, setting, and 38// persisting global sync preferences. It is not thread-safe, and 39// lives on the UI thread. 40// 41// TODO(akalin): Some classes still read the prefs directly. Consider 42// passing down a pointer to SyncPrefs to them. A list of files: 43// 44// profile_sync_service_startup_unittest.cc 45// profile_sync_service.cc 46// sync_setup_flow.cc 47// sync_setup_wizard.cc 48// sync_setup_wizard_unittest.cc 49// two_client_preferences_sync_test.cc 50class SyncPrefs : NON_EXPORTED_BASE(public base::NonThreadSafe), 51 public base::SupportsWeakPtr<SyncPrefs> { 52 public: 53 // |pref_service| may not be NULL. 54 // Does not take ownership of |pref_service|. 55 explicit SyncPrefs(PrefService* pref_service); 56 57 virtual ~SyncPrefs(); 58 59 static void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry); 60 61 void AddSyncPrefObserver(SyncPrefObserver* sync_pref_observer); 62 void RemoveSyncPrefObserver(SyncPrefObserver* sync_pref_observer); 63 64 // Clears important sync preferences. 65 void ClearPreferences(); 66 67 // Getters and setters for global sync prefs. 68 69 bool HasSyncSetupCompleted() const; 70 void SetSyncSetupCompleted(); 71 72 bool SyncHasAuthError() const; 73 void SetSyncAuthError(bool error); 74 75 bool IsStartSuppressed() const; 76 void SetStartSuppressed(bool is_suppressed); 77 78 base::Time GetLastSyncedTime() const; 79 void SetLastSyncedTime(base::Time time); 80 81 bool HasKeepEverythingSynced() const; 82 void SetKeepEverythingSynced(bool keep_everything_synced); 83 84 // The returned set is guaranteed to be a subset of 85 // |registered_types|. Returns |registered_types| directly if 86 // HasKeepEverythingSynced() is true. 87 syncer::ModelTypeSet GetPreferredDataTypes( 88 syncer::ModelTypeSet registered_types) const; 89 // |preferred_types| should be a subset of |registered_types|. All 90 // types in |preferred_types| are marked preferred, and all types in 91 // |registered_types| \ |preferred_types| are marked not preferred. 92 // Changes are still made to the prefs even if 93 // HasKeepEverythingSynced() is true, but won't be visible until 94 // SetKeepEverythingSynced(false) is called. 95 void SetPreferredDataTypes(syncer::ModelTypeSet registered_types, 96 syncer::ModelTypeSet preferred_types); 97 98 // This pref is set outside of sync. 99 bool IsManaged() const; 100 101 // Use this encryption bootstrap token if we're using an explicit passphrase. 102 std::string GetEncryptionBootstrapToken() const; 103 void SetEncryptionBootstrapToken(const std::string& token); 104 105 // Use this keystore bootstrap token if we're not using an explicit 106 // passphrase. 107 std::string GetKeystoreEncryptionBootstrapToken() const; 108 void SetKeystoreEncryptionBootstrapToken(const std::string& token); 109 110 // Use this for the unique machine tag used for session sync. 111 std::string GetSyncSessionsGUID() const; 112 void SetSyncSessionsGUID(const std::string& guid); 113 114 // Maps |data_type| to its corresponding preference name. 115 static const char* GetPrefNameForDataType(syncer::ModelType data_type); 116 117#if defined(OS_CHROMEOS) 118 // Use this spare bootstrap token only when setting up sync for the first 119 // time. 120 std::string GetSpareBootstrapToken() const; 121 void SetSpareBootstrapToken(const std::string& token); 122#endif 123 124 // Merges the given set of types with the set of acknowledged types. 125 void AcknowledgeSyncedTypes(syncer::ModelTypeSet types); 126 127 // For testing. 128 129 void SetManagedForTest(bool is_managed); 130 syncer::ModelTypeSet GetAcknowledgeSyncedTypesForTest() const; 131 132 private: 133 void RegisterPrefGroups(); 134 135 static void RegisterDataTypePreferredPref( 136 user_prefs::PrefRegistrySyncable* prefs, 137 syncer::ModelType type, 138 bool is_preferred); 139 bool GetDataTypePreferred(syncer::ModelType type) const; 140 void SetDataTypePreferred(syncer::ModelType type, bool is_preferred); 141 142 // Returns a ModelTypeSet based on |types| expanded to include pref groups 143 // (see |pref_groups_|), but as a subset of |registered_types|. 144 syncer::ModelTypeSet ResolvePrefGroups(syncer::ModelTypeSet registered_types, 145 syncer::ModelTypeSet types) const; 146 147 void OnSyncManagedPrefChanged(); 148 149 // May be NULL. 150 PrefService* const pref_service_; 151 152 ObserverList<SyncPrefObserver> sync_pref_observers_; 153 154 // The preference that controls whether sync is under control by 155 // configuration management. 156 BooleanPrefMember pref_sync_managed_; 157 158 // Groups of prefs that always have the same value as a "master" pref. 159 // For example, the APPS group has {APP_NOTIFICATIONS, APP_SETTINGS} 160 // (as well as APPS, but that is implied), so 161 // pref_groups_[syncer::APPS] = { syncer::APP_NOTIFICATIONS, 162 // syncer::APP_SETTINGS } 163 // pref_groups_[syncer::EXTENSIONS] = { syncer::EXTENSION_SETTINGS } 164 // etc. 165 typedef std::map<syncer::ModelType, syncer::ModelTypeSet> PrefGroupsMap; 166 PrefGroupsMap pref_groups_; 167 168 DISALLOW_COPY_AND_ASSIGN(SyncPrefs); 169}; 170 171} // namespace browser_sync 172 173#endif // COMPONENTS_SYNC_DRIVER_SYNC_PREFS_H_ 174