Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(230)

Side by Side Diff: chrome/browser/prefs/chrome_pref_service_factory.cc

Issue 147053005: Coarser levels for the SettingsEnforcement field trial. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « no previous file | chrome/browser/prefs/pref_hash_filter.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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
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
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
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
OLDNEW
« no previous file with comments | « no previous file | chrome/browser/prefs/pref_hash_filter.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698