| 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 16 matching lines...) Expand all Loading... |
| 27 // static | 27 // static |
| 28 PrefServiceSyncable* PrefServiceSyncable::IncognitoFromProfile( | 28 PrefServiceSyncable* PrefServiceSyncable::IncognitoFromProfile( |
| 29 Profile* profile) { | 29 Profile* profile) { |
| 30 return static_cast<PrefServiceSyncable*>(profile->GetOffTheRecordPrefs()); | 30 return static_cast<PrefServiceSyncable*>(profile->GetOffTheRecordPrefs()); |
| 31 } | 31 } |
| 32 | 32 |
| 33 PrefServiceSyncable::PrefServiceSyncable( | 33 PrefServiceSyncable::PrefServiceSyncable( |
| 34 PrefNotifierImpl* pref_notifier, | 34 PrefNotifierImpl* pref_notifier, |
| 35 PrefValueStore* pref_value_store, | 35 PrefValueStore* pref_value_store, |
| 36 PersistentPrefStore* user_prefs, | 36 PersistentPrefStore* user_prefs, |
| 37 PrefRegistrySyncable* pref_registry, | 37 user_prefs::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), | 47 pref_sync_associator_(syncer::PREFERENCES), |
| 48 priority_pref_sync_associator_(syncer::PRIORITY_PREFERENCES) { | 48 priority_pref_sync_associator_(syncer::PRIORITY_PREFERENCES) { |
| 49 pref_sync_associator_.SetPrefService(this); | 49 pref_sync_associator_.SetPrefService(this); |
| 50 priority_pref_sync_associator_.SetPrefService(this); | 50 priority_pref_sync_associator_.SetPrefService(this); |
| 51 | 51 |
| 52 // Let PrefModelAssociators know about changes to preference values. | 52 // Let PrefModelAssociators know about changes to preference values. |
| 53 pref_value_store->set_callback( | 53 pref_value_store->set_callback( |
| 54 base::Bind(&PrefServiceSyncable::ProcessPrefChange, | 54 base::Bind(&PrefServiceSyncable::ProcessPrefChange, |
| 55 base::Unretained(this))); | 55 base::Unretained(this))); |
| 56 | 56 |
| 57 // Add already-registered syncable preferences to PrefModelAssociator. | 57 // Add already-registered syncable preferences to PrefModelAssociator. |
| 58 const PrefRegistrySyncable::PrefToStatus& syncable_preferences = | 58 const user_prefs::PrefRegistrySyncable::PrefToStatus& syncable_preferences = |
| 59 pref_registry->syncable_preferences(); | 59 pref_registry->syncable_preferences(); |
| 60 for (PrefRegistrySyncable::PrefToStatus::const_iterator it = | 60 for (user_prefs::PrefRegistrySyncable::PrefToStatus::const_iterator it = |
| 61 syncable_preferences.begin(); | 61 syncable_preferences.begin(); |
| 62 it != syncable_preferences.end(); | 62 it != syncable_preferences.end(); |
| 63 ++it) { | 63 ++it) { |
| 64 AddRegisteredSyncablePreference(it->first.c_str(), it->second); | 64 AddRegisteredSyncablePreference(it->first.c_str(), it->second); |
| 65 } | 65 } |
| 66 | 66 |
| 67 // Watch for syncable preferences registered after this point. | 67 // Watch for syncable preferences registered after this point. |
| 68 pref_registry->SetSyncableRegistrationCallback( | 68 pref_registry->SetSyncableRegistrationCallback( |
| 69 base::Bind(&PrefServiceSyncable::AddRegisteredSyncablePreference, | 69 base::Bind(&PrefServiceSyncable::AddRegisteredSyncablePreference, |
| 70 base::Unretained(this))); | 70 base::Unretained(this))); |
| 71 } | 71 } |
| 72 | 72 |
| 73 PrefServiceSyncable::~PrefServiceSyncable() { | 73 PrefServiceSyncable::~PrefServiceSyncable() { |
| 74 // Remove our callback from the registry, since it may outlive us. | 74 // Remove our callback from the registry, since it may outlive us. |
| 75 PrefRegistrySyncable* registry = | 75 user_prefs::PrefRegistrySyncable* registry = |
| 76 static_cast<PrefRegistrySyncable*>(pref_registry_.get()); | 76 static_cast<user_prefs::PrefRegistrySyncable*>(pref_registry_.get()); |
| 77 registry->SetSyncableRegistrationCallback( | 77 registry->SetSyncableRegistrationCallback( |
| 78 PrefRegistrySyncable::SyncableRegistrationCallback()); | 78 user_prefs::PrefRegistrySyncable::SyncableRegistrationCallback()); |
| 79 } | 79 } |
| 80 | 80 |
| 81 PrefServiceSyncable* PrefServiceSyncable::CreateIncognitoPrefService( | 81 PrefServiceSyncable* PrefServiceSyncable::CreateIncognitoPrefService( |
| 82 PrefStore* incognito_extension_prefs) { | 82 PrefStore* incognito_extension_prefs) { |
| 83 pref_service_forked_ = true; | 83 pref_service_forked_ = true; |
| 84 PrefNotifierImpl* pref_notifier = new PrefNotifierImpl(); | 84 PrefNotifierImpl* pref_notifier = new PrefNotifierImpl(); |
| 85 OverlayUserPrefStore* incognito_pref_store = | 85 OverlayUserPrefStore* incognito_pref_store = |
| 86 new OverlayUserPrefStore(user_pref_store_.get()); | 86 new OverlayUserPrefStore(user_pref_store_.get()); |
| 87 PrefsTabHelper::InitIncognitoUserPrefStore(incognito_pref_store); | 87 PrefsTabHelper::InitIncognitoUserPrefStore(incognito_pref_store); |
| 88 | 88 |
| 89 scoped_refptr<PrefRegistrySyncable> forked_registry = | 89 scoped_refptr<user_prefs::PrefRegistrySyncable> forked_registry = |
| 90 static_cast<PrefRegistrySyncable*>( | 90 static_cast<user_prefs::PrefRegistrySyncable*>( |
| 91 pref_registry_.get())->ForkForIncognito(); | 91 pref_registry_.get())->ForkForIncognito(); |
| 92 PrefServiceSyncable* incognito_service = new PrefServiceSyncable( | 92 PrefServiceSyncable* incognito_service = new PrefServiceSyncable( |
| 93 pref_notifier, | 93 pref_notifier, |
| 94 pref_value_store_->CloneAndSpecialize( | 94 pref_value_store_->CloneAndSpecialize( |
| 95 NULL, // managed | 95 NULL, // managed |
| 96 incognito_extension_prefs, | 96 incognito_extension_prefs, |
| 97 NULL, // command_line_prefs | 97 NULL, // command_line_prefs |
| 98 incognito_pref_store, | 98 incognito_pref_store, |
| 99 NULL, // recommended | 99 NULL, // recommended |
| 100 forked_registry->defaults(), | 100 forked_registry->defaults(), |
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 139 void PrefServiceSyncable::UpdateCommandLinePrefStore( | 139 void PrefServiceSyncable::UpdateCommandLinePrefStore( |
| 140 PrefStore* cmd_line_store) { | 140 PrefStore* cmd_line_store) { |
| 141 // 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 |
| 142 // copies will be out of sync. | 142 // copies will be out of sync. |
| 143 DCHECK(!pref_service_forked_); | 143 DCHECK(!pref_service_forked_); |
| 144 PrefService::UpdateCommandLinePrefStore(cmd_line_store); | 144 PrefService::UpdateCommandLinePrefStore(cmd_line_store); |
| 145 } | 145 } |
| 146 | 146 |
| 147 void PrefServiceSyncable::AddRegisteredSyncablePreference( | 147 void PrefServiceSyncable::AddRegisteredSyncablePreference( |
| 148 const char* path, | 148 const char* path, |
| 149 const PrefRegistrySyncable::PrefSyncStatus sync_status) { | 149 const user_prefs::PrefRegistrySyncable::PrefSyncStatus sync_status) { |
| 150 DCHECK(FindPreference(path)); | 150 DCHECK(FindPreference(path)); |
| 151 if (sync_status == PrefRegistrySyncable::SYNCABLE_PREF) { | 151 if (sync_status == user_prefs::PrefRegistrySyncable::SYNCABLE_PREF) { |
| 152 pref_sync_associator_.RegisterPref(path); | 152 pref_sync_associator_.RegisterPref(path); |
| 153 } else if (sync_status == PrefRegistrySyncable::SYNCABLE_PRIORITY_PREF) { | 153 } else if (sync_status == |
| 154 user_prefs::PrefRegistrySyncable::SYNCABLE_PRIORITY_PREF) { |
| 154 priority_pref_sync_associator_.RegisterPref(path); | 155 priority_pref_sync_associator_.RegisterPref(path); |
| 155 } else { | 156 } else { |
| 156 NOTREACHED() << "invalid sync_status: " << sync_status; | 157 NOTREACHED() << "invalid sync_status: " << sync_status; |
| 157 } | 158 } |
| 158 } | 159 } |
| 159 | 160 |
| 160 void PrefServiceSyncable::OnIsSyncingChanged() { | 161 void PrefServiceSyncable::OnIsSyncingChanged() { |
| 161 FOR_EACH_OBSERVER(PrefServiceSyncableObserver, observer_list_, | 162 FOR_EACH_OBSERVER(PrefServiceSyncableObserver, observer_list_, |
| 162 OnIsSyncingChanged()); | 163 OnIsSyncingChanged()); |
| 163 } | 164 } |
| 164 | 165 |
| 165 void PrefServiceSyncable::ProcessPrefChange(const std::string& name) { | 166 void PrefServiceSyncable::ProcessPrefChange(const std::string& name) { |
| 166 pref_sync_associator_.ProcessPrefChange(name); | 167 pref_sync_associator_.ProcessPrefChange(name); |
| 167 priority_pref_sync_associator_.ProcessPrefChange(name); | 168 priority_pref_sync_associator_.ProcessPrefChange(name); |
| 168 } | 169 } |
| OLD | NEW |