| Index: chrome/browser/prefs/chrome_pref_service_factory.cc
|
| diff --git a/chrome/browser/prefs/chrome_pref_service_factory.cc b/chrome/browser/prefs/chrome_pref_service_factory.cc
|
| index 1e9b90229df9be9a8344347c2ff891c09d1c037e..b0ae23899ae9a26f4efd2f8467445180fd9f57f6 100644
|
| --- a/chrome/browser/prefs/chrome_pref_service_factory.cc
|
| +++ b/chrome/browser/prefs/chrome_pref_service_factory.cc
|
| @@ -58,6 +58,7 @@
|
| #include "content/public/browser/browser_context.h"
|
| #include "content/public/browser/browser_thread.h"
|
| #include "extensions/features/features.h"
|
| +#include "mojo/public/cpp/bindings/strong_binding.h"
|
| #include "rlz/features/features.h"
|
| #include "services/preferences/public/cpp/tracked/configuration.h"
|
| #include "services/preferences/public/cpp/tracked/pref_names.h"
|
| @@ -356,9 +357,8 @@ std::unique_ptr<ProfilePrefStoreManager> CreateProfilePrefStoreManager(
|
| seed = ResourceBundle::GetSharedInstance().GetRawDataResource(
|
| IDR_PREF_HASH_SEED_BIN).as_string();
|
| #endif
|
| - return base::MakeUnique<ProfilePrefStoreManager>(
|
| - profile_path, GetTrackingConfiguration(), kTrackedPrefsReportingIDsCount,
|
| - seed, legacy_device_id, g_browser_process->local_state());
|
| + return base::MakeUnique<ProfilePrefStoreManager>(profile_path, seed,
|
| + legacy_device_id);
|
| }
|
|
|
| void PrepareFactory(sync_preferences::PrefServiceSyncableFactory* factory,
|
| @@ -392,6 +392,28 @@ void PrepareFactory(sync_preferences::PrefServiceSyncableFactory* factory,
|
| ChromePrefModelAssociatorClient::GetInstance());
|
| }
|
|
|
| +class ResetOnLoadObserverImpl : public prefs::mojom::ResetOnLoadObserver {
|
| + public:
|
| + explicit ResetOnLoadObserverImpl(const base::FilePath& profile_path)
|
| + : profile_path_(profile_path) {}
|
| +
|
| + void OnResetOnLoad() override {
|
| + // A StartSyncFlare used to kick sync early in case of a reset event. This
|
| + // is done since sync may bring back the user's server value post-reset
|
| + // which could potentially cause a "settings flash" between the factory
|
| + // default and the re-instantiated server value. Starting sync ASAP
|
| + // minimizes the window before the server value is re-instantiated (this
|
| + // window can otherwise be as long as 10 seconds by default).
|
| + sync_start_util::GetFlareForSyncableService(profile_path_)
|
| + .Run(syncer::PREFERENCES);
|
| + }
|
| +
|
| + private:
|
| + const base::FilePath profile_path_;
|
| +
|
| + DISALLOW_COPY_AND_ASSIGN(ResetOnLoadObserverImpl);
|
| +};
|
| +
|
| } // namespace
|
|
|
| namespace chrome_prefs {
|
| @@ -428,8 +450,7 @@ std::unique_ptr<PrefService> CreateLocalState(
|
|
|
| std::unique_ptr<sync_preferences::PrefServiceSyncable> CreateProfilePrefs(
|
| const base::FilePath& profile_path,
|
| - base::SequencedTaskRunner* pref_io_task_runner,
|
| - prefs::mojom::TrackedPreferenceValidationDelegate* validation_delegate,
|
| + prefs::mojom::TrackedPreferenceValidationDelegatePtr validation_delegate,
|
| policy::PolicyService* policy_service,
|
| SupervisedUserSettingsService* supervised_user_settings,
|
| const scoped_refptr<PrefStore>& extension_prefs,
|
| @@ -439,22 +460,18 @@ std::unique_ptr<sync_preferences::PrefServiceSyncable> CreateProfilePrefs(
|
| TRACE_EVENT0("browser", "chrome_prefs::CreateProfilePrefs");
|
| SCOPED_UMA_HISTOGRAM_TIMER("PrefService.CreateProfilePrefsTime");
|
|
|
| - // A StartSyncFlare used to kick sync early in case of a reset event. This is
|
| - // done since sync may bring back the user's server value post-reset which
|
| - // could potentially cause a "settings flash" between the factory default and
|
| - // the re-instantiated server value. Starting sync ASAP minimizes the window
|
| - // before the server value is re-instantiated (this window can otherwise be
|
| - // as long as 10 seconds by default).
|
| - const base::Closure start_sync_flare_for_prefs =
|
| - base::Bind(sync_start_util::GetFlareForSyncableService(profile_path),
|
| - syncer::PREFERENCES);
|
| -
|
| + prefs::mojom::ResetOnLoadObserverPtr reset_on_load_observer;
|
| + mojo::MakeStrongBinding(
|
| + base::MakeUnique<ResetOnLoadObserverImpl>(profile_path),
|
| + mojo::MakeRequest(&reset_on_load_observer));
|
| sync_preferences::PrefServiceSyncableFactory factory;
|
| scoped_refptr<PersistentPrefStore> user_pref_store(
|
| CreateProfilePrefStoreManager(profile_path)
|
| ->CreateProfilePrefStore(
|
| - pref_io_task_runner, start_sync_flare_for_prefs,
|
| - validation_delegate, connector, pref_registry));
|
| + GetTrackingConfiguration(), kTrackedPrefsReportingIDsCount,
|
| + content::BrowserThread::GetBlockingPool(),
|
| + std::move(reset_on_load_observer), std::move(validation_delegate),
|
| + connector, pref_registry));
|
| PrepareFactory(&factory, profile_path, policy_service,
|
| supervised_user_settings, user_pref_store, extension_prefs,
|
| async);
|
| @@ -474,7 +491,9 @@ bool InitializePrefsFromMasterPrefs(
|
| const base::FilePath& profile_path,
|
| std::unique_ptr<base::DictionaryValue> master_prefs) {
|
| return CreateProfilePrefStoreManager(profile_path)
|
| - ->InitializePrefsFromMasterPrefs(std::move(master_prefs));
|
| + ->InitializePrefsFromMasterPrefs(GetTrackingConfiguration(),
|
| + kTrackedPrefsReportingIDsCount,
|
| + std::move(master_prefs));
|
| }
|
|
|
| base::Time GetResetTime(Profile* profile) {
|
|
|