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

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

Issue 114223002: Multi-strategy based tracking. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: fix clang 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
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/field_trial.h"
12 #include "base/metrics/histogram.h" 12 #include "base/metrics/histogram.h"
13 #include "base/prefs/default_pref_store.h" 13 #include "base/prefs/default_pref_store.h"
14 #include "base/prefs/json_pref_store.h" 14 #include "base/prefs/json_pref_store.h"
15 #include "base/prefs/pref_notifier_impl.h" 15 #include "base/prefs/pref_notifier_impl.h"
16 #include "base/prefs/pref_registry.h" 16 #include "base/prefs/pref_registry.h"
17 #include "base/prefs/pref_service.h" 17 #include "base/prefs/pref_service.h"
18 #include "base/prefs/pref_value_store.h" 18 #include "base/prefs/pref_value_store.h"
19 #include "chrome/browser/browser_process.h" 19 #include "chrome/browser/browser_process.h"
20 #include "chrome/browser/prefs/command_line_pref_store.h" 20 #include "chrome/browser/prefs/command_line_pref_store.h"
21 #include "chrome/browser/prefs/pref_hash_filter.h" 21 #include "chrome/browser/prefs/pref_hash_filter.h"
22 #include "chrome/browser/prefs/pref_hash_store.h" 22 #include "chrome/browser/prefs/pref_hash_store.h"
23 #include "chrome/browser/prefs/pref_model_associator.h" 23 #include "chrome/browser/prefs/pref_model_associator.h"
24 #include "chrome/browser/prefs/pref_service_syncable.h" 24 #include "chrome/browser/prefs/pref_service_syncable.h"
25 #include "chrome/browser/prefs/pref_service_syncable_factory.h" 25 #include "chrome/browser/prefs/pref_service_syncable_factory.h"
26 #include "chrome/browser/prefs/tracked_preference.h"
26 #include "chrome/browser/ui/profile_error_dialog.h" 27 #include "chrome/browser/ui/profile_error_dialog.h"
27 #include "chrome/common/pref_names.h" 28 #include "chrome/common/pref_names.h"
28 #include "components/user_prefs/pref_registry_syncable.h" 29 #include "components/user_prefs/pref_registry_syncable.h"
29 #include "content/public/browser/browser_context.h" 30 #include "content/public/browser/browser_context.h"
30 #include "content/public/browser/browser_thread.h" 31 #include "content/public/browser/browser_thread.h"
31 #include "grit/chromium_strings.h" 32 #include "grit/chromium_strings.h"
32 #include "grit/generated_resources.h" 33 #include "grit/generated_resources.h"
33 34
34 #if defined(ENABLE_CONFIGURATION_POLICY) 35 #if defined(ENABLE_CONFIGURATION_POLICY)
35 #include "chrome/browser/policy/browser_policy_connector.h" 36 #include "chrome/browser/policy/browser_policy_connector.h"
36 #include "components/policy/core/browser/configuration_policy_pref_store.h" 37 #include "components/policy/core/browser/configuration_policy_pref_store.h"
37 #include "components/policy/core/common/policy_types.h" 38 #include "components/policy/core/common/policy_types.h"
38 #endif 39 #endif
39 40
40 #if defined(ENABLE_MANAGED_USERS) 41 #if defined(ENABLE_MANAGED_USERS)
41 #include "chrome/browser/managed_mode/supervised_user_pref_store.h" 42 #include "chrome/browser/managed_mode/supervised_user_pref_store.h"
42 #endif 43 #endif
43 44
44 using content::BrowserContext; 45 using content::BrowserContext;
45 using content::BrowserThread; 46 using content::BrowserThread;
46 47
47 namespace { 48 namespace {
48 49
49 // These preferences must be kept in sync with the TrackedPreference enum in 50 // 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 // 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 // to the array and add a corresponding value to the histogram enum. Each
52 // tracked preference must be given a unique reporting ID. 53 // tracked preference must be given a unique reporting ID.
53 const PrefHashFilter::TrackedPreference kTrackedPrefs[] = { 54 const PrefHashFilter::TrackedPreferenceMetaData kTrackedPrefs[] = {
54 { 0, prefs::kShowHomeButton, true }, 55 {
55 { 1, prefs::kHomePageIsNewTabPage, true }, 56 0, prefs::kShowHomeButton, true,
56 { 2, prefs::kHomePage, true }, 57 PrefHashFilter::TRACKING_STRATEGY_ATOMIC
57 { 3, prefs::kRestoreOnStartup, true }, 58 },
58 { 4, prefs::kURLsToRestoreOnStartup, true }, 59 {
59 { 5, prefs::kExtensionsPref, false }, 60 1, prefs::kHomePageIsNewTabPage, true,
60 { 6, prefs::kGoogleServicesLastUsername, true }, 61 PrefHashFilter::TRACKING_STRATEGY_ATOMIC
61 { 7, prefs::kSearchProviderOverrides, true }, 62 },
62 { 8, prefs::kDefaultSearchProviderSearchURL, true }, 63 {
63 { 9, prefs::kDefaultSearchProviderKeyword, true }, 64 2, prefs::kHomePage, true,
64 { 10, prefs::kDefaultSearchProviderName, true }, 65 PrefHashFilter::TRACKING_STRATEGY_ATOMIC
66 },
67 {
68 3, prefs::kRestoreOnStartup, true,
69 PrefHashFilter::TRACKING_STRATEGY_ATOMIC
70 },
71 {
72 4, prefs::kURLsToRestoreOnStartup, true,
73 PrefHashFilter::TRACKING_STRATEGY_ATOMIC
74 },
75 {
76 5, prefs::kExtensionsPref, false,
77 PrefHashFilter::TRACKING_STRATEGY_SPLIT
78 },
79 {
80 6, prefs::kGoogleServicesLastUsername, true,
81 PrefHashFilter::TRACKING_STRATEGY_ATOMIC
82 },
83 {
84 7, prefs::kSearchProviderOverrides, true,
85 PrefHashFilter::TRACKING_STRATEGY_ATOMIC
86 },
87 {
88 8, prefs::kDefaultSearchProviderSearchURL, true,
89 PrefHashFilter::TRACKING_STRATEGY_ATOMIC
90 },
91 {
92 9, prefs::kDefaultSearchProviderKeyword, true,
93 PrefHashFilter::TRACKING_STRATEGY_ATOMIC
94 },
95 {
96 10, prefs::kDefaultSearchProviderName, true,
97 PrefHashFilter::TRACKING_STRATEGY_ATOMIC
98 },
65 #if !defined(OS_ANDROID) 99 #if !defined(OS_ANDROID)
66 { 11, prefs::kPinnedTabs, true }, 100 {
101 11, prefs::kPinnedTabs, true,
102 PrefHashFilter::TRACKING_STRATEGY_ATOMIC
103 },
67 #endif 104 #endif
68 { 12, prefs::kExtensionKnownDisabled, true }, 105 {
69 { 13, prefs::kProfileResetPromptMemento, true }, 106 12, prefs::kExtensionKnownDisabled, true,
107 PrefHashFilter::TRACKING_STRATEGY_ATOMIC
108 },
109 {
110 13, prefs::kProfileResetPromptMemento, true,
111 PrefHashFilter::TRACKING_STRATEGY_ATOMIC
112 },
70 }; 113 };
71 114
72 // The count of tracked preferences IDs across all platforms. 115 // The count of tracked preferences IDs across all platforms.
73 const size_t kTrackedPrefsReportingIDsCount = 14; 116 const size_t kTrackedPrefsReportingIDsCount = 14;
74 COMPILE_ASSERT(kTrackedPrefsReportingIDsCount >= arraysize(kTrackedPrefs), 117 COMPILE_ASSERT(kTrackedPrefsReportingIDsCount >= arraysize(kTrackedPrefs),
75 need_to_increment_ids_count); 118 need_to_increment_ids_count);
76 119
77 PrefHashFilter::EnforcementLevel GetSettingsEnforcementLevel() { 120 TrackedPreference::EnforcementLevel GetSettingsEnforcementLevel() {
78 static const char kSettingsEnforcementExperiment[] = "SettingsEnforcement"; 121 static const char kSettingsEnforcementExperiment[] = "SettingsEnforcement";
79 struct { 122 struct {
80 const char* level_name; 123 const char* level_name;
81 PrefHashFilter::EnforcementLevel level; 124 TrackedPreference::EnforcementLevel level;
82 } static const kEnforcementLevelMap[] = { 125 } static const kEnforcementLevelMap[] = {
83 { 126 {
84 "no_enforcement", 127 "no_enforcement",
85 PrefHashFilter::NO_ENFORCEMENT 128 TrackedPreference::NO_ENFORCEMENT
86 }, 129 },
87 { 130 {
88 "enforce", 131 "enforce",
89 PrefHashFilter::ENFORCE 132 TrackedPreference::ENFORCE
90 }, 133 },
91 { 134 {
92 "enforce_no_seeding", 135 "enforce_no_seeding",
93 PrefHashFilter::ENFORCE_NO_SEEDING 136 TrackedPreference::ENFORCE_NO_SEEDING
94 }, 137 },
95 { 138 {
96 "enforce_no_seeding_no_migration", 139 "enforce_no_seeding_no_migration",
97 PrefHashFilter::ENFORCE_NO_SEEDING_NO_MIGRATION 140 TrackedPreference::ENFORCE_NO_SEEDING_NO_MIGRATION
98 }, 141 },
99 }; 142 };
143 COMPILE_ASSERT(ARRAYSIZE_UNSAFE(kEnforcementLevelMap) ==
144 (TrackedPreference::ENFORCE_ALL -
145 TrackedPreference::NO_ENFORCEMENT),
146 missing_enforcement_level);
100 147
101 base::FieldTrial* trial = 148 base::FieldTrial* trial =
102 base::FieldTrialList::Find(kSettingsEnforcementExperiment); 149 base::FieldTrialList::Find(kSettingsEnforcementExperiment);
103 if (trial) { 150 if (trial) {
104 const std::string& group_name = trial->group_name(); 151 const std::string& group_name = trial->group_name();
105 // ARRAYSIZE_UNSAFE must be used since the array is declared locally; it is 152 // ARRAYSIZE_UNSAFE must be used since the array is declared locally; it is
106 // only unsafe because it could not trigger a compile error on some 153 // only unsafe because it could not trigger a compile error on some
107 // non-array pointer types; this is fine since kEnforcementLevelMap is 154 // non-array pointer types; this is fine since kEnforcementLevelMap is
108 // clearly an array. 155 // clearly an array.
109 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(kEnforcementLevelMap); ++i) { 156 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(kEnforcementLevelMap); ++i) {
110 if (kEnforcementLevelMap[i].level_name == group_name) 157 if (kEnforcementLevelMap[i].level_name == group_name)
111 return kEnforcementLevelMap[i].level; 158 return kEnforcementLevelMap[i].level;
112 } 159 }
113 } 160 }
114 // TODO(gab): Switch default to ENFORCE_ALL when the field trial config is up. 161 // TODO(gab): Switch default to ENFORCE_ALL when the field trial config is up.
115 return PrefHashFilter::NO_ENFORCEMENT; 162 return TrackedPreference::NO_ENFORCEMENT;
116 } 163 }
117 164
118 // Shows notifications which correspond to PersistentPrefStore's reading errors. 165 // Shows notifications which correspond to PersistentPrefStore's reading errors.
119 void HandleReadError(PersistentPrefStore::PrefReadError error) { 166 void HandleReadError(PersistentPrefStore::PrefReadError error) {
120 // Sample the histogram also for the successful case in order to get a 167 // Sample the histogram also for the successful case in order to get a
121 // baseline on the success rate in addition to the error distribution. 168 // baseline on the success rate in addition to the error distribution.
122 UMA_HISTOGRAM_ENUMERATION("PrefService.ReadError", error, 169 UMA_HISTOGRAM_ENUMERATION("PrefService.ReadError", error,
123 PersistentPrefStore::PREF_READ_ERROR_MAX_ENUM); 170 PersistentPrefStore::PREF_READ_ERROR_MAX_ENUM);
124 171
125 if (error != PersistentPrefStore::PREF_READ_ERROR_NONE) { 172 if (error != PersistentPrefStore::PREF_READ_ERROR_NONE) {
(...skipping 123 matching lines...) Expand 10 before | Expand all | Expand 10 after
249 pref_io_task_runner, 296 pref_io_task_runner,
250 policy_service, 297 policy_service,
251 managed_user_settings, 298 managed_user_settings,
252 pref_hash_store.Pass(), 299 pref_hash_store.Pass(),
253 extension_prefs, 300 extension_prefs,
254 async); 301 async);
255 return factory.CreateSyncable(pref_registry.get()); 302 return factory.CreateSyncable(pref_registry.get());
256 } 303 }
257 304
258 } // namespace chrome_prefs 305 } // namespace chrome_prefs
OLDNEW
« no previous file with comments | « no previous file | chrome/browser/prefs/pref_hash_filter.h » ('j') | chrome/browser/prefs/pref_hash_filter.h » ('J')

Powered by Google App Engine
This is Rietveld 408576698