Preferences are a generic system for storing configuration parameters in Chrome, see Preferences and chrome/browser/prefs/README.md.
Individual preferences may be declared as syncable, meaning they will be uploaded to the user's Google Account and propagate across signed-in/syncing devices from the same user.
This folder contains the code for synchronizing preferences. See components/sync/README.md for background about Sync itself.
Making a pref syncable requires a few things:
Register*Pref call.ChromeSyncablePrefsDatabase if the pref is in chrome/, IOSChromeSyncablePrefsDatabase if it‘s in ios/chrome/, or CommonSyncablePrefsDatabase if it’s cross-platform.PrefSensitivity::kSensitiveRequiresHistory.PrefSensitivity::kExemptFromUserControlWhileSignedIn. This should be extremely rare, reach out to chrome-sync-dev@google.com if you really think the pref needs this exemption.SyncablePref enum in tools/metrics/histograms/metadata/sync/enums.xml.Important: Adding syncable prefs may have privacy impact. It‘s the responsibility of the code reviewer to ensure that new syncable prefs don’t have undue privacy impact. In particular:
PrefSensitivity::kSensitiveRequiresHistory, and it will only be synced if the user has opted in to history sync (in addition to preferences sync).syncer::PRIORITY_PREFERENCES or syncer::OS_PRIORITY_PREFERENCES), then it will not be encrypted. Carefully consider if it actually needs to be “priority”. (The most common reason for this is when the pref needs to be consumed on the server side.)PrefSensitivity::kExemptFromUserControlWhileSignedIn decouples the pref from sync user toggles. Carefully consider/discuss if this is desired. Note that this is only available for priority prefs.When deprecating or deleting a syncable preference:
SYNCABLE_PREF flag from the temporary migration registration so ClearPref() does not sync deletions to older clients).kChromeSyncablePrefsAllowlist, kIOSChromeSyncablePrefsAllowlist, or kCommonSyncablePrefsAllowlist in the corresponding SyncablePrefsDatabase implementation.syncable_prefs_ids enum (for example, // kMyDeprecatedPref = 100001, (deprecated)) so the numeric value is never reused.(obsolete) to the corresponding entry's label in the SyncablePref enum in tools/metrics/histograms/metadata/sync/enums.xml.