| 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_command_line_pref_store.h> | 5 #include <chrome/browser/prefs/chrome_command_line_pref_store.h> |
| 6 #include "chrome/browser/prefs/chrome_pref_service_factory.h" | 6 #include "chrome/browser/prefs/chrome_pref_service_factory.h" |
| 7 | 7 |
| 8 #include <stddef.h> | 8 #include <stddef.h> |
| 9 | 9 |
| 10 #include <string> | 10 #include <string> |
| (...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 74 #if defined(OS_WIN) | 74 #if defined(OS_WIN) |
| 75 #include "base/win/win_util.h" | 75 #include "base/win/win_util.h" |
| 76 #if BUILDFLAG(ENABLE_RLZ) | 76 #if BUILDFLAG(ENABLE_RLZ) |
| 77 #include "rlz/lib/machine_id.h" | 77 #include "rlz/lib/machine_id.h" |
| 78 #endif // BUILDFLAG(ENABLE_RLZ) | 78 #endif // BUILDFLAG(ENABLE_RLZ) |
| 79 #endif // defined(OS_WIN) | 79 #endif // defined(OS_WIN) |
| 80 | 80 |
| 81 using content::BrowserContext; | 81 using content::BrowserContext; |
| 82 using content::BrowserThread; | 82 using content::BrowserThread; |
| 83 | 83 |
| 84 using EnforcementLevel = PrefHashFilter::EnforcementLevel; |
| 85 using PrefTrackingStrategy = PrefHashFilter::PrefTrackingStrategy; |
| 86 using ValueType = PrefHashFilter::ValueType; |
| 87 |
| 84 namespace { | 88 namespace { |
| 85 | 89 |
| 86 #if defined(OS_WIN) | 90 #if defined(OS_WIN) |
| 87 // Whether we are in testing mode; can be enabled via | 91 // Whether we are in testing mode; can be enabled via |
| 88 // DisableDomainCheckForTesting(). Forces startup checks to ignore the presence | 92 // DisableDomainCheckForTesting(). Forces startup checks to ignore the presence |
| 89 // of a domain when determining the active SettingsEnforcement group. | 93 // of a domain when determining the active SettingsEnforcement group. |
| 90 bool g_disable_domain_check_for_testing = false; | 94 bool g_disable_domain_check_for_testing = false; |
| 91 #endif // OS_WIN | 95 #endif // OS_WIN |
| 92 | 96 |
| 93 // These preferences must be kept in sync with the TrackedPreference enum in | 97 // These preferences must be kept in sync with the TrackedPreference enum in |
| 94 // tools/metrics/histograms/histograms.xml. To add a new preference, append it | 98 // tools/metrics/histograms/histograms.xml. To add a new preference, append it |
| 95 // to the array and add a corresponding value to the histogram enum. Each | 99 // to the array and add a corresponding value to the histogram enum. Each |
| 96 // tracked preference must be given a unique reporting ID. | 100 // tracked preference must be given a unique reporting ID. |
| 97 // See CleanupDeprecatedTrackedPreferences() in pref_hash_filter.cc to remove a | 101 // See CleanupDeprecatedTrackedPreferences() in pref_hash_filter.cc to remove a |
| 98 // deprecated tracked preference. | 102 // deprecated tracked preference. |
| 99 const PrefHashFilter::TrackedPreferenceMetadata kTrackedPrefs[] = { | 103 const PrefHashFilter::TrackedPreferenceMetadata kTrackedPrefs[] = { |
| 100 { | 104 {0, prefs::kShowHomeButton, EnforcementLevel::ENFORCE_ON_LOAD, |
| 101 0, prefs::kShowHomeButton, | 105 PrefTrackingStrategy::ATOMIC, ValueType::IMPERSONAL}, |
| 102 PrefHashFilter::ENFORCE_ON_LOAD, | 106 {1, prefs::kHomePageIsNewTabPage, EnforcementLevel::ENFORCE_ON_LOAD, |
| 103 PrefHashFilter::TRACKING_STRATEGY_ATOMIC, | 107 PrefTrackingStrategy::ATOMIC, ValueType::IMPERSONAL}, |
| 104 PrefHashFilter::VALUE_IMPERSONAL | 108 {2, prefs::kHomePage, EnforcementLevel::ENFORCE_ON_LOAD, |
| 105 }, | 109 PrefTrackingStrategy::ATOMIC, ValueType::IMPERSONAL}, |
| 106 { | 110 {3, prefs::kRestoreOnStartup, EnforcementLevel::ENFORCE_ON_LOAD, |
| 107 1, prefs::kHomePageIsNewTabPage, | 111 PrefTrackingStrategy::ATOMIC, ValueType::IMPERSONAL}, |
| 108 PrefHashFilter::ENFORCE_ON_LOAD, | 112 {4, prefs::kURLsToRestoreOnStartup, EnforcementLevel::ENFORCE_ON_LOAD, |
| 109 PrefHashFilter::TRACKING_STRATEGY_ATOMIC, | 113 PrefTrackingStrategy::ATOMIC, ValueType::IMPERSONAL}, |
| 110 PrefHashFilter::VALUE_IMPERSONAL | |
| 111 }, | |
| 112 { | |
| 113 2, prefs::kHomePage, | |
| 114 PrefHashFilter::ENFORCE_ON_LOAD, | |
| 115 PrefHashFilter::TRACKING_STRATEGY_ATOMIC, | |
| 116 PrefHashFilter::VALUE_IMPERSONAL | |
| 117 }, | |
| 118 { | |
| 119 3, prefs::kRestoreOnStartup, | |
| 120 PrefHashFilter::ENFORCE_ON_LOAD, | |
| 121 PrefHashFilter::TRACKING_STRATEGY_ATOMIC, | |
| 122 PrefHashFilter::VALUE_IMPERSONAL | |
| 123 }, | |
| 124 { | |
| 125 4, prefs::kURLsToRestoreOnStartup, | |
| 126 PrefHashFilter::ENFORCE_ON_LOAD, | |
| 127 PrefHashFilter::TRACKING_STRATEGY_ATOMIC, | |
| 128 PrefHashFilter::VALUE_IMPERSONAL | |
| 129 }, | |
| 130 #if BUILDFLAG(ENABLE_EXTENSIONS) | 114 #if BUILDFLAG(ENABLE_EXTENSIONS) |
| 131 { | 115 {5, extensions::pref_names::kExtensions, EnforcementLevel::NO_ENFORCEMENT, |
| 132 5, extensions::pref_names::kExtensions, | 116 PrefTrackingStrategy::SPLIT, ValueType::IMPERSONAL}, |
| 133 PrefHashFilter::NO_ENFORCEMENT, | |
| 134 PrefHashFilter::TRACKING_STRATEGY_SPLIT, | |
| 135 PrefHashFilter::VALUE_IMPERSONAL | |
| 136 }, | |
| 137 #endif | 117 #endif |
| 138 { | 118 {6, prefs::kGoogleServicesLastUsername, EnforcementLevel::ENFORCE_ON_LOAD, |
| 139 6, prefs::kGoogleServicesLastUsername, | 119 PrefTrackingStrategy::ATOMIC, ValueType::PERSONAL}, |
| 140 PrefHashFilter::ENFORCE_ON_LOAD, | 120 {7, prefs::kSearchProviderOverrides, EnforcementLevel::ENFORCE_ON_LOAD, |
| 141 PrefHashFilter::TRACKING_STRATEGY_ATOMIC, | 121 PrefTrackingStrategy::ATOMIC, ValueType::IMPERSONAL}, |
| 142 PrefHashFilter::VALUE_PERSONAL | |
| 143 }, | |
| 144 { | |
| 145 7, prefs::kSearchProviderOverrides, | |
| 146 PrefHashFilter::ENFORCE_ON_LOAD, | |
| 147 PrefHashFilter::TRACKING_STRATEGY_ATOMIC, | |
| 148 PrefHashFilter::VALUE_IMPERSONAL | |
| 149 }, | |
| 150 #if !defined(OS_ANDROID) | 122 #if !defined(OS_ANDROID) |
| 151 { | 123 {11, prefs::kPinnedTabs, EnforcementLevel::ENFORCE_ON_LOAD, |
| 152 11, prefs::kPinnedTabs, | 124 PrefTrackingStrategy::ATOMIC, ValueType::IMPERSONAL}, |
| 153 PrefHashFilter::ENFORCE_ON_LOAD, | |
| 154 PrefHashFilter::TRACKING_STRATEGY_ATOMIC, | |
| 155 PrefHashFilter::VALUE_IMPERSONAL | |
| 156 }, | |
| 157 #endif | 125 #endif |
| 158 { | 126 {14, DefaultSearchManager::kDefaultSearchProviderDataPrefName, |
| 159 14, DefaultSearchManager::kDefaultSearchProviderDataPrefName, | 127 EnforcementLevel::NO_ENFORCEMENT, PrefTrackingStrategy::ATOMIC, |
| 160 PrefHashFilter::NO_ENFORCEMENT, | 128 ValueType::IMPERSONAL}, |
| 161 PrefHashFilter::TRACKING_STRATEGY_ATOMIC, | 129 {// Protecting kPreferenceResetTime does two things: |
| 162 PrefHashFilter::VALUE_IMPERSONAL | 130 // 1) It ensures this isn't accidently set by someone stomping the pref |
| 163 }, | 131 // file. |
| 164 { | 132 // 2) More importantly, it declares kPreferenceResetTime as a protected |
| 165 // Protecting kPreferenceResetTime does two things: | 133 // pref which is required for it to be visible when queried via the |
| 166 // 1) It ensures this isn't accidently set by someone stomping the pref | 134 // SegregatedPrefStore. This is because it's written directly in the |
| 167 // file. | 135 // protected JsonPrefStore by that store's PrefHashFilter if there was |
| 168 // 2) More importantly, it declares kPreferenceResetTime as a protected | 136 // a reset in FilterOnLoad and SegregatedPrefStore will not look for it |
| 169 // pref which is required for it to be visible when queried via the | 137 // in the protected JsonPrefStore unless it's declared as a protected |
| 170 // SegregatedPrefStore. This is because it's written directly in the | 138 // preference here. |
| 171 // protected JsonPrefStore by that store's PrefHashFilter if there was | 139 15, user_prefs::kPreferenceResetTime, EnforcementLevel::ENFORCE_ON_LOAD, |
| 172 // a reset in FilterOnLoad and SegregatedPrefStore will not look for it | 140 PrefTrackingStrategy::ATOMIC, ValueType::IMPERSONAL}, |
| 173 // in the protected JsonPrefStore unless it's declared as a protected | 141 // kSyncRemainingRollbackTries is deprecated and will be removed a few |
| 174 // preference here. | 142 // releases after M50. |
| 175 15, user_prefs::kPreferenceResetTime, | 143 {18, prefs::kSafeBrowsingIncidentsSent, EnforcementLevel::ENFORCE_ON_LOAD, |
| 176 PrefHashFilter::ENFORCE_ON_LOAD, | 144 PrefTrackingStrategy::ATOMIC, ValueType::IMPERSONAL}, |
| 177 PrefHashFilter::TRACKING_STRATEGY_ATOMIC, | |
| 178 PrefHashFilter::VALUE_IMPERSONAL | |
| 179 }, | |
| 180 // kSyncRemainingRollbackTries is deprecated and will be removed a few | |
| 181 // releases after M50. | |
| 182 { | |
| 183 18, prefs::kSafeBrowsingIncidentsSent, | |
| 184 PrefHashFilter::ENFORCE_ON_LOAD, | |
| 185 PrefHashFilter::TRACKING_STRATEGY_ATOMIC, | |
| 186 PrefHashFilter::VALUE_IMPERSONAL | |
| 187 }, | |
| 188 #if defined(OS_WIN) | 145 #if defined(OS_WIN) |
| 189 { | 146 {19, prefs::kSwReporterPromptVersion, EnforcementLevel::ENFORCE_ON_LOAD, |
| 190 19, prefs::kSwReporterPromptVersion, | 147 PrefTrackingStrategy::ATOMIC, ValueType::IMPERSONAL}, |
| 191 PrefHashFilter::ENFORCE_ON_LOAD, | |
| 192 PrefHashFilter::TRACKING_STRATEGY_ATOMIC, | |
| 193 PrefHashFilter::VALUE_IMPERSONAL | |
| 194 }, | |
| 195 #endif | 148 #endif |
| 196 // This pref is deprecated and will be removed a few releases after M43. | 149 // This pref is deprecated and will be removed a few releases after M43. |
| 197 // kGoogleServicesAccountId replaces it. | 150 // kGoogleServicesAccountId replaces it. |
| 198 { | 151 {21, prefs::kGoogleServicesUsername, EnforcementLevel::ENFORCE_ON_LOAD, |
| 199 21, prefs::kGoogleServicesUsername, | 152 PrefTrackingStrategy::ATOMIC, ValueType::PERSONAL}, |
| 200 PrefHashFilter::ENFORCE_ON_LOAD, | |
| 201 PrefHashFilter::TRACKING_STRATEGY_ATOMIC, | |
| 202 PrefHashFilter::VALUE_PERSONAL | |
| 203 }, | |
| 204 #if defined(OS_WIN) | 153 #if defined(OS_WIN) |
| 205 { | 154 {22, prefs::kSwReporterPromptSeed, EnforcementLevel::ENFORCE_ON_LOAD, |
| 206 22, prefs::kSwReporterPromptSeed, | 155 PrefTrackingStrategy::ATOMIC, ValueType::IMPERSONAL}, |
| 207 PrefHashFilter::ENFORCE_ON_LOAD, | |
| 208 PrefHashFilter::TRACKING_STRATEGY_ATOMIC, | |
| 209 PrefHashFilter::VALUE_IMPERSONAL | |
| 210 }, | |
| 211 #endif | 156 #endif |
| 212 { | 157 {23, prefs::kGoogleServicesAccountId, EnforcementLevel::ENFORCE_ON_LOAD, |
| 213 23, prefs::kGoogleServicesAccountId, | 158 PrefTrackingStrategy::ATOMIC, ValueType::PERSONAL}, |
| 214 PrefHashFilter::ENFORCE_ON_LOAD, | 159 {24, prefs::kGoogleServicesLastAccountId, EnforcementLevel::ENFORCE_ON_LOAD, |
| 215 PrefHashFilter::TRACKING_STRATEGY_ATOMIC, | 160 PrefTrackingStrategy::ATOMIC, ValueType::PERSONAL}, |
| 216 PrefHashFilter::VALUE_PERSONAL | |
| 217 }, | |
| 218 { | |
| 219 24, prefs::kGoogleServicesLastAccountId, | |
| 220 PrefHashFilter::ENFORCE_ON_LOAD, | |
| 221 PrefHashFilter::TRACKING_STRATEGY_ATOMIC, | |
| 222 PrefHashFilter::VALUE_PERSONAL | |
| 223 }, | |
| 224 #if defined(OS_WIN) | 161 #if defined(OS_WIN) |
| 225 { | 162 {25, prefs::kSettingsResetPromptPromptWave, |
| 226 25, prefs::kSettingsResetPromptPromptWave, | 163 EnforcementLevel::ENFORCE_ON_LOAD, PrefTrackingStrategy::ATOMIC, |
| 227 PrefHashFilter::ENFORCE_ON_LOAD, | 164 ValueType::IMPERSONAL}, |
| 228 PrefHashFilter::TRACKING_STRATEGY_ATOMIC, | 165 {26, prefs::kSettingsResetPromptLastTriggeredForDefaultSearch, |
| 229 PrefHashFilter::VALUE_IMPERSONAL | 166 EnforcementLevel::ENFORCE_ON_LOAD, PrefTrackingStrategy::ATOMIC, |
| 230 }, | 167 ValueType::IMPERSONAL}, |
| 231 { | 168 {27, prefs::kSettingsResetPromptLastTriggeredForStartupUrls, |
| 232 26, prefs::kSettingsResetPromptLastTriggeredForDefaultSearch, | 169 EnforcementLevel::ENFORCE_ON_LOAD, PrefTrackingStrategy::ATOMIC, |
| 233 PrefHashFilter::ENFORCE_ON_LOAD, | 170 ValueType::IMPERSONAL}, |
| 234 PrefHashFilter::TRACKING_STRATEGY_ATOMIC, | 171 {28, prefs::kSettingsResetPromptLastTriggeredForHomepage, |
| 235 PrefHashFilter::VALUE_IMPERSONAL | 172 EnforcementLevel::ENFORCE_ON_LOAD, PrefTrackingStrategy::ATOMIC, |
| 236 }, | 173 ValueType::IMPERSONAL}, |
| 237 { | |
| 238 27, prefs::kSettingsResetPromptLastTriggeredForStartupUrls, | |
| 239 PrefHashFilter::ENFORCE_ON_LOAD, | |
| 240 PrefHashFilter::TRACKING_STRATEGY_ATOMIC, | |
| 241 PrefHashFilter::VALUE_IMPERSONAL | |
| 242 }, | |
| 243 { | |
| 244 28, prefs::kSettingsResetPromptLastTriggeredForHomepage, | |
| 245 PrefHashFilter::ENFORCE_ON_LOAD, | |
| 246 PrefHashFilter::TRACKING_STRATEGY_ATOMIC, | |
| 247 PrefHashFilter::VALUE_IMPERSONAL | |
| 248 }, | |
| 249 #endif // defined(OS_WIN) | 174 #endif // defined(OS_WIN) |
| 250 // See note at top, new items added here also need to be added to | 175 |
| 251 // histograms.xml's TrackedPreference enum. | 176 // See note at top, new items added here also need to be added to |
| 177 // histograms.xml's TrackedPreference enum. |
| 252 }; | 178 }; |
| 253 | 179 |
| 254 // One more than the last tracked preferences ID above. | 180 // One more than the last tracked preferences ID above. |
| 255 const size_t kTrackedPrefsReportingIDsCount = | 181 const size_t kTrackedPrefsReportingIDsCount = |
| 256 kTrackedPrefs[arraysize(kTrackedPrefs) - 1].reporting_id + 1; | 182 kTrackedPrefs[arraysize(kTrackedPrefs) - 1].reporting_id + 1; |
| 257 | 183 |
| 258 // Each group enforces a superset of the protection provided by the previous | 184 // Each group enforces a superset of the protection provided by the previous |
| 259 // one. | 185 // one. |
| 260 enum SettingsEnforcementGroup { | 186 enum SettingsEnforcementGroup { |
| 261 GROUP_NO_ENFORCEMENT, | 187 GROUP_NO_ENFORCEMENT, |
| (...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 335 GetTrackingConfiguration() { | 261 GetTrackingConfiguration() { |
| 336 const SettingsEnforcementGroup enforcement_group = | 262 const SettingsEnforcementGroup enforcement_group = |
| 337 GetSettingsEnforcementGroup(); | 263 GetSettingsEnforcementGroup(); |
| 338 | 264 |
| 339 std::vector<PrefHashFilter::TrackedPreferenceMetadata> result; | 265 std::vector<PrefHashFilter::TrackedPreferenceMetadata> result; |
| 340 for (size_t i = 0; i < arraysize(kTrackedPrefs); ++i) { | 266 for (size_t i = 0; i < arraysize(kTrackedPrefs); ++i) { |
| 341 PrefHashFilter::TrackedPreferenceMetadata data = kTrackedPrefs[i]; | 267 PrefHashFilter::TrackedPreferenceMetadata data = kTrackedPrefs[i]; |
| 342 | 268 |
| 343 if (GROUP_NO_ENFORCEMENT == enforcement_group) { | 269 if (GROUP_NO_ENFORCEMENT == enforcement_group) { |
| 344 // Remove enforcement for all tracked preferences. | 270 // Remove enforcement for all tracked preferences. |
| 345 data.enforcement_level = PrefHashFilter::NO_ENFORCEMENT; | 271 data.enforcement_level = EnforcementLevel::NO_ENFORCEMENT; |
| 346 } | 272 } |
| 347 | 273 |
| 348 if (enforcement_group >= GROUP_ENFORCE_ALWAYS_WITH_DSE && | 274 if (enforcement_group >= GROUP_ENFORCE_ALWAYS_WITH_DSE && |
| 349 data.name == DefaultSearchManager::kDefaultSearchProviderDataPrefName) { | 275 data.name == DefaultSearchManager::kDefaultSearchProviderDataPrefName) { |
| 350 // Specifically enable default search settings enforcement. | 276 // Specifically enable default search settings enforcement. |
| 351 data.enforcement_level = PrefHashFilter::ENFORCE_ON_LOAD; | 277 data.enforcement_level = EnforcementLevel::ENFORCE_ON_LOAD; |
| 352 } | 278 } |
| 353 | 279 |
| 354 #if BUILDFLAG(ENABLE_EXTENSIONS) | 280 #if BUILDFLAG(ENABLE_EXTENSIONS) |
| 355 if (enforcement_group >= GROUP_ENFORCE_ALWAYS_WITH_EXTENSIONS_AND_DSE && | 281 if (enforcement_group >= GROUP_ENFORCE_ALWAYS_WITH_EXTENSIONS_AND_DSE && |
| 356 data.name == extensions::pref_names::kExtensions) { | 282 data.name == extensions::pref_names::kExtensions) { |
| 357 // Specifically enable extension settings enforcement. | 283 // Specifically enable extension settings enforcement. |
| 358 data.enforcement_level = PrefHashFilter::ENFORCE_ON_LOAD; | 284 data.enforcement_level = EnforcementLevel::ENFORCE_ON_LOAD; |
| 359 } | 285 } |
| 360 #endif | 286 #endif |
| 361 | 287 |
| 362 result.push_back(data); | 288 result.push_back(data); |
| 363 } | 289 } |
| 364 return result; | 290 return result; |
| 365 } | 291 } |
| 366 | 292 |
| 367 // Shows notifications which correspond to PersistentPrefStore's reading errors. | 293 // Shows notifications which correspond to PersistentPrefStore's reading errors. |
| 368 void HandleReadError(const base::FilePath& pref_filename, | 294 void HandleReadError(const base::FilePath& pref_filename, |
| (...skipping 183 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 552 | 478 |
| 553 void ClearResetTime(Profile* profile) { | 479 void ClearResetTime(Profile* profile) { |
| 554 ProfilePrefStoreManager::ClearResetTime(profile->GetPrefs()); | 480 ProfilePrefStoreManager::ClearResetTime(profile->GetPrefs()); |
| 555 } | 481 } |
| 556 | 482 |
| 557 void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry) { | 483 void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry) { |
| 558 ProfilePrefStoreManager::RegisterProfilePrefs(registry); | 484 ProfilePrefStoreManager::RegisterProfilePrefs(registry); |
| 559 } | 485 } |
| 560 | 486 |
| 561 } // namespace chrome_prefs | 487 } // namespace chrome_prefs |
| OLD | NEW |