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

Side by Side Diff: chrome/browser/sync/sync_prefs.cc

Issue 9500005: Add a declarative way in c/b/s/sync_prefs.cc to say which data types have prefs (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: . Created 8 years, 9 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 | Annotate | Revision Log
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/sync/sync_prefs.h" 5 #include "chrome/browser/sync/sync_prefs.h"
6 6
7 #include "base/logging.h" 7 #include "base/logging.h"
8 #include "base/string_number_conversions.h" 8 #include "base/string_number_conversions.h"
9 #include "base/values.h" 9 #include "base/values.h"
10 #include "build/build_config.h" 10 #include "build/build_config.h"
11 #include "chrome/browser/prefs/pref_service.h" 11 #include "chrome/browser/prefs/pref_service.h"
12 #include "chrome/common/chrome_notification_types.h" 12 #include "chrome/common/chrome_notification_types.h"
13 #include "chrome/common/pref_names.h" 13 #include "chrome/common/pref_names.h"
14 #include "content/public/browser/notification_details.h" 14 #include "content/public/browser/notification_details.h"
15 #include "content/public/browser/notification_source.h" 15 #include "content/public/browser/notification_source.h"
16 16
17 namespace browser_sync { 17 namespace browser_sync {
18 18
19 SyncPrefObserver::~SyncPrefObserver() {} 19 SyncPrefObserver::~SyncPrefObserver() {}
20 20
21 SyncPrefs::SyncPrefs(PrefService* pref_service) 21 SyncPrefs::SyncPrefs(PrefService* pref_service)
22 : pref_service_(pref_service) { 22 : pref_service_(pref_service) {
23 if (pref_service_) { 23 if (pref_service_) {
24 RegisterDeterminedTypes();
akalin 2012/02/29 05:33:03 this doesn't need to be in the if statement
not at google - send to devlin 2012/03/01 03:14:40 Done.
24 RegisterPreferences(); 25 RegisterPreferences();
25 // Watch the preference that indicates sync is managed so we can take 26 // Watch the preference that indicates sync is managed so we can take
26 // appropriate action. 27 // appropriate action.
27 pref_sync_managed_.Init(prefs::kSyncManaged, pref_service_, this); 28 pref_sync_managed_.Init(prefs::kSyncManaged, pref_service_, this);
28 } 29 }
29 } 30 }
30 31
31 SyncPrefs::~SyncPrefs() { 32 SyncPrefs::~SyncPrefs() {
32 DCHECK(non_thread_safe_.CalledOnValidThread()); 33 DCHECK(non_thread_safe_.CalledOnValidThread());
33 } 34 }
(...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after
128 // policies on the client. 129 // policies on the client.
129 if (pref_service_->HasPrefPath(prefs::kSavingBrowserHistoryDisabled) && 130 if (pref_service_->HasPrefPath(prefs::kSavingBrowserHistoryDisabled) &&
130 pref_service_->GetBoolean(prefs::kSavingBrowserHistoryDisabled)) { 131 pref_service_->GetBoolean(prefs::kSavingBrowserHistoryDisabled)) {
131 registered_types.Remove(syncable::TYPED_URLS); 132 registered_types.Remove(syncable::TYPED_URLS);
132 } 133 }
133 134
134 if (pref_service_->GetBoolean(prefs::kSyncKeepEverythingSynced)) { 135 if (pref_service_->GetBoolean(prefs::kSyncKeepEverythingSynced)) {
135 return registered_types; 136 return registered_types;
136 } 137 }
137 138
138 // Remove autofill_profile since it's controlled by autofill, and
139 // search_engines since it's controlled by preferences (see code below).
140 syncable::ModelTypeSet user_selectable_types(registered_types); 139 syncable::ModelTypeSet user_selectable_types(registered_types);
141 DCHECK(!user_selectable_types.Has(syncable::NIGORI)); 140 DCHECK(!user_selectable_types.Has(syncable::NIGORI));
142 user_selectable_types.Remove(syncable::AUTOFILL_PROFILE);
143 user_selectable_types.Remove(syncable::SEARCH_ENGINES);
144 141
145 // Remove app_notifications since it's controlled by apps (see 142 // Remove any data types whose prefs depend on other types (will be added
akalin 2012/02/29 05:33:03 with ApplyTypeDependencies as described in the com
146 // code below). 143 // below if applicable).
147 // TODO(akalin): Centralize notion of all user selectable data types. 144 for (TypesDeterminedByMap::const_iterator i = types_determined_by_.begin();
148 user_selectable_types.Remove(syncable::APP_NOTIFICATIONS); 145 i != types_determined_by_.end(); ++i) {
146 user_selectable_types.Remove(i->first);
147 }
149 148
150 syncable::ModelTypeSet preferred_types; 149 syncable::ModelTypeSet preferred_types;
151 150
152 for (syncable::ModelTypeSet::Iterator it = user_selectable_types.First(); 151 for (syncable::ModelTypeSet::Iterator it = user_selectable_types.First();
153 it.Good(); it.Inc()) { 152 it.Good(); it.Inc()) {
154 if (GetDataTypePreferred(it.Get())) { 153 if (GetDataTypePreferred(it.Get())) {
155 preferred_types.Put(it.Get()); 154 preferred_types.Put(it.Get());
156 } 155 }
157 } 156 }
158 157
159 // Group the enabled/disabled state of autofill_profile with autofill, and 158 // Add any determined types if what they're determined by has been added.
160 // search_engines with preferences (since only autofill and preferences are 159 for (TypesDeterminedByMap::const_iterator i = types_determined_by_.begin();
161 // shown on the UI). 160 i != types_determined_by_.end(); ++i) {
162 if (registered_types.Has(syncable::AUTOFILL) && 161 if (registered_types.Has(i->first) &&
163 registered_types.Has(syncable::AUTOFILL_PROFILE) && 162 registered_types.Has(i->second) &&
164 GetDataTypePreferred(syncable::AUTOFILL)) { 163 GetDataTypePreferred(i->second)) {
165 preferred_types.Put(syncable::AUTOFILL_PROFILE); 164 preferred_types.Put(i->first);
166 } 165 }
167 if (registered_types.Has(syncable::PREFERENCES) &&
168 registered_types.Has(syncable::SEARCH_ENGINES) &&
169 GetDataTypePreferred(syncable::PREFERENCES)) {
170 preferred_types.Put(syncable::SEARCH_ENGINES);
171 }
172
173 // Set app_notifications to the same enabled/disabled state as
174 // apps (since only apps is shown on the UI).
175 if (registered_types.Has(syncable::APPS) &&
176 registered_types.Has(syncable::APP_NOTIFICATIONS) &&
177 GetDataTypePreferred(syncable::APPS)) {
178 preferred_types.Put(syncable::APP_NOTIFICATIONS);
179 } 166 }
180 167
181 return preferred_types; 168 return preferred_types;
182 } 169 }
183 170
184 void SyncPrefs::SetPreferredDataTypes( 171 void SyncPrefs::SetPreferredDataTypes(
185 syncable::ModelTypeSet registered_types, 172 syncable::ModelTypeSet registered_types,
186 syncable::ModelTypeSet preferred_types) { 173 syncable::ModelTypeSet preferred_types) {
187 DCHECK(non_thread_safe_.CalledOnValidThread()); 174 DCHECK(non_thread_safe_.CalledOnValidThread());
188 CHECK(pref_service_); 175 CHECK(pref_service_);
189 DCHECK(registered_types.HasAll(preferred_types)); 176 DCHECK(registered_types.HasAll(preferred_types));
190 syncable::ModelTypeSet preferred_types_with_dependents(preferred_types); 177 syncable::ModelTypeSet preferred_types_with_dependents(preferred_types);
191 // Set autofill_profile to the same enabled/disabled state as 178
192 // autofill (since only autofill is shown in the UI). 179 // Set the pref of any determined types to the pref of what they are
193 if (registered_types.Has(syncable::AUTOFILL) && 180 // determined by.
194 registered_types.Has(syncable::AUTOFILL_PROFILE)) { 181 for (TypesDeterminedByMap::const_iterator i = types_determined_by_.begin();
195 if (preferred_types_with_dependents.Has(syncable::AUTOFILL)) { 182 i != types_determined_by_.end(); ++i) {
akalin 2012/02/29 05:33:03 this is almost the same logic as in GetPreferredDa
196 preferred_types_with_dependents.Put(syncable::AUTOFILL_PROFILE); 183 if (registered_types.Has(i->first) &&
197 } else { 184 registered_types.Has(i->second)) {
198 preferred_types_with_dependents.Remove(syncable::AUTOFILL_PROFILE); 185 if (preferred_types.Has(i->second))
199 } 186 preferred_types_with_dependents.Put(i->first);
200 } 187 else
201 // Set app_notifications to the same enabled/disabled state as 188 preferred_types_with_dependents.Remove(i->first);
202 // apps (since only apps is shown in the UI).
203 if (registered_types.Has(syncable::APPS) &&
204 registered_types.Has(syncable::APP_NOTIFICATIONS)) {
205 if (preferred_types_with_dependents.Has(syncable::APPS)) {
206 preferred_types_with_dependents.Put(syncable::APP_NOTIFICATIONS);
207 } else {
208 preferred_types_with_dependents.Remove(syncable::APP_NOTIFICATIONS);
209 }
210 }
211 // Set search_engines to the same enabled/disabled state as
212 // preferences (since only preferences is shown in the UI).
213 if (registered_types.Has(syncable::PREFERENCES) &&
214 registered_types.Has(syncable::SEARCH_ENGINES)) {
215 if (preferred_types_with_dependents.Has(syncable::PREFERENCES)) {
216 preferred_types_with_dependents.Put(syncable::SEARCH_ENGINES);
217 } else {
218 preferred_types_with_dependents.Remove(syncable::SEARCH_ENGINES);
219 } 189 }
220 } 190 }
221 191
222 for (syncable::ModelTypeSet::Iterator it = registered_types.First(); 192 for (syncable::ModelTypeSet::Iterator it = registered_types.First();
223 it.Good(); it.Inc()) { 193 it.Good(); it.Inc()) {
224 SetDataTypePreferred( 194 SetDataTypePreferred(
225 it.Get(), preferred_types_with_dependents.Has(it.Get())); 195 it.Get(), preferred_types_with_dependents.Has(it.Get()));
226 } 196 }
227 } 197 }
228 198
(...skipping 169 matching lines...) Expand 10 before | Expand all | Expand 10 after
398 return prefs::kSyncAppNotifications; 368 return prefs::kSyncAppNotifications;
399 default: 369 default:
400 break; 370 break;
401 } 371 }
402 NOTREACHED(); 372 NOTREACHED();
403 return NULL; 373 return NULL;
404 } 374 }
405 375
406 } // namespace 376 } // namespace
407 377
378 void SyncPrefs::RegisterDeterminedTypes() {
379 types_determined_by_[syncable::APP_NOTIFICATIONS] = syncable::APPS;
380 types_determined_by_[syncable::APP_SETTINGS] = syncable::APPS;
381 types_determined_by_[syncable::AUTOFILL_PROFILE] = syncable::AUTOFILL;
382 types_determined_by_[syncable::EXTENSION_SETTINGS] = syncable::EXTENSIONS;
383 types_determined_by_[syncable::SEARCH_ENGINES] = syncable::PREFERENCES;
384 }
385
408 void SyncPrefs::RegisterPreferences() { 386 void SyncPrefs::RegisterPreferences() {
409 DCHECK(non_thread_safe_.CalledOnValidThread()); 387 DCHECK(non_thread_safe_.CalledOnValidThread());
410 CHECK(pref_service_); 388 CHECK(pref_service_);
411 if (pref_service_->FindPreference(prefs::kSyncLastSyncedTime)) { 389 if (pref_service_->FindPreference(prefs::kSyncLastSyncedTime)) {
412 return; 390 return;
413 } 391 }
414 392
415 pref_service_->RegisterBooleanPref(prefs::kSyncHasSetupCompleted, 393 pref_service_->RegisterBooleanPref(prefs::kSyncHasSetupCompleted,
416 false, 394 false,
417 PrefService::UNSYNCABLE_PREF); 395 PrefService::UNSYNCABLE_PREF);
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
452 false, 430 false,
453 PrefService::UNSYNCABLE_PREF); 431 PrefService::UNSYNCABLE_PREF);
454 pref_service_->RegisterStringPref(prefs::kSyncEncryptionBootstrapToken, 432 pref_service_->RegisterStringPref(prefs::kSyncEncryptionBootstrapToken,
455 "", 433 "",
456 PrefService::UNSYNCABLE_PREF); 434 PrefService::UNSYNCABLE_PREF);
457 435
458 // We will start prompting people about new data types after the launch of 436 // We will start prompting people about new data types after the launch of
459 // SESSIONS - all previously launched data types are treated as if they are 437 // SESSIONS - all previously launched data types are treated as if they are
460 // already acknowledged. 438 // already acknowledged.
461 syncable::ModelTypeSet model_set; 439 syncable::ModelTypeSet model_set;
440 model_set.Put(syncable::APPS);
441 model_set.Put(syncable::APP_SETTINGS);
akalin 2012/02/29 05:33:03 don't add new types -- see comment above definitio
not at google - send to devlin 2012/03/01 03:14:40 Oh, right. I was wondering what that comment meant
442 model_set.Put(syncable::AUTOFILL);
443 model_set.Put(syncable::AUTOFILL_PROFILE);
462 model_set.Put(syncable::BOOKMARKS); 444 model_set.Put(syncable::BOOKMARKS);
445 model_set.Put(syncable::EXTENSIONS);
446 model_set.Put(syncable::EXTENSION_SETTINGS);
447 model_set.Put(syncable::NIGORI);
448 model_set.Put(syncable::PASSWORDS);
463 model_set.Put(syncable::PREFERENCES); 449 model_set.Put(syncable::PREFERENCES);
464 model_set.Put(syncable::PASSWORDS); 450 model_set.Put(syncable::SEARCH_ENGINES);
465 model_set.Put(syncable::AUTOFILL_PROFILE); 451 model_set.Put(syncable::SESSIONS);
466 model_set.Put(syncable::AUTOFILL);
467 model_set.Put(syncable::THEMES); 452 model_set.Put(syncable::THEMES);
468 model_set.Put(syncable::EXTENSIONS);
469 model_set.Put(syncable::NIGORI);
470 model_set.Put(syncable::SEARCH_ENGINES);
471 model_set.Put(syncable::APPS);
472 model_set.Put(syncable::TYPED_URLS); 453 model_set.Put(syncable::TYPED_URLS);
473 model_set.Put(syncable::SESSIONS);
474 pref_service_->RegisterListPref(prefs::kSyncAcknowledgedSyncTypes, 454 pref_service_->RegisterListPref(prefs::kSyncAcknowledgedSyncTypes,
475 syncable::ModelTypeSetToValue(model_set), 455 syncable::ModelTypeSetToValue(model_set),
476 PrefService::UNSYNCABLE_PREF); 456 PrefService::UNSYNCABLE_PREF);
477 457
478 pref_service_->RegisterDictionaryPref(prefs::kSyncMaxInvalidationVersions, 458 pref_service_->RegisterDictionaryPref(prefs::kSyncMaxInvalidationVersions,
479 PrefService::UNSYNCABLE_PREF); 459 PrefService::UNSYNCABLE_PREF);
480 } 460 }
481 461
482 void SyncPrefs::RegisterDataTypePreferredPref(syncable::ModelType type, 462 void SyncPrefs::RegisterDataTypePreferredPref(syncable::ModelType type,
483 bool is_preferred) { 463 bool is_preferred) {
(...skipping 28 matching lines...) Expand all
512 CHECK(pref_service_); 492 CHECK(pref_service_);
513 const char* pref_name = GetPrefNameForDataType(type); 493 const char* pref_name = GetPrefNameForDataType(type);
514 if (!pref_name) { 494 if (!pref_name) {
515 NOTREACHED(); 495 NOTREACHED();
516 return; 496 return;
517 } 497 }
518 pref_service_->SetBoolean(pref_name, is_preferred); 498 pref_service_->SetBoolean(pref_name, is_preferred);
519 } 499 }
520 500
521 } // namespace browser_sync 501 } // namespace browser_sync
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698