Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2)

Side by Side Diff: chrome/browser/prefs/pref_service_syncable.cc

Issue 1326353002: Remove dependency of PrefSyncableService on Profile. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@pref_model_associator
Patch Set: Move files back to //chrome/browser/prefs & //chrome/test/base Created 5 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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/callback.h"
8 #include "base/files/file_path.h" 9 #include "base/files/file_path.h"
9 #include "base/prefs/default_pref_store.h" 10 #include "base/prefs/default_pref_store.h"
10 #include "base/prefs/overlay_user_pref_store.h" 11 #include "base/prefs/overlay_user_pref_store.h"
11 #include "base/prefs/pref_notifier_impl.h" 12 #include "base/prefs/pref_notifier_impl.h"
12 #include "base/prefs/pref_registry.h" 13 #include "base/prefs/pref_registry.h"
13 #include "base/prefs/pref_value_store.h" 14 #include "base/prefs/pref_value_store.h"
14 #include "base/strings/string_number_conversions.h" 15 #include "base/strings/string_number_conversions.h"
15 #include "base/value_conversions.h" 16 #include "base/value_conversions.h"
16 #include "chrome/browser/prefs/pref_model_associator.h" 17 #include "chrome/browser/prefs/pref_model_associator.h"
17 #include "chrome/browser/prefs/pref_service_syncable_observer.h" 18 #include "chrome/browser/prefs/pref_service_syncable_observer.h"
18 #include "chrome/browser/profiles/profile.h"
19 #include "chrome/browser/ui/prefs/prefs_tab_helper.h"
20 #include "components/pref_registry/pref_registry_syncable.h" 19 #include "components/pref_registry/pref_registry_syncable.h"
21 20
22 // static
23 PrefServiceSyncable* PrefServiceSyncable::FromProfile(Profile* profile) {
24 return static_cast<PrefServiceSyncable*>(profile->GetPrefs());
25 }
26
27 // static
28 PrefServiceSyncable* PrefServiceSyncable::IncognitoFromProfile(
29 Profile* profile) {
30 return static_cast<PrefServiceSyncable*>(profile->GetOffTheRecordPrefs());
31 }
32
33 PrefServiceSyncable::PrefServiceSyncable( 21 PrefServiceSyncable::PrefServiceSyncable(
34 PrefNotifierImpl* pref_notifier, 22 PrefNotifierImpl* pref_notifier,
35 PrefValueStore* pref_value_store, 23 PrefValueStore* pref_value_store,
36 PersistentPrefStore* user_prefs, 24 PersistentPrefStore* user_prefs,
37 user_prefs::PrefRegistrySyncable* pref_registry, 25 user_prefs::PrefRegistrySyncable* pref_registry,
38 base::Callback<void(PersistentPrefStore::PrefReadError)> 26 base::Callback<void(PersistentPrefStore::PrefReadError)>
39 read_error_callback, 27 read_error_callback,
40 bool async) 28 bool async)
41 : PrefService(pref_notifier, 29 : PrefService(pref_notifier,
42 pref_value_store, 30 pref_value_store,
43 user_prefs, 31 user_prefs,
44 pref_registry, 32 pref_registry,
45 read_error_callback, 33 read_error_callback,
46 async), 34 async),
47 pref_sync_associator_(syncer::PREFERENCES), 35 pref_sync_associator_(syncer::PREFERENCES),
48 priority_pref_sync_associator_(syncer::PRIORITY_PREFERENCES) { 36 priority_pref_sync_associator_(syncer::PRIORITY_PREFERENCES),
37 pref_model_associator_client_(NULL) {
49 pref_sync_associator_.SetPrefService(this); 38 pref_sync_associator_.SetPrefService(this);
50 priority_pref_sync_associator_.SetPrefService(this); 39 priority_pref_sync_associator_.SetPrefService(this);
51 40
52 // Let PrefModelAssociators know about changes to preference values. 41 // Let PrefModelAssociators know about changes to preference values.
53 pref_value_store->set_callback( 42 pref_value_store->set_callback(base::Bind(
54 base::Bind(&PrefServiceSyncable::ProcessPrefChange, 43 &PrefServiceSyncable::ProcessPrefChange, base::Unretained(this)));
55 base::Unretained(this)));
56 44
57 // Add already-registered syncable preferences to PrefModelAssociator. 45 // Add already-registered syncable preferences to PrefModelAssociator.
58 for (PrefRegistry::const_iterator it = pref_registry->begin(); 46 for (PrefRegistry::const_iterator it = pref_registry->begin();
59 it != pref_registry->end(); ++it) { 47 it != pref_registry->end(); ++it) {
60 const std::string& path = it->first; 48 const std::string& path = it->first;
61 AddRegisteredSyncablePreference(path, 49 AddRegisteredSyncablePreference(path,
62 pref_registry_->GetRegistrationFlags(path)); 50 pref_registry_->GetRegistrationFlags(path));
63 } 51 }
64 52
65 // Watch for syncable preferences registered after this point. 53 // Watch for syncable preferences registered after this point.
66 pref_registry->SetSyncableRegistrationCallback( 54 pref_registry->SetSyncableRegistrationCallback(
67 base::Bind(&PrefServiceSyncable::AddRegisteredSyncablePreference, 55 base::Bind(&PrefServiceSyncable::AddRegisteredSyncablePreference,
68 base::Unretained(this))); 56 base::Unretained(this)));
69 } 57 }
70 58
71 PrefServiceSyncable::~PrefServiceSyncable() { 59 PrefServiceSyncable::~PrefServiceSyncable() {
72 // Remove our callback from the registry, since it may outlive us. 60 // Remove our callback from the registry, since it may outlive us.
73 user_prefs::PrefRegistrySyncable* registry = 61 user_prefs::PrefRegistrySyncable* registry =
74 static_cast<user_prefs::PrefRegistrySyncable*>(pref_registry_.get()); 62 static_cast<user_prefs::PrefRegistrySyncable*>(pref_registry_.get());
75 registry->SetSyncableRegistrationCallback( 63 registry->SetSyncableRegistrationCallback(
76 user_prefs::PrefRegistrySyncable::SyncableRegistrationCallback()); 64 user_prefs::PrefRegistrySyncable::SyncableRegistrationCallback());
77 } 65 }
78 66
67 void PrefServiceSyncable::SetPrefModelAssociatorClient(
68 PrefModelAssociatorClient* pref_model_associator_client) {
69 pref_model_associator_client_ = pref_model_associator_client;
70 pref_sync_associator_.set_pref_model_associator_client(
71 pref_model_associator_client_);
72 priority_pref_sync_associator_.set_pref_model_associator_client(
73 pref_model_associator_client_);
74 }
75
79 PrefServiceSyncable* PrefServiceSyncable::CreateIncognitoPrefService( 76 PrefServiceSyncable* PrefServiceSyncable::CreateIncognitoPrefService(
80 PrefStore* incognito_extension_prefs) { 77 PrefStore* incognito_extension_prefs,
78 const base::Callback<void(OverlayUserPrefStore*)>&
79 incognito_pref_created_cb) {
81 pref_service_forked_ = true; 80 pref_service_forked_ = true;
82 PrefNotifierImpl* pref_notifier = new PrefNotifierImpl(); 81 PrefNotifierImpl* pref_notifier = new PrefNotifierImpl();
83 OverlayUserPrefStore* incognito_pref_store = 82 OverlayUserPrefStore* incognito_pref_store =
84 new OverlayUserPrefStore(user_pref_store_.get()); 83 new OverlayUserPrefStore(user_pref_store_.get());
85 PrefsTabHelper::InitIncognitoUserPrefStore(incognito_pref_store); 84 if (!incognito_pref_created_cb.is_null())
85 incognito_pref_created_cb.Run(incognito_pref_store);
86 86
87 scoped_refptr<user_prefs::PrefRegistrySyncable> forked_registry = 87 scoped_refptr<user_prefs::PrefRegistrySyncable> forked_registry =
88 static_cast<user_prefs::PrefRegistrySyncable*>( 88 static_cast<user_prefs::PrefRegistrySyncable*>(pref_registry_.get())
89 pref_registry_.get())->ForkForIncognito(); 89 ->ForkForIncognito();
90 PrefServiceSyncable* incognito_service = new PrefServiceSyncable( 90 PrefServiceSyncable* incognito_service = new PrefServiceSyncable(
91 pref_notifier, 91 pref_notifier,
92 pref_value_store_->CloneAndSpecialize(NULL, // managed 92 pref_value_store_->CloneAndSpecialize(NULL, // managed
93 NULL, // supervised_user 93 NULL, // supervised_user
94 incognito_extension_prefs, 94 incognito_extension_prefs,
95 NULL, // command_line_prefs 95 NULL, // command_line_prefs
96 incognito_pref_store, 96 incognito_pref_store,
97 NULL, // recommended 97 NULL, // recommended
98 forked_registry->defaults().get(), 98 forked_registry->defaults().get(),
99 pref_notifier), 99 pref_notifier),
100 incognito_pref_store, 100 incognito_pref_store,
101 forked_registry.get(), 101 forked_registry.get(),
102 read_error_callback_, 102 read_error_callback_,
103 false); 103 false);
104 incognito_service->SetPrefModelAssociatorClient(
105 pref_model_associator_client_);
104 return incognito_service; 106 return incognito_service;
105 } 107 }
106 108
107 bool PrefServiceSyncable::IsSyncing() { 109 bool PrefServiceSyncable::IsSyncing() {
108 return pref_sync_associator_.models_associated(); 110 return pref_sync_associator_.models_associated();
109 } 111 }
110 112
111 bool PrefServiceSyncable::IsPrioritySyncing() { 113 bool PrefServiceSyncable::IsPrioritySyncing() {
112 return priority_pref_sync_associator_.models_associated(); 114 return priority_pref_sync_associator_.models_associated();
113 } 115 }
(...skipping 25 matching lines...) Expand all
139 } 141 }
140 142
141 void PrefServiceSyncable::UpdateCommandLinePrefStore( 143 void PrefServiceSyncable::UpdateCommandLinePrefStore(
142 PrefStore* cmd_line_store) { 144 PrefStore* cmd_line_store) {
143 // If |pref_service_forked_| is true, then this PrefService and the forked 145 // If |pref_service_forked_| is true, then this PrefService and the forked
144 // copies will be out of sync. 146 // copies will be out of sync.
145 DCHECK(!pref_service_forked_); 147 DCHECK(!pref_service_forked_);
146 PrefService::UpdateCommandLinePrefStore(cmd_line_store); 148 PrefService::UpdateCommandLinePrefStore(cmd_line_store);
147 } 149 }
148 150
149 void PrefServiceSyncable::AddSyncedPrefObserver( 151 void PrefServiceSyncable::AddSyncedPrefObserver(const std::string& name,
150 const std::string& name, 152 SyncedPrefObserver* observer) {
151 SyncedPrefObserver* observer) {
152 pref_sync_associator_.AddSyncedPrefObserver(name, observer); 153 pref_sync_associator_.AddSyncedPrefObserver(name, observer);
153 priority_pref_sync_associator_.AddSyncedPrefObserver(name, observer); 154 priority_pref_sync_associator_.AddSyncedPrefObserver(name, observer);
154 } 155 }
155 156
156 void PrefServiceSyncable::RemoveSyncedPrefObserver( 157 void PrefServiceSyncable::RemoveSyncedPrefObserver(
157 const std::string& name, 158 const std::string& name,
158 SyncedPrefObserver* observer) { 159 SyncedPrefObserver* observer) {
159 pref_sync_associator_.RemoveSyncedPrefObserver(name, observer); 160 pref_sync_associator_.RemoveSyncedPrefObserver(name, observer);
160 priority_pref_sync_associator_.RemoveSyncedPrefObserver(name, observer); 161 priority_pref_sync_associator_.RemoveSyncedPrefObserver(name, observer);
161 } 162 }
162 163
163 void PrefServiceSyncable::AddRegisteredSyncablePreference( 164 void PrefServiceSyncable::AddRegisteredSyncablePreference(
164 const std::string& path, 165 const std::string& path,
165 uint32 flags) { 166 uint32 flags) {
166 DCHECK(FindPreference(path)); 167 DCHECK(FindPreference(path));
167 if (flags & user_prefs::PrefRegistrySyncable::SYNCABLE_PREF) { 168 if (flags & user_prefs::PrefRegistrySyncable::SYNCABLE_PREF) {
168 pref_sync_associator_.RegisterPref(path.c_str()); 169 pref_sync_associator_.RegisterPref(path.c_str());
169 } else if (flags & 170 } else if (flags & user_prefs::PrefRegistrySyncable::SYNCABLE_PRIORITY_PREF) {
170 user_prefs::PrefRegistrySyncable::SYNCABLE_PRIORITY_PREF) {
171 priority_pref_sync_associator_.RegisterPref(path.c_str()); 171 priority_pref_sync_associator_.RegisterPref(path.c_str());
172 } 172 }
173 } 173 }
174 174
175 void PrefServiceSyncable::OnIsSyncingChanged() { 175 void PrefServiceSyncable::OnIsSyncingChanged() {
176 FOR_EACH_OBSERVER(PrefServiceSyncableObserver, observer_list_, 176 FOR_EACH_OBSERVER(PrefServiceSyncableObserver, observer_list_,
177 OnIsSyncingChanged()); 177 OnIsSyncingChanged());
178 } 178 }
179 179
180 void PrefServiceSyncable::ProcessPrefChange(const std::string& name) { 180 void PrefServiceSyncable::ProcessPrefChange(const std::string& name) {
181 pref_sync_associator_.ProcessPrefChange(name); 181 pref_sync_associator_.ProcessPrefChange(name);
182 priority_pref_sync_associator_.ProcessPrefChange(name); 182 priority_pref_sync_associator_.ProcessPrefChange(name);
183 } 183 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698