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

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: constantify trial/group names 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
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 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
64 64
65 namespace { 65 namespace {
66 66
67 // These preferences must be kept in sync with the TrackedPreference enum in 67 // These preferences must be kept in sync with the TrackedPreference enum in
68 // tools/metrics/histograms/histograms.xml. To add a new preference, append it 68 // tools/metrics/histograms/histograms.xml. To add a new preference, append it
69 // to the array and add a corresponding value to the histogram enum. Each 69 // to the array and add a corresponding value to the histogram enum. Each
70 // tracked preference must be given a unique reporting ID. 70 // tracked preference must be given a unique reporting ID.
71 const PrefHashFilter::TrackedPreferenceMetadata kTrackedPrefs[] = { 71 const PrefHashFilter::TrackedPreferenceMetadata kTrackedPrefs[] = {
72 { 72 {
73 0, prefs::kShowHomeButton, 73 0, prefs::kShowHomeButton,
74 PrefHashFilter::ENFORCE_ALL, 74 PrefHashFilter::ENFORCE_ON_LOAD,
75 PrefHashFilter::TRACKING_STRATEGY_ATOMIC 75 PrefHashFilter::TRACKING_STRATEGY_ATOMIC
76 }, 76 },
77 { 77 {
78 1, prefs::kHomePageIsNewTabPage, 78 1, prefs::kHomePageIsNewTabPage,
79 PrefHashFilter::ENFORCE_ALL, 79 PrefHashFilter::ENFORCE_ON_LOAD,
80 PrefHashFilter::TRACKING_STRATEGY_ATOMIC 80 PrefHashFilter::TRACKING_STRATEGY_ATOMIC
81 }, 81 },
82 { 82 {
83 2, prefs::kHomePage, 83 2, prefs::kHomePage,
84 PrefHashFilter::ENFORCE_ALL, 84 PrefHashFilter::ENFORCE_ON_LOAD,
85 PrefHashFilter::TRACKING_STRATEGY_ATOMIC 85 PrefHashFilter::TRACKING_STRATEGY_ATOMIC
86 }, 86 },
87 { 87 {
88 3, prefs::kRestoreOnStartup, 88 3, prefs::kRestoreOnStartup,
89 PrefHashFilter::ENFORCE_ALL, 89 PrefHashFilter::ENFORCE_ON_LOAD,
90 PrefHashFilter::TRACKING_STRATEGY_ATOMIC 90 PrefHashFilter::TRACKING_STRATEGY_ATOMIC
91 }, 91 },
92 { 92 {
93 4, prefs::kURLsToRestoreOnStartup, 93 4, prefs::kURLsToRestoreOnStartup,
94 PrefHashFilter::ENFORCE_ALL, 94 PrefHashFilter::ENFORCE_ON_LOAD,
95 PrefHashFilter::TRACKING_STRATEGY_ATOMIC 95 PrefHashFilter::TRACKING_STRATEGY_ATOMIC
96 }, 96 },
97 { 97 {
98 5, extensions::pref_names::kExtensions, 98 5, extensions::pref_names::kExtensions,
99 PrefHashFilter::NO_ENFORCEMENT, 99 PrefHashFilter::NO_ENFORCEMENT,
100 PrefHashFilter::TRACKING_STRATEGY_SPLIT 100 PrefHashFilter::TRACKING_STRATEGY_SPLIT
101 }, 101 },
102 { 102 {
103 6, prefs::kGoogleServicesLastUsername, 103 6, prefs::kGoogleServicesLastUsername,
104 PrefHashFilter::ENFORCE_ALL, 104 PrefHashFilter::ENFORCE_ON_LOAD,
105 PrefHashFilter::TRACKING_STRATEGY_ATOMIC 105 PrefHashFilter::TRACKING_STRATEGY_ATOMIC
106 }, 106 },
107 { 107 {
108 7, prefs::kSearchProviderOverrides, 108 7, prefs::kSearchProviderOverrides,
109 PrefHashFilter::ENFORCE_ALL, 109 PrefHashFilter::ENFORCE_ON_LOAD,
110 PrefHashFilter::TRACKING_STRATEGY_ATOMIC 110 PrefHashFilter::TRACKING_STRATEGY_ATOMIC
111 }, 111 },
112 { 112 {
113 8, prefs::kDefaultSearchProviderSearchURL, 113 8, prefs::kDefaultSearchProviderSearchURL,
114 PrefHashFilter::ENFORCE_ALL, 114 PrefHashFilter::ENFORCE_ON_LOAD,
115 PrefHashFilter::TRACKING_STRATEGY_ATOMIC 115 PrefHashFilter::TRACKING_STRATEGY_ATOMIC
116 }, 116 },
117 { 117 {
118 9, prefs::kDefaultSearchProviderKeyword, 118 9, prefs::kDefaultSearchProviderKeyword,
119 PrefHashFilter::ENFORCE_ALL, 119 PrefHashFilter::ENFORCE_ON_LOAD,
120 PrefHashFilter::TRACKING_STRATEGY_ATOMIC 120 PrefHashFilter::TRACKING_STRATEGY_ATOMIC
121 }, 121 },
122 { 122 {
123 10, prefs::kDefaultSearchProviderName, 123 10, prefs::kDefaultSearchProviderName,
124 PrefHashFilter::ENFORCE_ALL, 124 PrefHashFilter::ENFORCE_ON_LOAD,
125 PrefHashFilter::TRACKING_STRATEGY_ATOMIC 125 PrefHashFilter::TRACKING_STRATEGY_ATOMIC
126 }, 126 },
127 #if !defined(OS_ANDROID) 127 #if !defined(OS_ANDROID)
128 { 128 {
129 11, prefs::kPinnedTabs, 129 11, prefs::kPinnedTabs,
130 PrefHashFilter::ENFORCE_ALL, 130 PrefHashFilter::ENFORCE_ON_LOAD,
131 PrefHashFilter::TRACKING_STRATEGY_ATOMIC 131 PrefHashFilter::TRACKING_STRATEGY_ATOMIC
132 }, 132 },
133 #endif 133 #endif
134 { 134 {
135 12, extensions::pref_names::kKnownDisabled, 135 12, extensions::pref_names::kKnownDisabled,
136 PrefHashFilter::NO_ENFORCEMENT, 136 PrefHashFilter::NO_ENFORCEMENT,
137 PrefHashFilter::TRACKING_STRATEGY_ATOMIC 137 PrefHashFilter::TRACKING_STRATEGY_ATOMIC
138 }, 138 },
139 { 139 {
140 13, prefs::kProfileResetPromptMemento, 140 13, prefs::kProfileResetPromptMemento,
141 PrefHashFilter::ENFORCE_ALL, 141 PrefHashFilter::ENFORCE_ON_LOAD,
142 PrefHashFilter::TRACKING_STRATEGY_ATOMIC 142 PrefHashFilter::TRACKING_STRATEGY_ATOMIC
143 }, 143 },
144 }; 144 };
145 145
146 // The count of tracked preferences IDs across all platforms. 146 // The count of tracked preferences IDs across all platforms.
147 const size_t kTrackedPrefsReportingIDsCount = 14; 147 const size_t kTrackedPrefsReportingIDsCount = 14;
148 COMPILE_ASSERT(kTrackedPrefsReportingIDsCount >= arraysize(kTrackedPrefs), 148 COMPILE_ASSERT(kTrackedPrefsReportingIDsCount >= arraysize(kTrackedPrefs),
149 need_to_increment_ids_count); 149 need_to_increment_ids_count);
150 150
151 PrefHashFilter::EnforcementLevel GetSettingsEnforcementLevel() { 151 enum SettingsEnforcementGroup {
152 static const char kSettingsEnforcementExperiment[] = "SettingsEnforcement"; 152 GROUP_NO_ENFORCEMENT,
153 // Only enforce settings on profile loads; still allow seeding of unloaded
154 // profiles.
155 GROUP_ENFORCE_ON_LOAD,
156 // TOOD(gab): Block unloaded profile seeding in this mode.
157 GROUP_ENFORCE_ALWAYS
158 };
159
160 SettingsEnforcementGroup GetSettingsEnforcementGroup() {
153 struct { 161 struct {
154 const char* level_name; 162 const char* group_name;
155 PrefHashFilter::EnforcementLevel level; 163 SettingsEnforcementGroup group;
156 } static const kEnforcementLevelMap[] = { 164 } static const kEnforcementLevelMap[] = {
157 { 165 { chrome_prefs::internals::kSettingsEnforcementGroupNoEnforcement,
158 "no_enforcement", 166 GROUP_NO_ENFORCEMENT },
159 PrefHashFilter::NO_ENFORCEMENT 167 { chrome_prefs::internals::kSettingsEnforcementGroupEnforceOnload,
160 }, 168 GROUP_ENFORCE_ON_LOAD },
161 { 169 { chrome_prefs::internals::kSettingsEnforcementGroupEnforceAlways,
162 "enforce", 170 GROUP_ENFORCE_ALWAYS },
163 PrefHashFilter::ENFORCE
164 },
165 {
166 "enforce_no_seeding",
167 PrefHashFilter::ENFORCE_NO_SEEDING
168 },
169 {
170 "enforce_no_seeding_no_migration",
171 PrefHashFilter::ENFORCE_NO_SEEDING_NO_MIGRATION
172 },
173 }; 171 };
174 COMPILE_ASSERT(ARRAYSIZE_UNSAFE(kEnforcementLevelMap) ==
175 (PrefHashFilter::ENFORCE_ALL -
176 PrefHashFilter::NO_ENFORCEMENT),
177 missing_enforcement_level);
178 172
179 base::FieldTrial* trial = 173 base::FieldTrial* trial =
180 base::FieldTrialList::Find(kSettingsEnforcementExperiment); 174 base::FieldTrialList::Find(
175 chrome_prefs::internals::kSettingsEnforcementTrialName);
181 if (trial) { 176 if (trial) {
182 const std::string& group_name = trial->group_name(); 177 const std::string& group_name = trial->group_name();
183 // ARRAYSIZE_UNSAFE must be used since the array is declared locally; it is 178 // ARRAYSIZE_UNSAFE must be used since the array is declared locally; it is
184 // only unsafe because it could not trigger a compile error on some 179 // only unsafe because it could not trigger a compile error on some
185 // non-array pointer types; this is fine since kEnforcementLevelMap is 180 // non-array pointer types; this is fine since kEnforcementLevelMap is
186 // clearly an array. 181 // clearly an array.
187 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(kEnforcementLevelMap); ++i) { 182 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(kEnforcementLevelMap); ++i) {
188 if (kEnforcementLevelMap[i].level_name == group_name) 183 if (kEnforcementLevelMap[i].group_name == group_name)
189 return kEnforcementLevelMap[i].level; 184 return kEnforcementLevelMap[i].group;
190 } 185 }
191 } 186 }
192 #if defined(OS_WIN) 187 #if defined(OS_WIN)
193 // Default to ENFORCE_ALL in the absence of a valid value for the 188 // Default to GROUP_ENFORCE_ALWAYS in the absence of a valid value for the
194 // SettingsEnforcement field trial. 189 // SettingsEnforcement field trial.
195 // TODO(gab): Switch other platforms over to this mode. 190 // TODO(gab): Switch other platforms over to this mode.
196 return PrefHashFilter::ENFORCE_ALL; 191 return GROUP_ENFORCE_ALWAYS;
197 #else 192 #else
198 return PrefHashFilter::NO_ENFORCEMENT; 193 return GROUP_NO_ENFORCEMENT;
199 #endif 194 #endif
200 } 195 }
201 196
202 // Shows notifications which correspond to PersistentPrefStore's reading errors. 197 // Shows notifications which correspond to PersistentPrefStore's reading errors.
203 void HandleReadError(PersistentPrefStore::PrefReadError error) { 198 void HandleReadError(PersistentPrefStore::PrefReadError error) {
204 // Sample the histogram also for the successful case in order to get a 199 // Sample the histogram also for the successful case in order to get a
205 // baseline on the success rate in addition to the error distribution. 200 // baseline on the success rate in addition to the error distribution.
206 UMA_HISTOGRAM_ENUMERATION("PrefService.ReadError", error, 201 UMA_HISTOGRAM_ENUMERATION("PrefService.ReadError", error,
207 PersistentPrefStore::PREF_READ_ERROR_MAX_ENUM); 202 PersistentPrefStore::PREF_READ_ERROR_MAX_ENUM);
208 203
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after
267 } 262 }
268 263
269 void HandleResetEvent() { 264 void HandleResetEvent() {
270 g_browser_process->local_state()->SetInt64( 265 g_browser_process->local_state()->SetInt64(
271 prefs::kProfilePreferenceResetTime, 266 prefs::kProfilePreferenceResetTime,
272 base::Time::Now().ToInternalValue()); 267 base::Time::Now().ToInternalValue());
273 } 268 }
274 269
275 scoped_ptr<PrefHashFilter> CreatePrefHashFilter( 270 scoped_ptr<PrefHashFilter> CreatePrefHashFilter(
276 scoped_ptr<PrefHashStore> pref_hash_store) { 271 scoped_ptr<PrefHashStore> pref_hash_store) {
272 const PrefHashFilter::EnforcementLevel enforcement_level =
273 GetSettingsEnforcementGroup() == GROUP_NO_ENFORCEMENT ?
274 PrefHashFilter::NO_ENFORCEMENT : PrefHashFilter::ENFORCE_ON_LOAD;
277 return make_scoped_ptr(new PrefHashFilter(pref_hash_store.Pass(), 275 return make_scoped_ptr(new PrefHashFilter(pref_hash_store.Pass(),
278 kTrackedPrefs, 276 kTrackedPrefs,
279 arraysize(kTrackedPrefs), 277 arraysize(kTrackedPrefs),
280 kTrackedPrefsReportingIDsCount, 278 kTrackedPrefsReportingIDsCount,
281 GetSettingsEnforcementLevel(), 279 enforcement_level,
282 base::Bind(&HandleResetEvent))); 280 base::Bind(&HandleResetEvent)));
283 } 281 }
284 282
285 void PrepareBuilder( 283 void PrepareBuilder(
286 PrefServiceSyncableFactory* factory, 284 PrefServiceSyncableFactory* factory,
287 const base::FilePath& pref_filename, 285 const base::FilePath& pref_filename,
288 base::SequencedTaskRunner* pref_io_task_runner, 286 base::SequencedTaskRunner* pref_io_task_runner,
289 policy::PolicyService* policy_service, 287 policy::PolicyService* policy_service,
290 ManagedUserSettingsService* managed_user_settings, 288 ManagedUserSettingsService* managed_user_settings,
291 scoped_ptr<PrefHashStore> pref_hash_store, 289 scoped_ptr<PrefHashStore> pref_hash_store,
(...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after
391 "Settings.TrackedPreferencesInitializedForUnloadedProfile", true); 389 "Settings.TrackedPreferencesInitializedForUnloadedProfile", true);
392 } 390 }
393 pref_store_->RemoveObserver(this); 391 pref_store_->RemoveObserver(this);
394 delete this; 392 delete this;
395 } 393 }
396 394
397 } // namespace 395 } // namespace
398 396
399 namespace chrome_prefs { 397 namespace chrome_prefs {
400 398
399 namespace internals {
400
401 const char kSettingsEnforcementTrialName[] = "SettingsEnforcement";
402 const char kSettingsEnforcementGroupNoEnforcement[] = "no_enforcement";
403 const char kSettingsEnforcementGroupEnforceOnload[] = "enforce_on_load";
404 const char kSettingsEnforcementGroupEnforceAlways[] = "enforce_always";
405
406 } // namespace internals
407
401 scoped_ptr<PrefService> CreateLocalState( 408 scoped_ptr<PrefService> CreateLocalState(
402 const base::FilePath& pref_filename, 409 const base::FilePath& pref_filename,
403 base::SequencedTaskRunner* pref_io_task_runner, 410 base::SequencedTaskRunner* pref_io_task_runner,
404 policy::PolicyService* policy_service, 411 policy::PolicyService* policy_service,
405 const scoped_refptr<PrefRegistry>& pref_registry, 412 const scoped_refptr<PrefRegistry>& pref_registry,
406 bool async) { 413 bool async) {
407 PrefServiceSyncableFactory factory; 414 PrefServiceSyncableFactory factory;
408 PrepareBuilder(&factory, 415 PrepareBuilder(&factory,
409 pref_filename, 416 pref_filename,
410 pref_io_task_runner, 417 pref_io_task_runner,
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after
501 UMA_HISTOGRAM_BOOLEAN("Settings.InitializedFromMasterPrefs", success); 508 UMA_HISTOGRAM_BOOLEAN("Settings.InitializedFromMasterPrefs", success);
502 return success; 509 return success;
503 } 510 }
504 511
505 void RegisterPrefs(PrefRegistrySimple* registry) { 512 void RegisterPrefs(PrefRegistrySimple* registry) {
506 registry->RegisterInt64Pref(prefs::kProfilePreferenceResetTime, 0L); 513 registry->RegisterInt64Pref(prefs::kProfilePreferenceResetTime, 0L);
507 PrefHashStoreImpl::RegisterPrefs(registry); 514 PrefHashStoreImpl::RegisterPrefs(registry);
508 } 515 }
509 516
510 } // namespace chrome_prefs 517 } // namespace chrome_prefs
OLDNEW
« no previous file with comments | « chrome/browser/prefs/chrome_pref_service_factory.h ('k') | chrome/browser/prefs/pref_hash_filter.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698