Move StartsWith[ASCII] to base namespace.
[chromium-blink-merge.git] / chrome / browser / policy / configuration_policy_handler_list_factory.cc
blobf117e04626de64ee1b52a4a4286f09ea9f79eebd
1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #include "chrome/browser/policy/configuration_policy_handler_list_factory.h"
7 #include "base/basictypes.h"
8 #include "base/bind.h"
9 #include "base/memory/scoped_vector.h"
10 #include "base/prefs/pref_value_map.h"
11 #include "base/values.h"
12 #include "chrome/browser/net/proxy_policy_handler.h"
13 #include "chrome/browser/policy/managed_bookmarks_policy_handler.h"
14 #include "chrome/browser/profiles/incognito_mode_policy_handler.h"
15 #include "chrome/common/chrome_switches.h"
16 #include "chrome/common/pref_names.h"
17 #include "components/password_manager/core/common/password_manager_pref_names.h"
18 #include "components/policy/core/browser/autofill_policy_handler.h"
19 #include "components/policy/core/browser/configuration_policy_handler.h"
20 #include "components/policy/core/browser/configuration_policy_handler_list.h"
21 #include "components/policy/core/browser/configuration_policy_handler_parameters.h"
22 #include "components/policy/core/browser/url_blacklist_policy_handler.h"
23 #include "components/policy/core/common/policy_details.h"
24 #include "components/policy/core/common/policy_map.h"
25 #include "components/policy/core/common/policy_pref_names.h"
26 #include "components/policy/core/common/schema.h"
27 #include "components/search_engines/default_search_policy_handler.h"
28 #include "components/translate/core/common/translate_pref_names.h"
29 #include "policy/policy_constants.h"
31 #if defined(OS_ANDROID)
32 #include "chrome/browser/search/contextual_search_policy_handler_android.h"
33 #endif
35 #if !defined(OS_IOS)
36 #include "chrome/browser/net/disk_cache_dir_policy_handler.h"
37 #include "chrome/browser/policy/file_selection_dialogs_policy_handler.h"
38 #include "chrome/browser/policy/javascript_policy_handler.h"
39 #include "chrome/browser/policy/network_prediction_policy_handler.h"
40 #include "chrome/browser/sessions/restore_on_startup_policy_handler.h"
41 #include "chrome/browser/sync/sync_policy_handler.h"
42 #endif
44 #if defined(OS_CHROMEOS)
45 #include "chrome/browser/chromeos/policy/configuration_policy_handler_chromeos.h"
46 #include "chromeos/chromeos_pref_names.h"
47 #include "chromeos/dbus/power_policy_controller.h"
48 #include "components/user_manager/user.h"
49 #include "components/user_manager/user_manager.h"
50 #include "ui/chromeos/accessibility_types.h"
51 #endif
53 #if !defined(OS_ANDROID) && !defined(OS_IOS)
54 #include "chrome/browser/download/download_dir_policy_handler.h"
55 #endif
57 #if defined(ENABLE_EXTENSIONS)
58 #include "chrome/browser/extensions/api/messaging/native_messaging_policy_handler.h"
59 #include "chrome/browser/extensions/extension_management_constants.h"
60 #include "chrome/browser/extensions/policy_handlers.h"
61 #include "extensions/browser/pref_names.h"
62 #include "extensions/common/manifest.h"
63 #endif
65 namespace policy {
67 namespace {
69 // List of policy types to preference names. This is used for simple policies
70 // that directly map to a single preference.
71 const PolicyToPreferenceMapEntry kSimplePolicyMap[] = {
72 { key::kHomepageLocation,
73 prefs::kHomePage,
74 base::Value::TYPE_STRING },
75 { key::kHomepageIsNewTabPage,
76 prefs::kHomePageIsNewTabPage,
77 base::Value::TYPE_BOOLEAN },
78 { key::kRestoreOnStartupURLs,
79 prefs::kURLsToRestoreOnStartup,
80 base::Value::TYPE_LIST },
81 { key::kAlternateErrorPagesEnabled,
82 prefs::kAlternateErrorPagesEnabled,
83 base::Value::TYPE_BOOLEAN },
84 { key::kSearchSuggestEnabled,
85 prefs::kSearchSuggestEnabled,
86 base::Value::TYPE_BOOLEAN },
87 { key::kBuiltInDnsClientEnabled,
88 prefs::kBuiltInDnsClientEnabled,
89 base::Value::TYPE_BOOLEAN },
90 { key::kWPADQuickCheckEnabled,
91 prefs::kQuickCheckEnabled,
92 base::Value::TYPE_BOOLEAN },
93 { key::kDisableSpdy,
94 prefs::kDisableSpdy,
95 base::Value::TYPE_BOOLEAN },
96 { key::kSafeBrowsingEnabled,
97 prefs::kSafeBrowsingEnabled,
98 base::Value::TYPE_BOOLEAN },
99 { key::kForceGoogleSafeSearch,
100 prefs::kForceGoogleSafeSearch,
101 base::Value::TYPE_BOOLEAN },
102 { key::kForceYouTubeSafetyMode,
103 prefs::kForceYouTubeSafetyMode,
104 base::Value::TYPE_BOOLEAN },
105 { key::kPasswordManagerEnabled,
106 password_manager::prefs::kPasswordManagerSavingEnabled,
107 base::Value::TYPE_BOOLEAN },
108 { key::kPasswordManagerAllowShowPasswords,
109 password_manager::prefs::kPasswordManagerAllowShowPasswords,
110 base::Value::TYPE_BOOLEAN },
111 { key::kPrintingEnabled,
112 prefs::kPrintingEnabled,
113 base::Value::TYPE_BOOLEAN },
114 { key::kDisablePrintPreview,
115 prefs::kPrintPreviewDisabled,
116 base::Value::TYPE_BOOLEAN },
117 { key::kMetricsReportingEnabled,
118 prefs::kMetricsReportingEnabled,
119 base::Value::TYPE_BOOLEAN },
120 { key::kApplicationLocaleValue,
121 prefs::kApplicationLocale,
122 base::Value::TYPE_STRING },
123 { key::kDisabledPlugins,
124 prefs::kPluginsDisabledPlugins,
125 base::Value::TYPE_LIST },
126 { key::kDisabledPluginsExceptions,
127 prefs::kPluginsDisabledPluginsExceptions,
128 base::Value::TYPE_LIST },
129 { key::kEnabledPlugins,
130 prefs::kPluginsEnabledPlugins,
131 base::Value::TYPE_LIST },
132 { key::kShowHomeButton,
133 prefs::kShowHomeButton,
134 base::Value::TYPE_BOOLEAN },
135 { key::kSavingBrowserHistoryDisabled,
136 prefs::kSavingBrowserHistoryDisabled,
137 base::Value::TYPE_BOOLEAN },
138 { key::kAllowDeletingBrowserHistory,
139 prefs::kAllowDeletingBrowserHistory,
140 base::Value::TYPE_BOOLEAN },
141 { key::kDeveloperToolsDisabled,
142 prefs::kDevToolsDisabled,
143 base::Value::TYPE_BOOLEAN },
144 { key::kBlockThirdPartyCookies,
145 prefs::kBlockThirdPartyCookies,
146 base::Value::TYPE_BOOLEAN },
147 { key::kDefaultCookiesSetting,
148 prefs::kManagedDefaultCookiesSetting,
149 base::Value::TYPE_INTEGER },
150 { key::kDefaultImagesSetting,
151 prefs::kManagedDefaultImagesSetting,
152 base::Value::TYPE_INTEGER },
153 { key::kDefaultPluginsSetting,
154 prefs::kManagedDefaultPluginsSetting,
155 base::Value::TYPE_INTEGER },
156 { key::kDefaultPopupsSetting,
157 prefs::kManagedDefaultPopupsSetting,
158 base::Value::TYPE_INTEGER },
159 { key::kAutoSelectCertificateForUrls,
160 prefs::kManagedAutoSelectCertificateForUrls,
161 base::Value::TYPE_LIST },
162 { key::kCookiesAllowedForUrls,
163 prefs::kManagedCookiesAllowedForUrls,
164 base::Value::TYPE_LIST },
165 { key::kCookiesBlockedForUrls,
166 prefs::kManagedCookiesBlockedForUrls,
167 base::Value::TYPE_LIST },
168 { key::kCookiesSessionOnlyForUrls,
169 prefs::kManagedCookiesSessionOnlyForUrls,
170 base::Value::TYPE_LIST },
171 { key::kImagesAllowedForUrls,
172 prefs::kManagedImagesAllowedForUrls,
173 base::Value::TYPE_LIST },
174 { key::kImagesBlockedForUrls,
175 prefs::kManagedImagesBlockedForUrls,
176 base::Value::TYPE_LIST },
177 { key::kJavaScriptAllowedForUrls,
178 prefs::kManagedJavaScriptAllowedForUrls,
179 base::Value::TYPE_LIST },
180 { key::kJavaScriptBlockedForUrls,
181 prefs::kManagedJavaScriptBlockedForUrls,
182 base::Value::TYPE_LIST },
183 { key::kPluginsAllowedForUrls,
184 prefs::kManagedPluginsAllowedForUrls,
185 base::Value::TYPE_LIST },
186 { key::kPluginsBlockedForUrls,
187 prefs::kManagedPluginsBlockedForUrls,
188 base::Value::TYPE_LIST },
189 { key::kPopupsAllowedForUrls,
190 prefs::kManagedPopupsAllowedForUrls,
191 base::Value::TYPE_LIST },
192 { key::kPopupsBlockedForUrls,
193 prefs::kManagedPopupsBlockedForUrls,
194 base::Value::TYPE_LIST },
195 { key::kNotificationsAllowedForUrls,
196 prefs::kManagedNotificationsAllowedForUrls,
197 base::Value::TYPE_LIST },
198 { key::kNotificationsBlockedForUrls,
199 prefs::kManagedNotificationsBlockedForUrls,
200 base::Value::TYPE_LIST },
201 { key::kDefaultNotificationsSetting,
202 prefs::kManagedDefaultNotificationsSetting,
203 base::Value::TYPE_INTEGER },
204 { key::kDefaultGeolocationSetting,
205 prefs::kManagedDefaultGeolocationSetting,
206 base::Value::TYPE_INTEGER },
207 { key::kSigninAllowed,
208 prefs::kSigninAllowed,
209 base::Value::TYPE_BOOLEAN },
210 { key::kDisableSSLRecordSplitting,
211 prefs::kDisableSSLRecordSplitting,
212 base::Value::TYPE_BOOLEAN },
213 { key::kEnableOnlineRevocationChecks,
214 prefs::kCertRevocationCheckingEnabled,
215 base::Value::TYPE_BOOLEAN },
216 { key::kRequireOnlineRevocationChecksForLocalAnchors,
217 prefs::kCertRevocationCheckingRequiredLocalAnchors,
218 base::Value::TYPE_BOOLEAN },
219 { key::kAuthSchemes,
220 prefs::kAuthSchemes,
221 base::Value::TYPE_STRING },
222 { key::kDisableAuthNegotiateCnameLookup,
223 prefs::kDisableAuthNegotiateCnameLookup,
224 base::Value::TYPE_BOOLEAN },
225 { key::kEnableAuthNegotiatePort,
226 prefs::kEnableAuthNegotiatePort,
227 base::Value::TYPE_BOOLEAN },
228 { key::kAuthServerWhitelist,
229 prefs::kAuthServerWhitelist,
230 base::Value::TYPE_STRING },
231 { key::kAuthNegotiateDelegateWhitelist,
232 prefs::kAuthNegotiateDelegateWhitelist,
233 base::Value::TYPE_STRING },
234 { key::kGSSAPILibraryName,
235 prefs::kGSSAPILibraryName,
236 base::Value::TYPE_STRING },
237 { key::kAllowCrossOriginAuthPrompt,
238 prefs::kAllowCrossOriginAuthPrompt,
239 base::Value::TYPE_BOOLEAN },
240 { key::kDisable3DAPIs,
241 prefs::kDisable3DAPIs,
242 base::Value::TYPE_BOOLEAN },
243 { key::kDisablePluginFinder,
244 prefs::kDisablePluginFinder,
245 base::Value::TYPE_BOOLEAN },
246 { key::kDiskCacheSize,
247 prefs::kDiskCacheSize,
248 base::Value::TYPE_INTEGER },
249 { key::kMediaCacheSize,
250 prefs::kMediaCacheSize,
251 base::Value::TYPE_INTEGER },
252 { key::kPolicyRefreshRate,
253 policy_prefs::kUserPolicyRefreshRate,
254 base::Value::TYPE_INTEGER },
255 { key::kDevicePolicyRefreshRate,
256 prefs::kDevicePolicyRefreshRate,
257 base::Value::TYPE_INTEGER },
258 { key::kDefaultBrowserSettingEnabled,
259 prefs::kDefaultBrowserSettingEnabled,
260 base::Value::TYPE_BOOLEAN },
261 { key::kCloudPrintProxyEnabled,
262 prefs::kCloudPrintProxyEnabled,
263 base::Value::TYPE_BOOLEAN },
264 { key::kCloudPrintSubmitEnabled,
265 prefs::kCloudPrintSubmitEnabled,
266 base::Value::TYPE_BOOLEAN },
267 { key::kTranslateEnabled,
268 prefs::kEnableTranslate,
269 base::Value::TYPE_BOOLEAN },
270 { key::kAllowOutdatedPlugins,
271 prefs::kPluginsAllowOutdated,
272 base::Value::TYPE_BOOLEAN },
273 { key::kAlwaysAuthorizePlugins,
274 prefs::kPluginsAlwaysAuthorize,
275 base::Value::TYPE_BOOLEAN },
276 { key::kBookmarkBarEnabled,
277 bookmarks::prefs::kShowBookmarkBar,
278 base::Value::TYPE_BOOLEAN },
279 { key::kEditBookmarksEnabled,
280 bookmarks::prefs::kEditBookmarksEnabled,
281 base::Value::TYPE_BOOLEAN },
282 { key::kShowAppsShortcutInBookmarkBar,
283 bookmarks::prefs::kShowAppsShortcutInBookmarkBar,
284 base::Value::TYPE_BOOLEAN },
285 { key::kAllowFileSelectionDialogs,
286 prefs::kAllowFileSelectionDialogs,
287 base::Value::TYPE_BOOLEAN },
288 { key::kImportBookmarks,
289 prefs::kImportBookmarks,
290 base::Value::TYPE_BOOLEAN },
291 { key::kImportHistory,
292 prefs::kImportHistory,
293 base::Value::TYPE_BOOLEAN },
294 { key::kImportHomepage,
295 prefs::kImportHomepage,
296 base::Value::TYPE_BOOLEAN },
297 { key::kImportSearchEngine,
298 prefs::kImportSearchEngine,
299 base::Value::TYPE_BOOLEAN },
300 { key::kImportSavedPasswords,
301 prefs::kImportSavedPasswords,
302 base::Value::TYPE_BOOLEAN },
303 { key::kImportAutofillFormData,
304 prefs::kImportAutofillFormData,
305 base::Value::TYPE_BOOLEAN },
306 { key::kMaxConnectionsPerProxy,
307 prefs::kMaxConnectionsPerProxy,
308 base::Value::TYPE_INTEGER },
309 { key::kURLWhitelist,
310 policy_prefs::kUrlWhitelist,
311 base::Value::TYPE_LIST },
312 { key::kRestrictSigninToPattern,
313 prefs::kGoogleServicesUsernamePattern,
314 base::Value::TYPE_STRING },
315 { key::kDefaultMediaStreamSetting,
316 prefs::kManagedDefaultMediaStreamSetting,
317 base::Value::TYPE_INTEGER },
318 { key::kDisableSafeBrowsingProceedAnyway,
319 prefs::kSafeBrowsingProceedAnywayDisabled,
320 base::Value::TYPE_BOOLEAN },
321 { key::kSafeBrowsingExtendedReportingOptInAllowed,
322 prefs::kSafeBrowsingExtendedReportingOptInAllowed,
323 base::Value::TYPE_BOOLEAN },
324 { key::kSSLErrorOverrideAllowed,
325 prefs::kSSLErrorOverrideAllowed,
326 base::Value::TYPE_BOOLEAN },
328 #if defined(ENABLE_SPELLCHECK)
329 { key::kSpellCheckServiceEnabled,
330 prefs::kSpellCheckUseSpellingService,
331 base::Value::TYPE_BOOLEAN },
332 #endif // defined(ENABLE_SPELLCHECK)
334 { key::kDisableScreenshots,
335 prefs::kDisableScreenshots,
336 base::Value::TYPE_BOOLEAN },
337 { key::kAudioCaptureAllowed,
338 prefs::kAudioCaptureAllowed,
339 base::Value::TYPE_BOOLEAN },
340 { key::kVideoCaptureAllowed,
341 prefs::kVideoCaptureAllowed,
342 base::Value::TYPE_BOOLEAN },
343 { key::kAudioCaptureAllowedUrls,
344 prefs::kAudioCaptureAllowedUrls,
345 base::Value::TYPE_LIST },
346 { key::kVideoCaptureAllowedUrls,
347 prefs::kVideoCaptureAllowedUrls,
348 base::Value::TYPE_LIST },
349 { key::kHideWebStoreIcon,
350 prefs::kHideWebStoreIcon,
351 base::Value::TYPE_BOOLEAN },
352 { key::kVariationsRestrictParameter,
353 prefs::kVariationsRestrictParameter,
354 base::Value::TYPE_STRING },
355 { key::kSupervisedUserCreationEnabled,
356 prefs::kSupervisedUserCreationAllowed,
357 base::Value::TYPE_BOOLEAN },
358 { key::kForceEphemeralProfiles,
359 prefs::kForceEphemeralProfiles,
360 base::Value::TYPE_BOOLEAN },
361 { key::kSSLVersionFallbackMin,
362 prefs::kSSLVersionFallbackMin,
363 base::Value::TYPE_STRING },
365 #if !defined(OS_MACOSX) && !defined(OS_IOS)
366 { key::kFullscreenAllowed,
367 prefs::kFullscreenAllowed,
368 base::Value::TYPE_BOOLEAN },
369 #if defined(ENABLE_EXTENSIONS)
370 { key::kFullscreenAllowed,
371 extensions::pref_names::kAppFullscreenAllowed,
372 base::Value::TYPE_BOOLEAN },
373 #endif // defined(ENABLE_EXTENSIONS)
374 #endif // !defined(OS_MACOSX) && !defined(OS_IOS)
376 #if defined(OS_CHROMEOS)
377 { key::kChromeOsLockOnIdleSuspend,
378 prefs::kEnableAutoScreenLock,
379 base::Value::TYPE_BOOLEAN },
380 { key::kChromeOsReleaseChannel,
381 prefs::kChromeOsReleaseChannel,
382 base::Value::TYPE_STRING },
383 { key::kDriveDisabled,
384 prefs::kDisableDrive,
385 base::Value::TYPE_BOOLEAN },
386 { key::kDriveDisabledOverCellular,
387 prefs::kDisableDriveOverCellular,
388 base::Value::TYPE_BOOLEAN },
389 { key::kExternalStorageDisabled,
390 prefs::kExternalStorageDisabled,
391 base::Value::TYPE_BOOLEAN },
392 { key::kAudioOutputAllowed,
393 chromeos::prefs::kAudioOutputAllowed,
394 base::Value::TYPE_BOOLEAN },
395 { key::kShowLogoutButtonInTray,
396 prefs::kShowLogoutButtonInTray,
397 base::Value::TYPE_BOOLEAN },
398 { key::kShelfAutoHideBehavior,
399 prefs::kShelfAutoHideBehaviorLocal,
400 base::Value::TYPE_STRING },
401 { key::kSessionLengthLimit,
402 prefs::kSessionLengthLimit,
403 base::Value::TYPE_INTEGER },
404 { key::kWaitForInitialUserActivity,
405 prefs::kSessionWaitForInitialUserActivity,
406 base::Value::TYPE_BOOLEAN },
407 { key::kPowerManagementUsesAudioActivity,
408 prefs::kPowerUseAudioActivity,
409 base::Value::TYPE_BOOLEAN },
410 { key::kPowerManagementUsesVideoActivity,
411 prefs::kPowerUseVideoActivity,
412 base::Value::TYPE_BOOLEAN },
413 { key::kAllowScreenWakeLocks,
414 prefs::kPowerAllowScreenWakeLocks,
415 base::Value::TYPE_BOOLEAN },
416 { key::kWaitForInitialUserActivity,
417 prefs::kPowerWaitForInitialUserActivity,
418 base::Value::TYPE_BOOLEAN },
419 { key::kTermsOfServiceURL,
420 prefs::kTermsOfServiceURL,
421 base::Value::TYPE_STRING },
422 { key::kShowAccessibilityOptionsInSystemTrayMenu,
423 prefs::kShouldAlwaysShowAccessibilityMenu,
424 base::Value::TYPE_BOOLEAN },
425 { key::kLargeCursorEnabled,
426 prefs::kAccessibilityLargeCursorEnabled,
427 base::Value::TYPE_BOOLEAN },
428 { key::kSpokenFeedbackEnabled,
429 prefs::kAccessibilitySpokenFeedbackEnabled,
430 base::Value::TYPE_BOOLEAN },
431 { key::kHighContrastEnabled,
432 prefs::kAccessibilityHighContrastEnabled,
433 base::Value::TYPE_BOOLEAN },
434 { key::kVirtualKeyboardEnabled,
435 prefs::kAccessibilityVirtualKeyboardEnabled,
436 base::Value::TYPE_BOOLEAN },
437 { key::kDeviceLoginScreenDefaultLargeCursorEnabled,
438 NULL,
439 base::Value::TYPE_BOOLEAN },
440 { key::kDeviceLoginScreenDefaultSpokenFeedbackEnabled,
441 NULL,
442 base::Value::TYPE_BOOLEAN },
443 { key::kDeviceLoginScreenDefaultHighContrastEnabled,
444 NULL,
445 base::Value::TYPE_BOOLEAN },
446 { key::kDeviceLoginScreenDefaultVirtualKeyboardEnabled,
447 NULL,
448 base::Value::TYPE_BOOLEAN },
449 { key::kRebootAfterUpdate,
450 prefs::kRebootAfterUpdate,
451 base::Value::TYPE_BOOLEAN },
452 { key::kAttestationEnabledForUser,
453 prefs::kAttestationEnabled,
454 base::Value::TYPE_BOOLEAN },
455 { key::kChromeOsMultiProfileUserBehavior,
456 prefs::kMultiProfileUserBehavior,
457 base::Value::TYPE_STRING },
458 { key::kKeyboardDefaultToFunctionKeys,
459 prefs::kLanguageSendFunctionKeys,
460 base::Value::TYPE_BOOLEAN },
461 { key::kTouchVirtualKeyboardEnabled,
462 prefs::kTouchVirtualKeyboardEnabled,
463 base::Value::TYPE_BOOLEAN },
464 { key::kEasyUnlockAllowed,
465 prefs::kEasyUnlockAllowed,
466 base::Value::TYPE_BOOLEAN },
467 { key::kCaptivePortalAuthenticationIgnoresProxy,
468 prefs::kCaptivePortalAuthenticationIgnoresProxy,
469 base::Value::TYPE_BOOLEAN },
470 { key::kForceMaximizeOnFirstRun,
471 prefs::kForceMaximizeOnFirstRun,
472 base::Value::TYPE_BOOLEAN },
473 #endif // defined(OS_CHROMEOS)
475 #if !defined(OS_MACOSX) && !defined(OS_CHROMEOS)
476 { key::kBackgroundModeEnabled,
477 prefs::kBackgroundModeEnabled,
478 base::Value::TYPE_BOOLEAN },
479 #endif // !defined(OS_MACOSX) && !defined(OS_CHROMEOS)
481 #if defined(OS_ANDROID)
482 { key::kDataCompressionProxyEnabled,
483 data_reduction_proxy::prefs::kDataReductionProxyEnabled,
484 base::Value::TYPE_BOOLEAN },
485 #endif // defined(OS_ANDROID)
487 #if !defined(OS_CHROMEOS) && !defined(OS_ANDROID) && !defined(OS_IOS)
488 { key::kNativeMessagingUserLevelHosts,
489 extensions::pref_names::kNativeMessagingUserLevelHosts,
490 base::Value::TYPE_BOOLEAN },
491 { key::kBrowserGuestModeEnabled,
492 prefs::kBrowserGuestModeEnabled,
493 base::Value::TYPE_BOOLEAN },
494 { key::kBrowserAddPersonEnabled,
495 prefs::kBrowserAddPersonEnabled,
496 base::Value::TYPE_BOOLEAN },
497 #endif // !defined(OS_CHROMEOS) && !defined(OS_ANDROID) && !defined(OS_IOS)
500 class ForceSafeSearchPolicyHandler : public TypeCheckingPolicyHandler {
501 public:
502 ForceSafeSearchPolicyHandler()
503 : TypeCheckingPolicyHandler(key::kForceSafeSearch,
504 base::Value::TYPE_BOOLEAN) {}
505 ~ForceSafeSearchPolicyHandler() override {}
507 // ConfigurationPolicyHandler implementation:
508 void ApplyPolicySettings(const PolicyMap& policies,
509 PrefValueMap* prefs) override {
510 // If either of the new GoogleSafeSearch or YouTubeSafetyMode policies is
511 // defined, then this one should be ignored. crbug.com/476908
512 // Note: Those policies are declared in kSimplePolicyMap above.
513 if (policies.GetValue(key::kForceGoogleSafeSearch) ||
514 policies.GetValue(key::kForceYouTubeSafetyMode)) {
515 return;
517 const base::Value* value = policies.GetValue(policy_name());
518 if (value) {
519 prefs->SetValue(prefs::kForceGoogleSafeSearch, value->DeepCopy());
520 prefs->SetValue(prefs::kForceYouTubeSafetyMode, value->DeepCopy());
524 private:
525 DISALLOW_COPY_AND_ASSIGN(ForceSafeSearchPolicyHandler);
528 #if defined(ENABLE_EXTENSIONS)
529 void GetExtensionAllowedTypesMap(
530 ScopedVector<StringMappingListPolicyHandler::MappingEntry>* result) {
531 // Mapping from extension type names to Manifest::Type.
532 for (size_t index = 0;
533 index < extensions::schema_constants::kAllowedTypesMapSize;
534 ++index) {
535 const extensions::schema_constants::AllowedTypesMapEntry& entry =
536 extensions::schema_constants::kAllowedTypesMap[index];
537 result->push_back(new StringMappingListPolicyHandler::MappingEntry(
538 entry.name,
539 scoped_ptr<base::Value>(
540 new base::FundamentalValue(entry.manifest_type))));
543 #endif
545 #if !defined(OS_IOS)
546 void GetDeprecatedFeaturesMap(
547 ScopedVector<StringMappingListPolicyHandler::MappingEntry>* result) {
548 // Maps feature tags as specified in policy to the corresponding switch to
549 // re-enable them.
551 #endif // !defined(OS_IOS)
553 } // namespace
555 void PopulatePolicyHandlerParameters(PolicyHandlerParameters* parameters) {
556 #if defined(OS_CHROMEOS)
557 if (user_manager::UserManager::IsInitialized()) {
558 const user_manager::User* user =
559 user_manager::UserManager::Get()->GetActiveUser();
560 if (user)
561 parameters->user_id_hash = user->username_hash();
563 #endif
566 scoped_ptr<ConfigurationPolicyHandlerList> BuildHandlerList(
567 const Schema& chrome_schema) {
568 scoped_ptr<ConfigurationPolicyHandlerList> handlers(
569 new ConfigurationPolicyHandlerList(
570 base::Bind(&PopulatePolicyHandlerParameters),
571 base::Bind(&GetChromePolicyDetails)));
572 for (size_t i = 0; i < arraysize(kSimplePolicyMap); ++i) {
573 handlers->AddHandler(make_scoped_ptr(new SimplePolicyHandler(
574 kSimplePolicyMap[i].policy_name, kSimplePolicyMap[i].preference_path,
575 kSimplePolicyMap[i].value_type)));
578 handlers->AddHandler(make_scoped_ptr(new AutofillPolicyHandler()));
579 handlers->AddHandler(make_scoped_ptr(new DefaultSearchPolicyHandler()));
580 handlers->AddHandler(make_scoped_ptr(new ForceSafeSearchPolicyHandler()));
581 handlers->AddHandler(make_scoped_ptr(new IncognitoModePolicyHandler()));
582 handlers->AddHandler(
583 make_scoped_ptr(new ManagedBookmarksPolicyHandler(chrome_schema)));
584 handlers->AddHandler(make_scoped_ptr(new ProxyPolicyHandler()));
585 handlers->AddHandler(make_scoped_ptr(new URLBlacklistPolicyHandler()));
587 #if defined(OS_ANDROID)
588 handlers->AddHandler(
589 make_scoped_ptr(new ContextualSearchPolicyHandlerAndroid()));
590 #endif
592 #if !defined(OS_IOS)
593 handlers->AddHandler(
594 make_scoped_ptr(new FileSelectionDialogsPolicyHandler()));
595 handlers->AddHandler(make_scoped_ptr(new JavascriptPolicyHandler()));
596 handlers->AddHandler(make_scoped_ptr(new NetworkPredictionPolicyHandler()));
597 handlers->AddHandler(make_scoped_ptr(new RestoreOnStartupPolicyHandler()));
598 handlers->AddHandler(make_scoped_ptr(new browser_sync::SyncPolicyHandler()));
600 handlers->AddHandler(make_scoped_ptr(new StringMappingListPolicyHandler(
601 key::kEnableDeprecatedWebPlatformFeatures,
602 prefs::kEnableDeprecatedWebPlatformFeatures,
603 base::Bind(GetDeprecatedFeaturesMap))));
604 #endif // !defined(OS_IOS)
606 #if defined(ENABLE_EXTENSIONS)
607 handlers->AddHandler(
608 make_scoped_ptr(new extensions::ExtensionListPolicyHandler(
609 key::kExtensionInstallWhitelist,
610 extensions::pref_names::kInstallAllowList, false)));
611 handlers->AddHandler(
612 make_scoped_ptr(new extensions::ExtensionListPolicyHandler(
613 key::kExtensionInstallBlacklist,
614 extensions::pref_names::kInstallDenyList, true)));
615 handlers->AddHandler(make_scoped_ptr(
616 new extensions::ExtensionInstallForcelistPolicyHandler()));
617 handlers->AddHandler(
618 make_scoped_ptr(new extensions::ExtensionURLPatternListPolicyHandler(
619 key::kExtensionInstallSources,
620 extensions::pref_names::kAllowedInstallSites)));
621 handlers->AddHandler(make_scoped_ptr(new StringMappingListPolicyHandler(
622 key::kExtensionAllowedTypes, extensions::pref_names::kAllowedTypes,
623 base::Bind(GetExtensionAllowedTypesMap))));
624 handlers->AddHandler(make_scoped_ptr(
625 new extensions::ExtensionSettingsPolicyHandler(chrome_schema)));
626 #endif
628 #if !defined(OS_CHROMEOS) && !defined(OS_ANDROID) && !defined(OS_IOS)
629 handlers->AddHandler(make_scoped_ptr(new DiskCacheDirPolicyHandler()));
631 handlers->AddHandler(
632 make_scoped_ptr(new extensions::NativeMessagingHostListPolicyHandler(
633 key::kNativeMessagingWhitelist,
634 extensions::pref_names::kNativeMessagingWhitelist, false)));
635 handlers->AddHandler(
636 make_scoped_ptr(new extensions::NativeMessagingHostListPolicyHandler(
637 key::kNativeMessagingBlacklist,
638 extensions::pref_names::kNativeMessagingBlacklist, true)));
639 #endif // !defined(OS_CHROMEOS) && !defined(OS_ANDROID) && !defined(OS_IOS)
641 #if !defined(OS_ANDROID) && !defined(OS_IOS)
642 handlers->AddHandler(make_scoped_ptr(new DownloadDirPolicyHandler));
644 handlers->AddHandler(make_scoped_ptr(new SimpleSchemaValidatingPolicyHandler(
645 key::kRegisteredProtocolHandlers,
646 prefs::kPolicyRegisteredProtocolHandlers, chrome_schema, SCHEMA_STRICT,
647 SimpleSchemaValidatingPolicyHandler::RECOMMENDED_ALLOWED,
648 SimpleSchemaValidatingPolicyHandler::MANDATORY_PROHIBITED)));
649 #endif
651 #if defined(OS_CHROMEOS)
652 handlers->AddHandler(
653 make_scoped_ptr(new extensions::ExtensionListPolicyHandler(
654 key::kAttestationExtensionWhitelist,
655 prefs::kAttestationExtensionWhitelist, false)));
656 handlers->AddHandler(make_scoped_ptr(
657 NetworkConfigurationPolicyHandler::CreateForDevicePolicy()));
658 handlers->AddHandler(make_scoped_ptr(
659 NetworkConfigurationPolicyHandler::CreateForUserPolicy()));
660 handlers->AddHandler(make_scoped_ptr(new PinnedLauncherAppsPolicyHandler()));
661 handlers->AddHandler(make_scoped_ptr(new ScreenMagnifierPolicyHandler()));
662 handlers->AddHandler(make_scoped_ptr(
663 new LoginScreenPowerManagementPolicyHandler(chrome_schema)));
665 ScopedVector<ConfigurationPolicyHandler>
666 power_management_idle_legacy_policies;
667 power_management_idle_legacy_policies.push_back(
668 new IntRangePolicyHandler(key::kScreenDimDelayAC,
669 prefs::kPowerAcScreenDimDelayMs,
671 INT_MAX,
672 true));
673 power_management_idle_legacy_policies.push_back(
674 new IntRangePolicyHandler(key::kScreenOffDelayAC,
675 prefs::kPowerAcScreenOffDelayMs,
677 INT_MAX,
678 true));
679 power_management_idle_legacy_policies.push_back(
680 new IntRangePolicyHandler(key::kIdleWarningDelayAC,
681 prefs::kPowerAcIdleWarningDelayMs,
683 INT_MAX,
684 true));
685 power_management_idle_legacy_policies.push_back(new IntRangePolicyHandler(
686 key::kIdleDelayAC, prefs::kPowerAcIdleDelayMs, 0, INT_MAX, true));
687 power_management_idle_legacy_policies.push_back(
688 new IntRangePolicyHandler(key::kScreenDimDelayBattery,
689 prefs::kPowerBatteryScreenDimDelayMs,
691 INT_MAX,
692 true));
693 power_management_idle_legacy_policies.push_back(
694 new IntRangePolicyHandler(key::kScreenOffDelayBattery,
695 prefs::kPowerBatteryScreenOffDelayMs,
697 INT_MAX,
698 true));
699 power_management_idle_legacy_policies.push_back(
700 new IntRangePolicyHandler(key::kIdleWarningDelayBattery,
701 prefs::kPowerBatteryIdleWarningDelayMs,
703 INT_MAX,
704 true));
705 power_management_idle_legacy_policies.push_back(
706 new IntRangePolicyHandler(key::kIdleDelayBattery,
707 prefs::kPowerBatteryIdleDelayMs,
709 INT_MAX,
710 true));
711 power_management_idle_legacy_policies.push_back(new IntRangePolicyHandler(
712 key::kIdleActionAC,
713 prefs::kPowerAcIdleAction,
714 chromeos::PowerPolicyController::ACTION_SUSPEND,
715 chromeos::PowerPolicyController::ACTION_DO_NOTHING,
716 false));
717 power_management_idle_legacy_policies.push_back(new IntRangePolicyHandler(
718 key::kIdleActionBattery,
719 prefs::kPowerBatteryIdleAction,
720 chromeos::PowerPolicyController::ACTION_SUSPEND,
721 chromeos::PowerPolicyController::ACTION_DO_NOTHING,
722 false));
723 power_management_idle_legacy_policies.push_back(
724 new DeprecatedIdleActionHandler());
726 ScopedVector<ConfigurationPolicyHandler> screen_lock_legacy_policies;
727 screen_lock_legacy_policies.push_back(
728 new IntRangePolicyHandler(key::kScreenLockDelayAC,
729 prefs::kPowerAcScreenLockDelayMs,
731 INT_MAX,
732 true));
733 screen_lock_legacy_policies.push_back(
734 new IntRangePolicyHandler(key::kScreenLockDelayBattery,
735 prefs::kPowerBatteryScreenLockDelayMs,
737 INT_MAX,
738 true));
740 handlers->AddHandler(make_scoped_ptr(new IntRangePolicyHandler(
741 key::kSAMLOfflineSigninTimeLimit, prefs::kSAMLOfflineSigninTimeLimit, -1,
742 INT_MAX, true)));
743 handlers->AddHandler(make_scoped_ptr(new IntRangePolicyHandler(
744 key::kLidCloseAction, prefs::kPowerLidClosedAction,
745 chromeos::PowerPolicyController::ACTION_SUSPEND,
746 chromeos::PowerPolicyController::ACTION_DO_NOTHING, false)));
747 handlers->AddHandler(make_scoped_ptr(new IntPercentageToDoublePolicyHandler(
748 key::kPresentationScreenDimDelayScale,
749 prefs::kPowerPresentationScreenDimDelayFactor, 100, INT_MAX, true)));
750 handlers->AddHandler(make_scoped_ptr(new IntPercentageToDoublePolicyHandler(
751 key::kUserActivityScreenDimDelayScale,
752 prefs::kPowerUserActivityScreenDimDelayFactor, 100, INT_MAX, true)));
753 handlers->AddHandler(make_scoped_ptr(new IntRangePolicyHandler(
754 key::kUptimeLimit, prefs::kUptimeLimit, 3600, INT_MAX, true)));
755 handlers->AddHandler(make_scoped_ptr(new IntRangePolicyHandler(
756 key::kDeviceLoginScreenDefaultScreenMagnifierType, NULL, 0,
757 ui::MAGNIFIER_FULL, false)));
758 // TODO(binjin): Remove LegacyPoliciesDeprecatingPolicyHandler for these two
759 // policies once deprecation of legacy power management policies is done.
760 // http://crbug.com/346229
761 handlers->AddHandler(
762 make_scoped_ptr(new LegacyPoliciesDeprecatingPolicyHandler(
763 power_management_idle_legacy_policies.Pass(),
764 make_scoped_ptr(
765 new PowerManagementIdleSettingsPolicyHandler(chrome_schema)))));
766 handlers->AddHandler(
767 make_scoped_ptr(new LegacyPoliciesDeprecatingPolicyHandler(
768 screen_lock_legacy_policies.Pass(),
769 make_scoped_ptr(new ScreenLockDelayPolicyHandler(chrome_schema)))));
770 handlers->AddHandler(
771 make_scoped_ptr(new ExternalDataPolicyHandler(key::kUserAvatarImage)));
772 handlers->AddHandler(
773 make_scoped_ptr(new ExternalDataPolicyHandler(key::kWallpaperImage)));
774 handlers->AddHandler(make_scoped_ptr(new SimpleSchemaValidatingPolicyHandler(
775 key::kSessionLocales, NULL, chrome_schema, SCHEMA_STRICT,
776 SimpleSchemaValidatingPolicyHandler::RECOMMENDED_ALLOWED,
777 SimpleSchemaValidatingPolicyHandler::MANDATORY_PROHIBITED)));
778 #endif // defined(OS_CHROMEOS)
780 return handlers.Pass();
783 } // namespace policy