Commit fbd7cd51 authored by Mike Wasserman's avatar Mike Wasserman Committed by Commit Bot

cros: Whitelist delayed registration of Ash's foreign syncable prefs

Use PrefRegistrySyncable's new whitelist for delayed pref registration.
(there's a race between ash prefs connecting to chrome and sync init)
Avoids PrefServiceSyncable::AddRegisteredSyncablePreference DCHECKs.

See the bug and earlier patch sets for debug code to trigger the race:
1) Build chromeos=1 on linux desktop with this patch applied
2) Run chrome --user-data-dir=/tmp/foo --login-manager
3) Go through setup, sign in to an existing account
4) Launch chrome again, sign in quickly, wait ~10s for a DCHECK

Bug: 788918
Change-Id: Ib505194900b34154b3896373b93c951a6eeb8715
Reviewed-on: https://chromium-review.googlesource.com/1012788Reviewed-by: default avatarJames Cook <jamescook@chromium.org>
Commit-Queue: Michael Wasserman <msw@chromium.org>
Cr-Commit-Position: refs/heads/master@{#563037}
parent a9d0c189
......@@ -109,6 +109,21 @@ void TryMigrateToResolveTimezoneByGeolocationMethod(PrefService* prefs) {
static_cast<int>(method));
}
// Whitelist synable preferences that may be registered after sync system init.
void WhitelistLateRegistrationPrefsForSync(
user_prefs::PrefRegistrySyncable* registry) {
// These foreign syncable preferences are registered asynchronously by Ash,
// perhaps after sync system initialization. Whitelist these prefs so that any
// values obtained via sync before the prefs are registered will be stored.
const char* const kAshForeignSyncablePrefs[] = {
ash::prefs::kEnableAutoScreenLock, ash::prefs::kEnableStylusTools,
ash::prefs::kLaunchPaletteOnEjectEvent, ash::prefs::kShelfAlignment,
ash::prefs::kShelfAutoHideBehavior, ash::prefs::kTapDraggingEnabled,
};
for (const auto* pref : kAshForeignSyncablePrefs)
registry->WhitelistLateRegistrationPrefForSync(pref);
}
} // namespace
Preferences::Preferences()
......@@ -159,6 +174,8 @@ void Preferences::RegisterPrefs(PrefRegistrySimple* registry) {
// static
void Preferences::RegisterProfilePrefs(
user_prefs::PrefRegistrySyncable* registry) {
WhitelistLateRegistrationPrefsForSync(registry);
std::string hardware_keyboard_id;
// TODO(yusukes): Remove the runtime hack.
if (IsRunningAsSystemCompositor()) {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment