| 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 | 
|---|