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 |