Chromium Code Reviews| OLD | NEW |
|---|---|
| 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/prefs/chrome_pref_service_factory.h" | 5 #include "chrome/browser/prefs/chrome_pref_service_factory.h" |
| 6 | 6 |
| 7 #include "base/bind.h" | 7 #include "base/bind.h" |
| 8 #include "base/compiler_specific.h" | 8 #include "base/compiler_specific.h" |
| 9 #include "base/debug/trace_event.h" | 9 #include "base/debug/trace_event.h" |
| 10 #include "base/file_util.h" | 10 #include "base/file_util.h" |
| (...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 62 | 62 |
| 63 namespace { | 63 namespace { |
| 64 | 64 |
| 65 // These preferences must be kept in sync with the TrackedPreference enum in | 65 // These preferences must be kept in sync with the TrackedPreference enum in |
| 66 // tools/metrics/histograms/histograms.xml. To add a new preference, append it | 66 // tools/metrics/histograms/histograms.xml. To add a new preference, append it |
| 67 // to the array and add a corresponding value to the histogram enum. Each | 67 // to the array and add a corresponding value to the histogram enum. Each |
| 68 // tracked preference must be given a unique reporting ID. | 68 // tracked preference must be given a unique reporting ID. |
| 69 const PrefHashFilter::TrackedPreferenceMetadata kTrackedPrefs[] = { | 69 const PrefHashFilter::TrackedPreferenceMetadata kTrackedPrefs[] = { |
| 70 { | 70 { |
| 71 0, prefs::kShowHomeButton, | 71 0, prefs::kShowHomeButton, |
| 72 PrefHashFilter::ENFORCE_ALL, | 72 PrefHashFilter::ENFORCE_ON_LOAD, |
| 73 PrefHashFilter::TRACKING_STRATEGY_ATOMIC | 73 PrefHashFilter::TRACKING_STRATEGY_ATOMIC |
| 74 }, | 74 }, |
| 75 { | 75 { |
| 76 1, prefs::kHomePageIsNewTabPage, | 76 1, prefs::kHomePageIsNewTabPage, |
| 77 PrefHashFilter::ENFORCE_ALL, | 77 PrefHashFilter::ENFORCE_ON_LOAD, |
| 78 PrefHashFilter::TRACKING_STRATEGY_ATOMIC | 78 PrefHashFilter::TRACKING_STRATEGY_ATOMIC |
| 79 }, | 79 }, |
| 80 { | 80 { |
| 81 2, prefs::kHomePage, | 81 2, prefs::kHomePage, |
| 82 PrefHashFilter::ENFORCE_ALL, | 82 PrefHashFilter::ENFORCE_ON_LOAD, |
| 83 PrefHashFilter::TRACKING_STRATEGY_ATOMIC | 83 PrefHashFilter::TRACKING_STRATEGY_ATOMIC |
| 84 }, | 84 }, |
| 85 { | 85 { |
| 86 3, prefs::kRestoreOnStartup, | 86 3, prefs::kRestoreOnStartup, |
| 87 PrefHashFilter::ENFORCE_ALL, | 87 PrefHashFilter::ENFORCE_ON_LOAD, |
| 88 PrefHashFilter::TRACKING_STRATEGY_ATOMIC | 88 PrefHashFilter::TRACKING_STRATEGY_ATOMIC |
| 89 }, | 89 }, |
| 90 { | 90 { |
| 91 4, prefs::kURLsToRestoreOnStartup, | 91 4, prefs::kURLsToRestoreOnStartup, |
| 92 PrefHashFilter::ENFORCE_ALL, | 92 PrefHashFilter::ENFORCE_ON_LOAD, |
| 93 PrefHashFilter::TRACKING_STRATEGY_ATOMIC | 93 PrefHashFilter::TRACKING_STRATEGY_ATOMIC |
| 94 }, | 94 }, |
| 95 { | 95 { |
| 96 5, extensions::pref_names::kExtensions, | 96 5, extensions::pref_names::kExtensions, |
| 97 PrefHashFilter::NO_ENFORCEMENT, | 97 PrefHashFilter::NO_ENFORCEMENT, |
| 98 PrefHashFilter::TRACKING_STRATEGY_SPLIT | 98 PrefHashFilter::TRACKING_STRATEGY_SPLIT |
| 99 }, | 99 }, |
| 100 { | 100 { |
| 101 6, prefs::kGoogleServicesLastUsername, | 101 6, prefs::kGoogleServicesLastUsername, |
| 102 PrefHashFilter::ENFORCE_ALL, | 102 PrefHashFilter::ENFORCE_ON_LOAD, |
| 103 PrefHashFilter::TRACKING_STRATEGY_ATOMIC | 103 PrefHashFilter::TRACKING_STRATEGY_ATOMIC |
| 104 }, | 104 }, |
| 105 { | 105 { |
| 106 7, prefs::kSearchProviderOverrides, | 106 7, prefs::kSearchProviderOverrides, |
| 107 PrefHashFilter::ENFORCE_ALL, | 107 PrefHashFilter::ENFORCE_ON_LOAD, |
| 108 PrefHashFilter::TRACKING_STRATEGY_ATOMIC | 108 PrefHashFilter::TRACKING_STRATEGY_ATOMIC |
| 109 }, | 109 }, |
| 110 { | 110 { |
| 111 8, prefs::kDefaultSearchProviderSearchURL, | 111 8, prefs::kDefaultSearchProviderSearchURL, |
| 112 PrefHashFilter::ENFORCE_ALL, | 112 PrefHashFilter::ENFORCE_ON_LOAD, |
| 113 PrefHashFilter::TRACKING_STRATEGY_ATOMIC | 113 PrefHashFilter::TRACKING_STRATEGY_ATOMIC |
| 114 }, | 114 }, |
| 115 { | 115 { |
| 116 9, prefs::kDefaultSearchProviderKeyword, | 116 9, prefs::kDefaultSearchProviderKeyword, |
| 117 PrefHashFilter::ENFORCE_ALL, | 117 PrefHashFilter::ENFORCE_ON_LOAD, |
| 118 PrefHashFilter::TRACKING_STRATEGY_ATOMIC | 118 PrefHashFilter::TRACKING_STRATEGY_ATOMIC |
| 119 }, | 119 }, |
| 120 { | 120 { |
| 121 10, prefs::kDefaultSearchProviderName, | 121 10, prefs::kDefaultSearchProviderName, |
| 122 PrefHashFilter::ENFORCE_ALL, | 122 PrefHashFilter::ENFORCE_ON_LOAD, |
| 123 PrefHashFilter::TRACKING_STRATEGY_ATOMIC | 123 PrefHashFilter::TRACKING_STRATEGY_ATOMIC |
| 124 }, | 124 }, |
| 125 #if !defined(OS_ANDROID) | 125 #if !defined(OS_ANDROID) |
| 126 { | 126 { |
| 127 11, prefs::kPinnedTabs, | 127 11, prefs::kPinnedTabs, |
| 128 PrefHashFilter::ENFORCE_ALL, | 128 PrefHashFilter::ENFORCE_ON_LOAD, |
| 129 PrefHashFilter::TRACKING_STRATEGY_ATOMIC | 129 PrefHashFilter::TRACKING_STRATEGY_ATOMIC |
| 130 }, | 130 }, |
| 131 #endif | 131 #endif |
| 132 { | 132 { |
| 133 12, extensions::pref_names::kKnownDisabled, | 133 12, extensions::pref_names::kKnownDisabled, |
| 134 PrefHashFilter::NO_ENFORCEMENT, | 134 PrefHashFilter::NO_ENFORCEMENT, |
| 135 PrefHashFilter::TRACKING_STRATEGY_ATOMIC | 135 PrefHashFilter::TRACKING_STRATEGY_ATOMIC |
| 136 }, | 136 }, |
| 137 { | 137 { |
| 138 13, prefs::kProfileResetPromptMemento, | 138 13, prefs::kProfileResetPromptMemento, |
| 139 PrefHashFilter::ENFORCE_ALL, | 139 PrefHashFilter::ENFORCE_ON_LOAD, |
| 140 PrefHashFilter::TRACKING_STRATEGY_ATOMIC | 140 PrefHashFilter::TRACKING_STRATEGY_ATOMIC |
| 141 }, | 141 }, |
| 142 }; | 142 }; |
| 143 | 143 |
| 144 // The count of tracked preferences IDs across all platforms. | 144 // The count of tracked preferences IDs across all platforms. |
| 145 const size_t kTrackedPrefsReportingIDsCount = 14; | 145 const size_t kTrackedPrefsReportingIDsCount = 14; |
| 146 COMPILE_ASSERT(kTrackedPrefsReportingIDsCount >= arraysize(kTrackedPrefs), | 146 COMPILE_ASSERT(kTrackedPrefsReportingIDsCount >= arraysize(kTrackedPrefs), |
| 147 need_to_increment_ids_count); | 147 need_to_increment_ids_count); |
| 148 | 148 |
| 149 PrefHashFilter::EnforcementLevel GetSettingsEnforcementLevel() { | 149 enum SettingsEnforcementGroup { |
| 150 GROUP_NO_ENFORCEMENT, | |
| 151 GROUP_ENFORCE_ON_LOAD, | |
| 152 GROUP_ENFORCE_ALWAYS | |
|
robertshield
2014/02/11 21:16:40
Comments re. what these mean plz.
gab
2014/02/11 21:25:58
Done.
| |
| 153 }; | |
| 154 | |
| 155 SettingsEnforcementGroup GetSettingsEnforcementGroup() { | |
| 150 static const char kSettingsEnforcementExperiment[] = "SettingsEnforcement"; | 156 static const char kSettingsEnforcementExperiment[] = "SettingsEnforcement"; |
| 151 struct { | 157 struct { |
| 152 const char* level_name; | 158 const char* group_name; |
| 153 PrefHashFilter::EnforcementLevel level; | 159 SettingsEnforcementGroup group; |
| 154 } static const kEnforcementLevelMap[] = { | 160 } static const kEnforcementLevelMap[] = { |
| 155 { | 161 { "no_enforcement", GROUP_NO_ENFORCEMENT }, |
| 156 "no_enforcement", | 162 { "enforce_on_load", GROUP_ENFORCE_ON_LOAD }, |
| 157 PrefHashFilter::NO_ENFORCEMENT | 163 { "enforce_always", GROUP_ENFORCE_ALWAYS }, |
|
robertshield
2014/02/11 21:16:40
GROUP_ENFORCE_ALWAYS isn't currently used, tell me
gab
2014/02/11 21:25:58
Added TODO above.
| |
| 158 }, | |
| 159 { | |
| 160 "enforce", | |
| 161 PrefHashFilter::ENFORCE | |
| 162 }, | |
| 163 { | |
| 164 "enforce_no_seeding", | |
| 165 PrefHashFilter::ENFORCE_NO_SEEDING | |
| 166 }, | |
| 167 { | |
| 168 "enforce_no_seeding_no_migration", | |
| 169 PrefHashFilter::ENFORCE_NO_SEEDING_NO_MIGRATION | |
| 170 }, | |
| 171 }; | 164 }; |
| 172 COMPILE_ASSERT(ARRAYSIZE_UNSAFE(kEnforcementLevelMap) == | |
| 173 (PrefHashFilter::ENFORCE_ALL - | |
| 174 PrefHashFilter::NO_ENFORCEMENT), | |
| 175 missing_enforcement_level); | |
| 176 | 165 |
| 177 base::FieldTrial* trial = | 166 base::FieldTrial* trial = |
| 178 base::FieldTrialList::Find(kSettingsEnforcementExperiment); | 167 base::FieldTrialList::Find(kSettingsEnforcementExperiment); |
| 179 if (trial) { | 168 if (trial) { |
| 180 const std::string& group_name = trial->group_name(); | 169 const std::string& group_name = trial->group_name(); |
| 181 // ARRAYSIZE_UNSAFE must be used since the array is declared locally; it is | 170 // ARRAYSIZE_UNSAFE must be used since the array is declared locally; it is |
| 182 // only unsafe because it could not trigger a compile error on some | 171 // only unsafe because it could not trigger a compile error on some |
| 183 // non-array pointer types; this is fine since kEnforcementLevelMap is | 172 // non-array pointer types; this is fine since kEnforcementLevelMap is |
| 184 // clearly an array. | 173 // clearly an array. |
| 185 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(kEnforcementLevelMap); ++i) { | 174 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(kEnforcementLevelMap); ++i) { |
| 186 if (kEnforcementLevelMap[i].level_name == group_name) | 175 if (kEnforcementLevelMap[i].group_name == group_name) |
| 187 return kEnforcementLevelMap[i].level; | 176 return kEnforcementLevelMap[i].group; |
| 188 } | 177 } |
| 189 } | 178 } |
| 190 #if defined(OS_WIN) | 179 #if defined(OS_WIN) |
| 191 // Default to ENFORCE_ALL in the absence of a valid value for the | 180 // Default to GROUP_ENFORCE_ALWAYS in the absence of a valid value for the |
| 192 // SettingsEnforcement field trial. | 181 // SettingsEnforcement field trial. |
| 193 // TODO(gab): Switch other platforms over to this mode. | 182 // TODO(gab): Switch other platforms over to this mode. |
| 194 return PrefHashFilter::ENFORCE_ALL; | 183 return GROUP_ENFORCE_ALWAYS; |
| 195 #else | 184 #else |
| 196 return PrefHashFilter::NO_ENFORCEMENT; | 185 return GROUP_NO_ENFORCEMENT; |
| 197 #endif | 186 #endif |
| 198 } | 187 } |
| 199 | 188 |
| 200 // Shows notifications which correspond to PersistentPrefStore's reading errors. | 189 // Shows notifications which correspond to PersistentPrefStore's reading errors. |
| 201 void HandleReadError(PersistentPrefStore::PrefReadError error) { | 190 void HandleReadError(PersistentPrefStore::PrefReadError error) { |
| 202 // Sample the histogram also for the successful case in order to get a | 191 // Sample the histogram also for the successful case in order to get a |
| 203 // baseline on the success rate in addition to the error distribution. | 192 // baseline on the success rate in addition to the error distribution. |
| 204 UMA_HISTOGRAM_ENUMERATION("PrefService.ReadError", error, | 193 UMA_HISTOGRAM_ENUMERATION("PrefService.ReadError", error, |
| 205 PersistentPrefStore::PREF_READ_ERROR_MAX_ENUM); | 194 PersistentPrefStore::PREF_READ_ERROR_MAX_ENUM); |
| 206 | 195 |
| (...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 259 return make_scoped_ptr(new PrefHashStoreImpl( | 248 return make_scoped_ptr(new PrefHashStoreImpl( |
| 260 profile_path.AsUTF8Unsafe(), | 249 profile_path.AsUTF8Unsafe(), |
| 261 seed, | 250 seed, |
| 262 device_id, | 251 device_id, |
| 263 g_browser_process->local_state())); | 252 g_browser_process->local_state())); |
| 264 #endif | 253 #endif |
| 265 } | 254 } |
| 266 | 255 |
| 267 scoped_ptr<PrefHashFilter> CreatePrefHashFilter( | 256 scoped_ptr<PrefHashFilter> CreatePrefHashFilter( |
| 268 scoped_ptr<PrefHashStore> pref_hash_store) { | 257 scoped_ptr<PrefHashStore> pref_hash_store) { |
| 258 const PrefHashFilter::EnforcementLevel enforcement_level = | |
| 259 GetSettingsEnforcementGroup() == GROUP_NO_ENFORCEMENT ? | |
| 260 PrefHashFilter::NO_ENFORCEMENT : PrefHashFilter::ENFORCE_ON_LOAD; | |
|
robertshield
2014/02/11 21:16:40
Can this still live in a GetSettingsEnforcementLev
gab
2014/02/11 21:25:58
No; GROUP_ENFORCE_ALWAYS means to not do unloaded
| |
| 269 return make_scoped_ptr(new PrefHashFilter(pref_hash_store.Pass(), | 261 return make_scoped_ptr(new PrefHashFilter(pref_hash_store.Pass(), |
| 270 kTrackedPrefs, | 262 kTrackedPrefs, |
| 271 arraysize(kTrackedPrefs), | 263 arraysize(kTrackedPrefs), |
| 272 kTrackedPrefsReportingIDsCount, | 264 kTrackedPrefsReportingIDsCount, |
| 273 GetSettingsEnforcementLevel())); | 265 enforcement_level)); |
| 274 } | 266 } |
| 275 | 267 |
| 276 void PrepareBuilder( | 268 void PrepareBuilder( |
| 277 PrefServiceSyncableFactory* factory, | 269 PrefServiceSyncableFactory* factory, |
| 278 const base::FilePath& pref_filename, | 270 const base::FilePath& pref_filename, |
| 279 base::SequencedTaskRunner* pref_io_task_runner, | 271 base::SequencedTaskRunner* pref_io_task_runner, |
| 280 policy::PolicyService* policy_service, | 272 policy::PolicyService* policy_service, |
| 281 ManagedUserSettingsService* managed_user_settings, | 273 ManagedUserSettingsService* managed_user_settings, |
| 282 scoped_ptr<PrefHashStore> pref_hash_store, | 274 scoped_ptr<PrefHashStore> pref_hash_store, |
| 283 const scoped_refptr<PrefStore>& extension_prefs, | 275 const scoped_refptr<PrefStore>& extension_prefs, |
| (...skipping 203 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 487 CreatePrefHashFilter( | 479 CreatePrefHashFilter( |
| 488 GetPrefHashStoreImpl(profile_path).PassAs<PrefHashStore>())-> | 480 GetPrefHashStoreImpl(profile_path).PassAs<PrefHashStore>())-> |
| 489 Initialize(*pref_store); | 481 Initialize(*pref_store); |
| 490 } | 482 } |
| 491 | 483 |
| 492 UMA_HISTOGRAM_BOOLEAN("Settings.InitializedFromMasterPrefs", success); | 484 UMA_HISTOGRAM_BOOLEAN("Settings.InitializedFromMasterPrefs", success); |
| 493 return success; | 485 return success; |
| 494 } | 486 } |
| 495 | 487 |
| 496 } // namespace chrome_prefs | 488 } // namespace chrome_prefs |
| OLD | NEW |