| Index: chrome/browser/prefs/pref_metrics_service.cc
|
| diff --git a/chrome/browser/prefs/pref_metrics_service.cc b/chrome/browser/prefs/pref_metrics_service.cc
|
| index a4a4f33294c741b278a76ac116e2e02da40d3f0f..6d2476292a9c0bf037be468e18100b81e3f0c686 100644
|
| --- a/chrome/browser/prefs/pref_metrics_service.cc
|
| +++ b/chrome/browser/prefs/pref_metrics_service.cc
|
| @@ -92,6 +92,8 @@ PrefMetricsService::PrefMetricsService(Profile* profile)
|
|
|
| RegisterSyncedPrefObservers();
|
|
|
| + MarkNeedsEmptyValueForTrackedPreferences();
|
| +
|
| // The following code might cause callbacks into this instance before we exit
|
| // the constructor. This instance should be initialized at this point.
|
| #if defined(OS_WIN) || defined(OS_MACOSX)
|
| @@ -120,6 +122,7 @@ PrefMetricsService::PrefMetricsService(Profile* profile,
|
| tracked_pref_path_count_(tracked_pref_path_count),
|
| checked_tracked_prefs_(false),
|
| weak_factory_(this) {
|
| + MarkNeedsEmptyValueForTrackedPreferences();
|
| CheckTrackedPreferences();
|
| }
|
|
|
| @@ -266,6 +269,19 @@ void PrefMetricsService::GetDeviceIdCallback(const std::string& device_id) {
|
| CheckTrackedPreferences();
|
| }
|
|
|
| +void PrefMetricsService::MarkNeedsEmptyValueForTrackedPreferences() {
|
| + for (int i = 0; i < tracked_pref_path_count_; ++i) {
|
| + // Skip prefs that haven't been registered.
|
| + if (!prefs_->FindPreference(tracked_pref_paths_[i]))
|
| + continue;
|
| +
|
| + // Make sure tracked prefs are saved to disk even if empty.
|
| + // TODO(gab): Guarantee this for all prefs at a lower level and remove this
|
| + // hack.
|
| + prefs_->MarkUserStoreNeedsEmptyValue(tracked_pref_paths_[i]);
|
| + }
|
| +}
|
| +
|
| // To detect changes to Preferences that happen outside of Chrome, we hash
|
| // selected pref values and save them in local state. CheckTrackedPreferences
|
| // compares the saved values to the values observed in the profile's prefs. A
|
|
|