| 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/file_path.h" | 8 #include "base/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 PrefModelAssociator 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(&PrefModelAssociator::ProcessPrefChange, |
| 52 base::Unretained(&pref_sync_associator_))); | 55 base::Unretained(&pref_sync_associator_))); |
| 56 pref_value_store->set_callback( |
| 57 base::Bind(&PrefModelAssociator::ProcessPrefChange, |
| 58 base::Unretained(&priority_pref_sync_associator_))); |
| 53 | 59 |
| 54 // Add already-registered syncable preferences to PrefModelAssociator. | 60 // Add already-registered syncable preferences to PrefModelAssociator. |
| 55 const std::set<std::string>& syncable_preferences = | 61 const PrefRegistrySyncable::PrefToStatus& syncable_preferences = |
| 56 pref_registry->syncable_preferences(); | 62 pref_registry->syncable_preferences(); |
| 57 for (std::set<std::string>::const_iterator it = syncable_preferences.begin(); | 63 for (PrefRegistrySyncable::PrefToStatus::const_iterator it = |
| 64 syncable_preferences.begin(); |
| 58 it != syncable_preferences.end(); | 65 it != syncable_preferences.end(); |
| 59 ++it) { | 66 ++it) { |
| 60 AddRegisteredSyncablePreference(it->c_str()); | 67 AddRegisteredSyncablePreference(it->first.c_str(), it->second); |
| 61 } | 68 } |
| 62 | 69 |
| 63 // Watch for syncable preferences registered after this point. | 70 // Watch for syncable preferences registered after this point. |
| 64 pref_registry->SetSyncableRegistrationCallback( | 71 pref_registry->SetSyncableRegistrationCallback( |
| 65 base::Bind(&PrefServiceSyncable::AddRegisteredSyncablePreference, | 72 base::Bind(&PrefServiceSyncable::AddRegisteredSyncablePreference, |
| 66 base::Unretained(this))); | 73 base::Unretained(this))); |
| 67 } | 74 } |
| 68 | 75 |
| 69 PrefServiceSyncable::~PrefServiceSyncable() { | 76 PrefServiceSyncable::~PrefServiceSyncable() { |
| 70 // Remove our callback from the registry, since it may outlive us. | 77 // Remove our callback from the registry, since it may outlive us. |
| (...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 112 | 119 |
| 113 void PrefServiceSyncable::RemoveObserver( | 120 void PrefServiceSyncable::RemoveObserver( |
| 114 PrefServiceSyncableObserver* observer) { | 121 PrefServiceSyncableObserver* observer) { |
| 115 observer_list_.RemoveObserver(observer); | 122 observer_list_.RemoveObserver(observer); |
| 116 } | 123 } |
| 117 | 124 |
| 118 syncer::SyncableService* PrefServiceSyncable::GetSyncableService() { | 125 syncer::SyncableService* PrefServiceSyncable::GetSyncableService() { |
| 119 return &pref_sync_associator_; | 126 return &pref_sync_associator_; |
| 120 } | 127 } |
| 121 | 128 |
| 129 syncer::SyncableService* PrefServiceSyncable::GetPrioritySyncableService() { |
| 130 return &priority_pref_sync_associator_; |
| 131 } |
| 132 |
| 122 void PrefServiceSyncable::UpdateCommandLinePrefStore( | 133 void PrefServiceSyncable::UpdateCommandLinePrefStore( |
| 123 PrefStore* cmd_line_store) { | 134 PrefStore* cmd_line_store) { |
| 124 // If |pref_service_forked_| is true, then this PrefService and the forked | 135 // If |pref_service_forked_| is true, then this PrefService and the forked |
| 125 // copies will be out of sync. | 136 // copies will be out of sync. |
| 126 DCHECK(!pref_service_forked_); | 137 DCHECK(!pref_service_forked_); |
| 127 PrefService::UpdateCommandLinePrefStore(cmd_line_store); | 138 PrefService::UpdateCommandLinePrefStore(cmd_line_store); |
| 128 } | 139 } |
| 129 | 140 |
| 130 void PrefServiceSyncable::AddRegisteredSyncablePreference(const char* path) { | 141 void PrefServiceSyncable::AddRegisteredSyncablePreference( |
| 142 const char* path, const PrefRegistrySyncable::PrefSyncStatus sync_status) { |
| 131 DCHECK(FindPreference(path)); | 143 DCHECK(FindPreference(path)); |
| 132 pref_sync_associator_.RegisterPref(path); | 144 if (sync_status == PrefRegistrySyncable::SYNCABLE_PREF) { |
| 145 pref_sync_associator_.RegisterPref(path); |
| 146 } else if (sync_status == PrefRegistrySyncable::SYNCABLE_PRIORITY_PREF) { |
| 147 priority_pref_sync_associator_.RegisterPref(path); |
| 148 } else { |
| 149 NOTREACHED() << "invalid sync_status: " << sync_status; |
| 150 } |
| 133 } | 151 } |
| 134 | 152 |
| 135 void PrefServiceSyncable::OnIsSyncingChanged() { | 153 void PrefServiceSyncable::OnIsSyncingChanged() { |
| 136 FOR_EACH_OBSERVER(PrefServiceSyncableObserver, observer_list_, | 154 FOR_EACH_OBSERVER(PrefServiceSyncableObserver, observer_list_, |
| 137 OnIsSyncingChanged()); | 155 OnIsSyncingChanged()); |
| 138 } | 156 } |
| 157 |
| 158 void PrefServiceSyncable::ProcessPrefChange(const std::string& name) { |
| 159 pref_sync_associator_.ProcessPrefChange(name); |
| 160 priority_pref_sync_associator_.ProcessPrefChange(name); |
| 161 } |
| OLD | NEW |