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

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

Issue 122653005: Chrome Settings Hardening (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: fix compile? Created 6 years, 11 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/debug/trace_event.h" 8 #include "base/debug/trace_event.h"
9 #include "base/file_util.h" 9 #include "base/file_util.h"
10 #include "base/files/file_path.h" 10 #include "base/files/file_path.h"
11 #include "base/metrics/field_trial.h"
11 #include "base/metrics/histogram.h" 12 #include "base/metrics/histogram.h"
12 #include "base/prefs/default_pref_store.h" 13 #include "base/prefs/default_pref_store.h"
13 #include "base/prefs/json_pref_store.h" 14 #include "base/prefs/json_pref_store.h"
14 #include "base/prefs/pref_notifier_impl.h" 15 #include "base/prefs/pref_notifier_impl.h"
15 #include "base/prefs/pref_registry.h" 16 #include "base/prefs/pref_registry.h"
16 #include "base/prefs/pref_service.h" 17 #include "base/prefs/pref_service.h"
17 #include "base/prefs/pref_value_store.h" 18 #include "base/prefs/pref_value_store.h"
18 #include "chrome/browser/browser_process.h" 19 #include "chrome/browser/browser_process.h"
19 #include "chrome/browser/prefs/command_line_pref_store.h" 20 #include "chrome/browser/prefs/command_line_pref_store.h"
20 #include "chrome/browser/prefs/pref_hash_filter.h" 21 #include "chrome/browser/prefs/pref_hash_filter.h"
21 #include "chrome/browser/prefs/pref_hash_store.h" 22 #include "chrome/browser/prefs/pref_hash_store.h"
22 #include "chrome/browser/prefs/pref_model_associator.h" 23 #include "chrome/browser/prefs/pref_model_associator.h"
23 #include "chrome/browser/prefs/pref_service_syncable.h" 24 #include "chrome/browser/prefs/pref_service_syncable.h"
24 #include "chrome/browser/prefs/pref_service_syncable_factory.h" 25 #include "chrome/browser/prefs/pref_service_syncable_factory.h"
25 #include "chrome/browser/ui/profile_error_dialog.h" 26 #include "chrome/browser/ui/profile_error_dialog.h"
27 #include "chrome/common/pref_names.h"
26 #include "components/user_prefs/pref_registry_syncable.h" 28 #include "components/user_prefs/pref_registry_syncable.h"
27 #include "content/public/browser/browser_context.h" 29 #include "content/public/browser/browser_context.h"
28 #include "content/public/browser/browser_thread.h" 30 #include "content/public/browser/browser_thread.h"
29 #include "grit/chromium_strings.h" 31 #include "grit/chromium_strings.h"
30 #include "grit/generated_resources.h" 32 #include "grit/generated_resources.h"
31 33
32 #if defined(ENABLE_CONFIGURATION_POLICY) 34 #if defined(ENABLE_CONFIGURATION_POLICY)
33 #include "chrome/browser/policy/browser_policy_connector.h" 35 #include "chrome/browser/policy/browser_policy_connector.h"
34 #include "components/policy/core/browser/configuration_policy_pref_store.h" 36 #include "components/policy/core/browser/configuration_policy_pref_store.h"
35 #include "components/policy/core/common/policy_types.h" 37 #include "components/policy/core/common/policy_types.h"
36 #endif 38 #endif
37 39
38 #if defined(ENABLE_MANAGED_USERS) 40 #if defined(ENABLE_MANAGED_USERS)
39 #include "chrome/browser/managed_mode/supervised_user_pref_store.h" 41 #include "chrome/browser/managed_mode/supervised_user_pref_store.h"
40 #endif 42 #endif
41 43
42 using content::BrowserContext; 44 using content::BrowserContext;
43 using content::BrowserThread; 45 using content::BrowserThread;
44 46
45 namespace { 47 namespace {
46 48
49 // These preferences must be kept in sync with the TrackedPreference enum in
50 // tools/metrics/histograms/histograms.xml. To add a new preference, append it
51 // to the array and add a corresponding value to the histogram enum. Each
52 // tracked preference must be given a unique reporting ID.
53 const PrefHashFilter::TrackedPreference kTrackedPrefs[] = {
54 { 0, prefs::kShowHomeButton, true },
55 { 1, prefs::kHomePageIsNewTabPage, true },
56 { 2, prefs::kHomePage, true },
57 { 3, prefs::kRestoreOnStartup, true },
58 { 4, prefs::kURLsToRestoreOnStartup, true },
59 { 5, prefs::kExtensionsPref, false },
60 { 6, prefs::kGoogleServicesLastUsername, true },
61 { 7, prefs::kSearchProviderOverrides, true },
62 { 8, prefs::kDefaultSearchProviderSearchURL, true },
63 { 9, prefs::kDefaultSearchProviderKeyword, true },
64 { 10, prefs::kDefaultSearchProviderName, true },
65 #if !defined(OS_ANDROID)
66 { 11, prefs::kPinnedTabs, true },
67 #endif
68 { 12, prefs::kExtensionKnownDisabled, true },
69 { 13, prefs::kProfileResetPromptMemento, true },
70 };
71
72 // The count of tracked preferences IDs across all platforms.
73 const size_t kTrackedPrefsReportingIDsCount = 14;
gab 2014/01/02 18:40:22 @erikwright pointed out that this might not be nec
Mark P 2014/01/02 19:32:46 erikwright@ is correct that this is not strictly n
74 COMPILE_ASSERT(kTrackedPrefsReportingIDsCount >= arraysize(kTrackedPrefs),
75 need_to_increment_ids_count);
76
77 PrefHashFilter::EnforcementLevel GetSettingsEnforcementLevel() {
78 static const char kSettingsEnforcementExperiment[] = "SettingsEnforcement";
79 struct {
80 PrefHashFilter::EnforcementLevel level;
erikwright (departed) 2014/01/03 19:08:13 nit: I would reverse this since, intuitively, a ma
gab 2014/01/03 19:26:09 Reversed the mapping (i.e., name first). I still
81 const char* level_name;
82 } static const kEnforcementLevelMap[] = {
83 {
84 PrefHashFilter::NO_ENFORCEMENT,
85 "no_enforcement"
86 },
87 {
88 PrefHashFilter::ENFORCE,
89 "enforce"
90 },
91 {
92 PrefHashFilter::ENFORCE_NO_SEEDING,
93 "enforce_no_seeding"
94 },
95 {
96 PrefHashFilter::ENFORCE_NO_SEEDING_NO_MIGRATION,
97 "enforce_no_seeding_no_migration"
98 },
99 };
100
101 base::FieldTrial* trial =
102 base::FieldTrialList::Find(kSettingsEnforcementExperiment);
103 if (trial) {
104 const std::string& group_name = trial->group_name();
105 for (size_t i = 0; i < arraysize(kEnforcementLevelMap); ++i) {
106 if (kEnforcementLevelMap[i].level_name == group_name)
107 return kEnforcementLevelMap[i].level;
108 }
109 }
110 // TODO(gab): Switch default to ENFORCE_ALL when field trial config is up.
111 return PrefHashFilter::NO_ENFORCEMENT;
112 }
113
47 // Shows notifications which correspond to PersistentPrefStore's reading errors. 114 // Shows notifications which correspond to PersistentPrefStore's reading errors.
48 void HandleReadError(PersistentPrefStore::PrefReadError error) { 115 void HandleReadError(PersistentPrefStore::PrefReadError error) {
49 // Sample the histogram also for the successful case in order to get a 116 // Sample the histogram also for the successful case in order to get a
50 // baseline on the success rate in addition to the error distribution. 117 // baseline on the success rate in addition to the error distribution.
51 UMA_HISTOGRAM_ENUMERATION("PrefService.ReadError", error, 118 UMA_HISTOGRAM_ENUMERATION("PrefService.ReadError", error,
52 PersistentPrefStore::PREF_READ_ERROR_MAX_ENUM); 119 PersistentPrefStore::PREF_READ_ERROR_MAX_ENUM);
53 120
54 if (error != PersistentPrefStore::PREF_READ_ERROR_NONE) { 121 if (error != PersistentPrefStore::PREF_READ_ERROR_NONE) {
55 #if !defined(OS_CHROMEOS) 122 #if !defined(OS_CHROMEOS)
56 // Failing to load prefs on startup is a bad thing(TM). See bug 38352 for 123 // Failing to load prefs on startup is a bad thing(TM). See bug 38352 for
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
119 } 186 }
120 #endif 187 #endif
121 188
122 factory->set_async(async); 189 factory->set_async(async);
123 factory->set_extension_prefs(extension_prefs); 190 factory->set_extension_prefs(extension_prefs);
124 factory->set_command_line_prefs( 191 factory->set_command_line_prefs(
125 make_scoped_refptr( 192 make_scoped_refptr(
126 new CommandLinePrefStore(CommandLine::ForCurrentProcess()))); 193 new CommandLinePrefStore(CommandLine::ForCurrentProcess())));
127 factory->set_read_error_callback(base::Bind(&HandleReadError)); 194 factory->set_read_error_callback(base::Bind(&HandleReadError));
128 scoped_ptr<PrefFilter> pref_filter; 195 scoped_ptr<PrefFilter> pref_filter;
129 if (pref_hash_store) 196 if (pref_hash_store) {
130 pref_filter.reset(new PrefHashFilter(pref_hash_store.Pass())); 197 pref_filter.reset(new PrefHashFilter(pref_hash_store.Pass(),
198 kTrackedPrefs,
199 arraysize(kTrackedPrefs),
200 kTrackedPrefsReportingIDsCount,
201 GetSettingsEnforcementLevel()));
202 }
131 factory->set_user_prefs( 203 factory->set_user_prefs(
132 new JsonPrefStore( 204 new JsonPrefStore(
133 pref_filename, 205 pref_filename,
134 pref_io_task_runner, 206 pref_io_task_runner,
135 pref_filter.Pass())); 207 pref_filter.Pass()));
136 } 208 }
137 209
138 } // namespace 210 } // namespace
139 211
140 namespace chrome_prefs { 212 namespace chrome_prefs {
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
173 pref_io_task_runner, 245 pref_io_task_runner,
174 policy_service, 246 policy_service,
175 managed_user_settings, 247 managed_user_settings,
176 pref_hash_store.Pass(), 248 pref_hash_store.Pass(),
177 extension_prefs, 249 extension_prefs,
178 async); 250 async);
179 return factory.CreateSyncable(pref_registry.get()); 251 return factory.CreateSyncable(pref_registry.get());
180 } 252 }
181 253
182 } // namespace chrome_prefs 254 } // 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