| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 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 | 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/prefs/pref_service_syncable.h" | 5 #include "chrome/browser/prefs/pref_service_syncable.h" |
| 6 | 6 |
| 7 #include "base/bind.h" | 7 #include "base/bind.h" |
| 8 #include "base/files/file_path.h" | 8 #include "base/files/file_path.h" |
| 9 #include "base/prefs/default_pref_store.h" | 9 #include "base/prefs/default_pref_store.h" |
| 10 #include "base/prefs/overlay_user_pref_store.h" | 10 #include "base/prefs/overlay_user_pref_store.h" |
| (...skipping 25 matching lines...) Expand all Loading... |
| 36 PersistentPrefStore* user_prefs, | 36 PersistentPrefStore* user_prefs, |
| 37 PrefRegistrySyncable* pref_registry, | 37 PrefRegistrySyncable* pref_registry, |
| 38 base::Callback<void(PersistentPrefStore::PrefReadError)> | 38 base::Callback<void(PersistentPrefStore::PrefReadError)> |
| 39 read_error_callback, | 39 read_error_callback, |
| 40 bool async) | 40 bool async) |
| 41 : PrefService(pref_notifier, | 41 : PrefService(pref_notifier, |
| 42 pref_value_store, | 42 pref_value_store, |
| 43 user_prefs, | 43 user_prefs, |
| 44 pref_registry, | 44 pref_registry, |
| 45 read_error_callback, | 45 read_error_callback, |
| 46 async) { | 46 async), |
| 47 pref_sync_associator_(syncer::PREFERENCES), |
| 48 priority_pref_sync_associator_(syncer::PRIORITY_PREFERENCES) { |
| 47 pref_sync_associator_.SetPrefService(this); | 49 pref_sync_associator_.SetPrefService(this); |
| 50 priority_pref_sync_associator_.SetPrefService(this); |
| 48 | 51 |
| 49 // Let PrefModelAssociator know about changes to preference values. | 52 // Let PrefModelAssociators know about changes to preference values. |
| 50 pref_value_store->set_callback( | 53 pref_value_store->set_callback( |
| 51 base::Bind(&PrefModelAssociator::ProcessPrefChange, | 54 base::Bind(&PrefServiceSyncable::ProcessPrefChange, |
| 52 base::Unretained(&pref_sync_associator_))); | 55 base::Unretained(this))); |
| 53 | 56 |
| 54 // Add already-registered syncable preferences to PrefModelAssociator. | 57 // Add already-registered syncable preferences to PrefModelAssociator. |
| 55 const std::set<std::string>& syncable_preferences = | 58 const PrefRegistrySyncable::PrefToStatus& syncable_preferences = |
| 56 pref_registry->syncable_preferences(); | 59 pref_registry->syncable_preferences(); |
| 57 for (std::set<std::string>::const_iterator it = syncable_preferences.begin(); | 60 for (PrefRegistrySyncable::PrefToStatus::const_iterator it = |
| 61 syncable_preferences.begin(); |
| 58 it != syncable_preferences.end(); | 62 it != syncable_preferences.end(); |
| 59 ++it) { | 63 ++it) { |
| 60 AddRegisteredSyncablePreference(it->c_str()); | 64 AddRegisteredSyncablePreference(it->first.c_str(), it->second); |
| 61 } | 65 } |
| 62 | 66 |
| 63 // Watch for syncable preferences registered after this point. | 67 // Watch for syncable preferences registered after this point. |
| 64 pref_registry->SetSyncableRegistrationCallback( | 68 pref_registry->SetSyncableRegistrationCallback( |
| 65 base::Bind(&PrefServiceSyncable::AddRegisteredSyncablePreference, | 69 base::Bind(&PrefServiceSyncable::AddRegisteredSyncablePreference, |
| 66 base::Unretained(this))); | 70 base::Unretained(this))); |
| 67 } | 71 } |
| 68 | 72 |
| 69 PrefServiceSyncable::~PrefServiceSyncable() { | 73 PrefServiceSyncable::~PrefServiceSyncable() { |
| 70 // Remove our callback from the registry, since it may outlive us. | 74 // Remove our callback from the registry, since it may outlive us. |
| (...skipping 28 matching lines...) Expand all Loading... |
| 99 forked_registry, | 103 forked_registry, |
| 100 read_error_callback_, | 104 read_error_callback_, |
| 101 false); | 105 false); |
| 102 return incognito_service; | 106 return incognito_service; |
| 103 } | 107 } |
| 104 | 108 |
| 105 bool PrefServiceSyncable::IsSyncing() { | 109 bool PrefServiceSyncable::IsSyncing() { |
| 106 return pref_sync_associator_.models_associated(); | 110 return pref_sync_associator_.models_associated(); |
| 107 } | 111 } |
| 108 | 112 |
| 113 |
| 114 bool PrefServiceSyncable::IsPrioritySyncing() { |
| 115 return priority_pref_sync_associator_.models_associated(); |
| 116 } |
| 117 |
| 109 void PrefServiceSyncable::AddObserver(PrefServiceSyncableObserver* observer) { | 118 void PrefServiceSyncable::AddObserver(PrefServiceSyncableObserver* observer) { |
| 110 observer_list_.AddObserver(observer); | 119 observer_list_.AddObserver(observer); |
| 111 } | 120 } |
| 112 | 121 |
| 113 void PrefServiceSyncable::RemoveObserver( | 122 void PrefServiceSyncable::RemoveObserver( |
| 114 PrefServiceSyncableObserver* observer) { | 123 PrefServiceSyncableObserver* observer) { |
| 115 observer_list_.RemoveObserver(observer); | 124 observer_list_.RemoveObserver(observer); |
| 116 } | 125 } |
| 117 | 126 |
| 118 syncer::SyncableService* PrefServiceSyncable::GetSyncableService() { | 127 syncer::SyncableService* PrefServiceSyncable::GetSyncableService( |
| 119 return &pref_sync_associator_; | 128 const syncer::ModelType& type) { |
| 129 if (type == syncer::PREFERENCES) { |
| 130 return &pref_sync_associator_; |
| 131 } else if (type == syncer::PRIORITY_PREFERENCES) { |
| 132 return &priority_pref_sync_associator_; |
| 133 } else { |
| 134 NOTREACHED() << "invalid model type: " << type; |
| 135 return NULL; |
| 136 } |
| 120 } | 137 } |
| 121 | 138 |
| 122 void PrefServiceSyncable::UpdateCommandLinePrefStore( | 139 void PrefServiceSyncable::UpdateCommandLinePrefStore( |
| 123 PrefStore* cmd_line_store) { | 140 PrefStore* cmd_line_store) { |
| 124 // If |pref_service_forked_| is true, then this PrefService and the forked | 141 // If |pref_service_forked_| is true, then this PrefService and the forked |
| 125 // copies will be out of sync. | 142 // copies will be out of sync. |
| 126 DCHECK(!pref_service_forked_); | 143 DCHECK(!pref_service_forked_); |
| 127 PrefService::UpdateCommandLinePrefStore(cmd_line_store); | 144 PrefService::UpdateCommandLinePrefStore(cmd_line_store); |
| 128 } | 145 } |
| 129 | 146 |
| 130 void PrefServiceSyncable::AddRegisteredSyncablePreference(const char* path) { | 147 void PrefServiceSyncable::AddRegisteredSyncablePreference( |
| 148 const char* path, |
| 149 const PrefRegistrySyncable::PrefSyncStatus sync_status) { |
| 131 DCHECK(FindPreference(path)); | 150 DCHECK(FindPreference(path)); |
| 132 pref_sync_associator_.RegisterPref(path); | 151 if (sync_status == PrefRegistrySyncable::SYNCABLE_PREF) { |
| 152 pref_sync_associator_.RegisterPref(path); |
| 153 } else if (sync_status == PrefRegistrySyncable::SYNCABLE_PRIORITY_PREF) { |
| 154 priority_pref_sync_associator_.RegisterPref(path); |
| 155 } else { |
| 156 NOTREACHED() << "invalid sync_status: " << sync_status; |
| 157 } |
| 133 } | 158 } |
| 134 | 159 |
| 135 void PrefServiceSyncable::OnIsSyncingChanged() { | 160 void PrefServiceSyncable::OnIsSyncingChanged() { |
| 136 FOR_EACH_OBSERVER(PrefServiceSyncableObserver, observer_list_, | 161 FOR_EACH_OBSERVER(PrefServiceSyncableObserver, observer_list_, |
| 137 OnIsSyncingChanged()); | 162 OnIsSyncingChanged()); |
| 138 } | 163 } |
| 164 |
| 165 void PrefServiceSyncable::ProcessPrefChange(const std::string& name) { |
| 166 pref_sync_associator_.ProcessPrefChange(name); |
| 167 priority_pref_sync_associator_.ProcessPrefChange(name); |
| 168 } |
| OLD | NEW |