 Chromium Code Reviews
 Chromium Code Reviews Issue 12033093:
  sync: Implementation of Priority Preferences.  (Closed) 
  Base URL: svn://svn.chromium.org/chrome/trunk/src
    
  
    Issue 12033093:
  sync: Implementation of Priority Preferences.  (Closed) 
  Base URL: svn://svn.chromium.org/chrome/trunk/src| 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 24 matching lines...) Expand all Loading... | |
| 95 NULL, // recommended | 99 NULL, // recommended | 
| 96 forked_registry->defaults(), | 100 forked_registry->defaults(), | 
| 97 pref_notifier), | 101 pref_notifier), | 
| 98 incognito_pref_store, | 102 incognito_pref_store, | 
| 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() { | 
| 
tim (not reviewing)
2013/03/21 16:36:00
This isn't going to work properly...  This is the
 
Mattias Nissler (ping if slow)
2013/03/21 16:59:40
FWIW, I consider this whole IsSyncing() call a hac
 
albertb
2013/03/21 17:10:33
Done.
 
albertb
2013/03/21 17:10:33
I updated the condition to also check priority pre
 
tim (not reviewing)
2013/03/21 18:10:55
@albert - well, that won't work if you want to kno
 
albertb
2013/03/21 18:46:29
Done.
 | |
| 106 return pref_sync_associator_.models_associated(); | 110 return pref_sync_associator_.models_associated(); | 
| 107 } | 111 } | 
| 108 | 112 | 
| 109 void PrefServiceSyncable::AddObserver(PrefServiceSyncableObserver* observer) { | 113 void PrefServiceSyncable::AddObserver(PrefServiceSyncableObserver* observer) { | 
| 110 observer_list_.AddObserver(observer); | 114 observer_list_.AddObserver(observer); | 
| 111 } | 115 } | 
| 112 | 116 | 
| 113 void PrefServiceSyncable::RemoveObserver( | 117 void PrefServiceSyncable::RemoveObserver( | 
| 114 PrefServiceSyncableObserver* observer) { | 118 PrefServiceSyncableObserver* observer) { | 
| 115 observer_list_.RemoveObserver(observer); | 119 observer_list_.RemoveObserver(observer); | 
| 116 } | 120 } | 
| 117 | 121 | 
| 118 syncer::SyncableService* PrefServiceSyncable::GetSyncableService() { | 122 syncer::SyncableService* PrefServiceSyncable::GetSyncableService( | 
| 119 return &pref_sync_associator_; | 123 const syncer::ModelType& type) { | 
| 124 if (type == syncer::PREFERENCES) { | |
| 125 return &pref_sync_associator_; | |
| 126 } else if (type == syncer::PRIORITY_PREFERENCES) { | |
| 127 return &priority_pref_sync_associator_; | |
| 128 } else { | |
| 129 NOTREACHED() << "invalid model type: " << type; | |
| 130 return NULL; | |
| 131 } | |
| 120 } | 132 } | 
| 121 | 133 | 
| 122 void PrefServiceSyncable::UpdateCommandLinePrefStore( | 134 void PrefServiceSyncable::UpdateCommandLinePrefStore( | 
| 123 PrefStore* cmd_line_store) { | 135 PrefStore* cmd_line_store) { | 
| 124 // If |pref_service_forked_| is true, then this PrefService and the forked | 136 // If |pref_service_forked_| is true, then this PrefService and the forked | 
| 125 // copies will be out of sync. | 137 // copies will be out of sync. | 
| 126 DCHECK(!pref_service_forked_); | 138 DCHECK(!pref_service_forked_); | 
| 127 PrefService::UpdateCommandLinePrefStore(cmd_line_store); | 139 PrefService::UpdateCommandLinePrefStore(cmd_line_store); | 
| 128 } | 140 } | 
| 129 | 141 | 
| 130 void PrefServiceSyncable::AddRegisteredSyncablePreference(const char* path) { | 142 void PrefServiceSyncable::AddRegisteredSyncablePreference( | 
| 143 const char* path, const PrefRegistrySyncable::PrefSyncStatus sync_status) { | |
| 
Mattias Nissler (ping if slow)
2013/03/21 06:50:15
nit: parameter decls on separate lines
 
albertb
2013/03/21 17:10:33
Done.
 | |
| 131 DCHECK(FindPreference(path)); | 144 DCHECK(FindPreference(path)); | 
| 132 pref_sync_associator_.RegisterPref(path); | 145 if (sync_status == PrefRegistrySyncable::SYNCABLE_PREF) { | 
| 146 pref_sync_associator_.RegisterPref(path); | |
| 147 } else if (sync_status == PrefRegistrySyncable::SYNCABLE_PRIORITY_PREF) { | |
| 148 priority_pref_sync_associator_.RegisterPref(path); | |
| 149 } else { | |
| 150 NOTREACHED() << "invalid sync_status: " << sync_status; | |
| 151 } | |
| 133 } | 152 } | 
| 134 | 153 | 
| 135 void PrefServiceSyncable::OnIsSyncingChanged() { | 154 void PrefServiceSyncable::OnIsSyncingChanged() { | 
| 136 FOR_EACH_OBSERVER(PrefServiceSyncableObserver, observer_list_, | 155 FOR_EACH_OBSERVER(PrefServiceSyncableObserver, observer_list_, | 
| 137 OnIsSyncingChanged()); | 156 OnIsSyncingChanged()); | 
| 138 } | 157 } | 
| 158 | |
| 159 void PrefServiceSyncable::ProcessPrefChange(const std::string& name) { | |
| 160 pref_sync_associator_.ProcessPrefChange(name); | |
| 161 priority_pref_sync_associator_.ProcessPrefChange(name); | |
| 162 } | |
| OLD | NEW |