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/sync/sync_prefs.h" | 5 #include "components/sync_driver/sync_prefs.h" |
6 | 6 |
7 #include "base/command_line.h" | 7 #include "base/command_line.h" |
8 #include "base/logging.h" | 8 #include "base/logging.h" |
9 #include "base/prefs/pref_member.h" | 9 #include "base/prefs/pref_member.h" |
10 #include "base/prefs/pref_service.h" | 10 #include "base/prefs/pref_service.h" |
11 #include "base/strings/string_number_conversions.h" | 11 #include "base/strings/string_number_conversions.h" |
12 #include "base/values.h" | 12 #include "base/values.h" |
13 #include "build/build_config.h" | 13 #include "build/build_config.h" |
14 #include "chrome/browser/chrome_notification_types.h" | 14 #include "components/sync_driver/pref_names.h" |
15 #include "chrome/browser/profiles/profile_io_data.h" | |
16 #include "chrome/browser/sync/profile_sync_service.h" | |
17 #include "chrome/common/chrome_switches.h" | |
18 #include "chrome/common/pref_names.h" | |
19 #include "components/user_prefs/pref_registry_syncable.h" | 15 #include "components/user_prefs/pref_registry_syncable.h" |
20 #include "content/public/browser/notification_details.h" | |
21 #include "content/public/browser/notification_source.h" | |
22 | 16 |
23 namespace browser_sync { | 17 namespace sync_driver { |
24 | 18 |
25 SyncPrefObserver::~SyncPrefObserver() {} | 19 SyncPrefObserver::~SyncPrefObserver() {} |
26 | 20 |
27 SyncPrefs::SyncPrefs(PrefService* pref_service) | 21 SyncPrefs::SyncPrefs(PrefService* pref_service) : pref_service_(pref_service) { |
28 : pref_service_(pref_service) { | |
29 DCHECK(pref_service); | 22 DCHECK(pref_service); |
30 RegisterPrefGroups(); | 23 RegisterPrefGroups(); |
31 // Watch the preference that indicates sync is managed so we can take | 24 // Watch the preference that indicates sync is managed so we can take |
32 // appropriate action. | 25 // appropriate action. |
33 pref_sync_managed_.Init(prefs::kSyncManaged, pref_service_, | 26 pref_sync_managed_.Init( |
34 base::Bind(&SyncPrefs::OnSyncManagedPrefChanged, | 27 prefs::kSyncManaged, |
35 base::Unretained(this))); | 28 pref_service_, |
| 29 base::Bind(&SyncPrefs::OnSyncManagedPrefChanged, base::Unretained(this))); |
36 } | 30 } |
37 | 31 |
38 SyncPrefs::~SyncPrefs() { | 32 SyncPrefs::~SyncPrefs() { DCHECK(CalledOnValidThread()); } |
39 DCHECK(CalledOnValidThread()); | |
40 } | |
41 | 33 |
42 // static | 34 // static |
43 void SyncPrefs::RegisterProfilePrefs( | 35 void SyncPrefs::RegisterProfilePrefs( |
44 user_prefs::PrefRegistrySyncable* registry) { | 36 user_prefs::PrefRegistrySyncable* registry) { |
45 registry->RegisterBooleanPref( | 37 registry->RegisterBooleanPref( |
46 prefs::kSyncHasSetupCompleted, | 38 prefs::kSyncHasSetupCompleted, |
47 false, | 39 false, |
48 user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF); | 40 user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF); |
49 registry->RegisterBooleanPref( | 41 registry->RegisterBooleanPref( |
50 prefs::kSyncSuppressStart, | 42 prefs::kSyncSuppressStart, |
(...skipping 30 matching lines...) Expand all Loading... |
81 | 73 |
82 registry->RegisterStringPref( | 74 registry->RegisterStringPref( |
83 prefs::kEnhancedBookmarksExtensionId, | 75 prefs::kEnhancedBookmarksExtensionId, |
84 std::string(), | 76 std::string(), |
85 user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF); | 77 user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF); |
86 | 78 |
87 // All types are set to off by default, which forces a configuration to | 79 // All types are set to off by default, which forces a configuration to |
88 // explicitly enable them. GetPreferredTypes() will ensure that any new | 80 // explicitly enable them. GetPreferredTypes() will ensure that any new |
89 // implicit types are enabled when their pref group is, or via | 81 // implicit types are enabled when their pref group is, or via |
90 // KeepEverythingSynced. | 82 // KeepEverythingSynced. |
91 for (syncer::ModelTypeSet::Iterator it = user_types.First(); | 83 for (syncer::ModelTypeSet::Iterator it = user_types.First(); it.Good(); |
92 it.Good(); it.Inc()) { | 84 it.Inc()) { |
93 RegisterDataTypePreferredPref(registry, it.Get(), false); | 85 RegisterDataTypePreferredPref(registry, it.Get(), false); |
94 } | 86 } |
95 | 87 |
96 registry->RegisterBooleanPref( | 88 registry->RegisterBooleanPref( |
97 prefs::kSyncManaged, | 89 prefs::kSyncManaged, |
98 false, | 90 false, |
99 user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF); | 91 user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF); |
100 registry->RegisterStringPref( | 92 registry->RegisterStringPref( |
101 prefs::kSyncEncryptionBootstrapToken, | 93 prefs::kSyncEncryptionBootstrapToken, |
102 std::string(), | 94 std::string(), |
(...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
190 bool SyncPrefs::IsStartSuppressed() const { | 182 bool SyncPrefs::IsStartSuppressed() const { |
191 DCHECK(CalledOnValidThread()); | 183 DCHECK(CalledOnValidThread()); |
192 return pref_service_->GetBoolean(prefs::kSyncSuppressStart); | 184 return pref_service_->GetBoolean(prefs::kSyncSuppressStart); |
193 } | 185 } |
194 | 186 |
195 void SyncPrefs::SetStartSuppressed(bool is_suppressed) { | 187 void SyncPrefs::SetStartSuppressed(bool is_suppressed) { |
196 DCHECK(CalledOnValidThread()); | 188 DCHECK(CalledOnValidThread()); |
197 pref_service_->SetBoolean(prefs::kSyncSuppressStart, is_suppressed); | 189 pref_service_->SetBoolean(prefs::kSyncSuppressStart, is_suppressed); |
198 } | 190 } |
199 | 191 |
200 std::string SyncPrefs::GetGoogleServicesUsername() const { | |
201 DCHECK(CalledOnValidThread()); | |
202 return pref_service_->GetString(prefs::kGoogleServicesUsername); | |
203 } | |
204 | |
205 base::Time SyncPrefs::GetLastSyncedTime() const { | 192 base::Time SyncPrefs::GetLastSyncedTime() const { |
206 DCHECK(CalledOnValidThread()); | 193 DCHECK(CalledOnValidThread()); |
207 return | 194 return base::Time::FromInternalValue( |
208 base::Time::FromInternalValue( | 195 pref_service_->GetInt64(prefs::kSyncLastSyncedTime)); |
209 pref_service_->GetInt64(prefs::kSyncLastSyncedTime)); | |
210 } | 196 } |
211 | 197 |
212 void SyncPrefs::SetLastSyncedTime(base::Time time) { | 198 void SyncPrefs::SetLastSyncedTime(base::Time time) { |
213 DCHECK(CalledOnValidThread()); | 199 DCHECK(CalledOnValidThread()); |
214 pref_service_->SetInt64(prefs::kSyncLastSyncedTime, time.ToInternalValue()); | 200 pref_service_->SetInt64(prefs::kSyncLastSyncedTime, time.ToInternalValue()); |
215 } | 201 } |
216 | 202 |
217 bool SyncPrefs::HasKeepEverythingSynced() const { | 203 bool SyncPrefs::HasKeepEverythingSynced() const { |
218 DCHECK(CalledOnValidThread()); | 204 DCHECK(CalledOnValidThread()); |
219 return pref_service_->GetBoolean(prefs::kSyncKeepEverythingSynced); | 205 return pref_service_->GetBoolean(prefs::kSyncKeepEverythingSynced); |
220 } | 206 } |
221 | 207 |
222 void SyncPrefs::SetKeepEverythingSynced(bool keep_everything_synced) { | 208 void SyncPrefs::SetKeepEverythingSynced(bool keep_everything_synced) { |
223 DCHECK(CalledOnValidThread()); | 209 DCHECK(CalledOnValidThread()); |
224 pref_service_->SetBoolean(prefs::kSyncKeepEverythingSynced, | 210 pref_service_->SetBoolean(prefs::kSyncKeepEverythingSynced, |
225 keep_everything_synced); | 211 keep_everything_synced); |
226 } | 212 } |
227 | 213 |
228 syncer::ModelTypeSet SyncPrefs::GetPreferredDataTypes( | 214 syncer::ModelTypeSet SyncPrefs::GetPreferredDataTypes( |
229 syncer::ModelTypeSet registered_types) const { | 215 syncer::ModelTypeSet registered_types) const { |
230 DCHECK(CalledOnValidThread()); | 216 DCHECK(CalledOnValidThread()); |
231 | 217 |
232 // First remove any datatypes that are inconsistent with the current policies | |
233 // on the client (so that "keep everything synced" doesn't include them). | |
234 if (pref_service_->HasPrefPath(prefs::kSavingBrowserHistoryDisabled) && | |
235 pref_service_->GetBoolean(prefs::kSavingBrowserHistoryDisabled)) { | |
236 registered_types.Remove(syncer::TYPED_URLS); | |
237 } | |
238 | |
239 if (pref_service_->GetBoolean(prefs::kSyncKeepEverythingSynced)) { | 218 if (pref_service_->GetBoolean(prefs::kSyncKeepEverythingSynced)) { |
240 return registered_types; | 219 return registered_types; |
241 } | 220 } |
242 | 221 |
243 syncer::ModelTypeSet preferred_types; | 222 syncer::ModelTypeSet preferred_types; |
244 for (syncer::ModelTypeSet::Iterator it = registered_types.First(); | 223 for (syncer::ModelTypeSet::Iterator it = registered_types.First(); it.Good(); |
245 it.Good(); it.Inc()) { | 224 it.Inc()) { |
246 if (GetDataTypePreferred(it.Get())) { | 225 if (GetDataTypePreferred(it.Get())) { |
247 preferred_types.Put(it.Get()); | 226 preferred_types.Put(it.Get()); |
248 } | 227 } |
249 } | 228 } |
250 return ResolvePrefGroups(registered_types, preferred_types); | 229 return ResolvePrefGroups(registered_types, preferred_types); |
251 } | 230 } |
252 | 231 |
253 void SyncPrefs::SetPreferredDataTypes( | 232 void SyncPrefs::SetPreferredDataTypes(syncer::ModelTypeSet registered_types, |
254 syncer::ModelTypeSet registered_types, | 233 syncer::ModelTypeSet preferred_types) { |
255 syncer::ModelTypeSet preferred_types) { | |
256 DCHECK(CalledOnValidThread()); | 234 DCHECK(CalledOnValidThread()); |
257 DCHECK(registered_types.HasAll(preferred_types)); | 235 DCHECK(registered_types.HasAll(preferred_types)); |
258 preferred_types = ResolvePrefGroups(registered_types, preferred_types); | 236 preferred_types = ResolvePrefGroups(registered_types, preferred_types); |
259 for (syncer::ModelTypeSet::Iterator i = registered_types.First(); | 237 for (syncer::ModelTypeSet::Iterator i = registered_types.First(); i.Good(); |
260 i.Good(); i.Inc()) { | 238 i.Inc()) { |
261 SetDataTypePreferred(i.Get(), preferred_types.Has(i.Get())); | 239 SetDataTypePreferred(i.Get(), preferred_types.Has(i.Get())); |
262 } | 240 } |
263 } | 241 } |
264 | 242 |
265 bool SyncPrefs::IsManaged() const { | 243 bool SyncPrefs::IsManaged() const { |
266 DCHECK(CalledOnValidThread()); | 244 DCHECK(CalledOnValidThread()); |
267 return pref_service_->GetBoolean(prefs::kSyncManaged); | 245 return pref_service_->GetBoolean(prefs::kSyncManaged); |
268 } | 246 } |
269 | 247 |
270 std::string SyncPrefs::GetEncryptionBootstrapToken() const { | 248 std::string SyncPrefs::GetEncryptionBootstrapToken() const { |
271 DCHECK(CalledOnValidThread()); | 249 DCHECK(CalledOnValidThread()); |
272 return pref_service_->GetString(prefs::kSyncEncryptionBootstrapToken); | 250 return pref_service_->GetString(prefs::kSyncEncryptionBootstrapToken); |
273 } | 251 } |
274 | 252 |
275 void SyncPrefs::SetEncryptionBootstrapToken(const std::string& token) { | 253 void SyncPrefs::SetEncryptionBootstrapToken(const std::string& token) { |
276 DCHECK(CalledOnValidThread()); | 254 DCHECK(CalledOnValidThread()); |
277 pref_service_->SetString(prefs::kSyncEncryptionBootstrapToken, token); | 255 pref_service_->SetString(prefs::kSyncEncryptionBootstrapToken, token); |
278 } | 256 } |
279 | 257 |
280 std::string SyncPrefs::GetKeystoreEncryptionBootstrapToken() const { | 258 std::string SyncPrefs::GetKeystoreEncryptionBootstrapToken() const { |
281 DCHECK(CalledOnValidThread()); | 259 DCHECK(CalledOnValidThread()); |
282 return pref_service_->GetString( | 260 return pref_service_->GetString(prefs::kSyncKeystoreEncryptionBootstrapToken); |
283 prefs::kSyncKeystoreEncryptionBootstrapToken); | |
284 } | 261 } |
285 | 262 |
286 void SyncPrefs::SetKeystoreEncryptionBootstrapToken(const std::string& token) { | 263 void SyncPrefs::SetKeystoreEncryptionBootstrapToken(const std::string& token) { |
287 DCHECK(CalledOnValidThread()); | 264 DCHECK(CalledOnValidThread()); |
288 pref_service_->SetString(prefs::kSyncKeystoreEncryptionBootstrapToken, token); | 265 pref_service_->SetString(prefs::kSyncKeystoreEncryptionBootstrapToken, token); |
289 } | 266 } |
290 | 267 |
291 std::string SyncPrefs::GetSyncSessionsGUID() const { | 268 std::string SyncPrefs::GetSyncSessionsGUID() const { |
292 DCHECK(CalledOnValidThread()); | 269 DCHECK(CalledOnValidThread()); |
293 return pref_service_->GetString(prefs::kSyncSessionsGUID); | 270 return pref_service_->GetString(prefs::kSyncSessionsGUID); |
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
383 syncer::ModelTypeSetFromValue( | 360 syncer::ModelTypeSetFromValue( |
384 *pref_service_->GetList(prefs::kSyncAcknowledgedSyncTypes))); | 361 *pref_service_->GetList(prefs::kSyncAcknowledgedSyncTypes))); |
385 | 362 |
386 scoped_ptr<base::ListValue> value( | 363 scoped_ptr<base::ListValue> value( |
387 syncer::ModelTypeSetToValue(acknowledged_types)); | 364 syncer::ModelTypeSetToValue(acknowledged_types)); |
388 pref_service_->Set(prefs::kSyncAcknowledgedSyncTypes, *value); | 365 pref_service_->Set(prefs::kSyncAcknowledgedSyncTypes, *value); |
389 } | 366 } |
390 | 367 |
391 void SyncPrefs::OnSyncManagedPrefChanged() { | 368 void SyncPrefs::OnSyncManagedPrefChanged() { |
392 DCHECK(CalledOnValidThread()); | 369 DCHECK(CalledOnValidThread()); |
393 FOR_EACH_OBSERVER(SyncPrefObserver, sync_pref_observers_, | 370 FOR_EACH_OBSERVER(SyncPrefObserver, |
| 371 sync_pref_observers_, |
394 OnSyncManagedPrefChange(*pref_sync_managed_)); | 372 OnSyncManagedPrefChange(*pref_sync_managed_)); |
395 } | 373 } |
396 | 374 |
397 void SyncPrefs::SetManagedForTest(bool is_managed) { | 375 void SyncPrefs::SetManagedForTest(bool is_managed) { |
398 DCHECK(CalledOnValidThread()); | 376 DCHECK(CalledOnValidThread()); |
399 pref_service_->SetBoolean(prefs::kSyncManaged, is_managed); | 377 pref_service_->SetBoolean(prefs::kSyncManaged, is_managed); |
400 } | 378 } |
401 | 379 |
402 syncer::ModelTypeSet SyncPrefs::GetAcknowledgeSyncedTypesForTest() const { | 380 syncer::ModelTypeSet SyncPrefs::GetAcknowledgeSyncedTypesForTest() const { |
403 DCHECK(CalledOnValidThread()); | 381 DCHECK(CalledOnValidThread()); |
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
460 pref_service_->GetUserPrefValue(pref_name) == NULL && | 438 pref_service_->GetUserPrefValue(pref_name) == NULL && |
461 pref_service_->IsUserModifiablePreference(pref_name)) { | 439 pref_service_->IsUserModifiablePreference(pref_name)) { |
462 // If there is no tab sync preference yet (i.e. newly enabled type), | 440 // If there is no tab sync preference yet (i.e. newly enabled type), |
463 // default to the session sync preference value. | 441 // default to the session sync preference value. |
464 pref_name = GetPrefNameForDataType(syncer::SESSIONS); | 442 pref_name = GetPrefNameForDataType(syncer::SESSIONS); |
465 } | 443 } |
466 | 444 |
467 return pref_service_->GetBoolean(pref_name); | 445 return pref_service_->GetBoolean(pref_name); |
468 } | 446 } |
469 | 447 |
470 void SyncPrefs::SetDataTypePreferred( | 448 void SyncPrefs::SetDataTypePreferred(syncer::ModelType type, |
471 syncer::ModelType type, bool is_preferred) { | 449 bool is_preferred) { |
472 DCHECK(CalledOnValidThread()); | 450 DCHECK(CalledOnValidThread()); |
473 const char* pref_name = GetPrefNameForDataType(type); | 451 const char* pref_name = GetPrefNameForDataType(type); |
474 if (!pref_name) { | 452 if (!pref_name) { |
475 NOTREACHED(); | 453 NOTREACHED(); |
476 return; | 454 return; |
477 } | 455 } |
478 pref_service_->SetBoolean(pref_name, is_preferred); | 456 pref_service_->SetBoolean(pref_name, is_preferred); |
479 } | 457 } |
480 | 458 |
481 syncer::ModelTypeSet SyncPrefs::ResolvePrefGroups( | 459 syncer::ModelTypeSet SyncPrefs::ResolvePrefGroups( |
482 syncer::ModelTypeSet registered_types, | 460 syncer::ModelTypeSet registered_types, |
483 syncer::ModelTypeSet types) const { | 461 syncer::ModelTypeSet types) const { |
484 DCHECK(registered_types.HasAll(types)); | 462 DCHECK(registered_types.HasAll(types)); |
485 syncer::ModelTypeSet types_with_groups = types; | 463 syncer::ModelTypeSet types_with_groups = types; |
486 for (PrefGroupsMap::const_iterator i = pref_groups_.begin(); | 464 for (PrefGroupsMap::const_iterator i = pref_groups_.begin(); |
487 i != pref_groups_.end(); ++i) { | 465 i != pref_groups_.end(); |
| 466 ++i) { |
488 if (types.Has(i->first)) | 467 if (types.Has(i->first)) |
489 types_with_groups.PutAll(i->second); | 468 types_with_groups.PutAll(i->second); |
490 } | 469 } |
491 types_with_groups.RetainAll(registered_types); | 470 types_with_groups.RetainAll(registered_types); |
492 return types_with_groups; | 471 return types_with_groups; |
493 } | 472 } |
494 | 473 |
495 } // namespace browser_sync | 474 } // namespace browser_sync |
OLD | NEW |