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"
9 #include "base/memory/scoped_vector.h"
10 #include "base/values.h"
11 #include "chrome/browser/net/proxy_policy_handler.h"
12 #include "chrome/browser/policy/managed_bookmarks_policy_handler.h"
13 #include "chrome/browser/profiles/incognito_mode_policy_handler.h"
14 #include "chrome/common/chrome_switches.h"
15 #include "chrome/common/pref_names.h"
16 #include "components/password_manager/core/common/password_manager_pref_names.h"
17 #include "components/policy/core/browser/autofill_policy_handler.h"
18 #include "components/policy/core/browser/configuration_policy_handler.h"
19 #include "components/policy/core/browser/configuration_policy_handler_list.h"
20 #include "components/policy/core/browser/configuration_policy_handler_parameters.h"
21 #include "components/policy/core/browser/url_blacklist_policy_handler.h"
22 #include "components/policy/core/common/policy_details.h"
23 #include "components/policy/core/common/policy_map.h"
24 #include "components/policy/core/common/policy_pref_names.h"
25 #include "components/policy/core/common/schema.h"
26 #include "components/search_engines/default_search_policy_handler.h"
27 #include "components/translate/core/common/translate_pref_names.h"
28 #include "policy/policy_constants.h"
31 #include "chrome/browser/net/disk_cache_dir_policy_handler.h"
32 #include "chrome/browser/policy/file_selection_dialogs_policy_handler.h"
33 #include "chrome/browser/policy/javascript_policy_handler.h"
34 #include "chrome/browser/policy/network_prediction_policy_handler.h"
35 #include "chrome/browser/sessions/restore_on_startup_policy_handler.h"
36 #include "chrome/browser/sync/sync_policy_handler.h"
39 #if defined(OS_CHROMEOS)
40 #include "ash/magnifier/magnifier_constants.h"
41 #include "chrome/browser/chromeos/policy/configuration_policy_handler_chromeos.h"
42 #include "chromeos/dbus/power_policy_controller.h"
43 #include "components/user_manager/user.h"
44 #include "components/user_manager/user_manager.h"
47 #if !defined(OS_ANDROID) && !defined(OS_IOS)
48 #include "chrome/browser/download/download_dir_policy_handler.h"
51 #if !defined(OS_MACOSX) && !defined(OS_IOS)
52 #include "apps/pref_names.h"
55 #if defined(ENABLE_EXTENSIONS)
56 #include "chrome/browser/extensions/api/messaging/native_messaging_policy_handler.h"
57 #include "chrome/browser/extensions/policy_handlers.h"
58 #include "extensions/browser/pref_names.h"
59 #include "extensions/common/manifest.h"
66 // List of policy types to preference names. This is used for simple policies
67 // that directly map to a single preference.
68 const PolicyToPreferenceMapEntry kSimplePolicyMap[] = {
69 { key::kHomepageLocation,
71 base::Value::TYPE_STRING },
72 { key::kHomepageIsNewTabPage,
73 prefs::kHomePageIsNewTabPage,
74 base::Value::TYPE_BOOLEAN },
75 { key::kRestoreOnStartupURLs,
76 prefs::kURLsToRestoreOnStartup,
77 base::Value::TYPE_LIST },
78 { key::kAlternateErrorPagesEnabled,
79 prefs::kAlternateErrorPagesEnabled,
80 base::Value::TYPE_BOOLEAN },
81 { key::kSearchSuggestEnabled,
82 prefs::kSearchSuggestEnabled,
83 base::Value::TYPE_BOOLEAN },
84 { key::kBuiltInDnsClientEnabled,
85 prefs::kBuiltInDnsClientEnabled,
86 base::Value::TYPE_BOOLEAN },
87 { key::kWPADQuickCheckEnabled,
88 prefs::kQuickCheckEnabled,
89 base::Value::TYPE_BOOLEAN },
92 base::Value::TYPE_BOOLEAN },
93 { key::kSafeBrowsingEnabled,
94 prefs::kSafeBrowsingEnabled,
95 base::Value::TYPE_BOOLEAN },
96 { key::kForceSafeSearch,
97 prefs::kForceSafeSearch,
98 base::Value::TYPE_BOOLEAN },
99 { key::kPasswordManagerEnabled,
100 password_manager::prefs::kPasswordManagerSavingEnabled,
101 base::Value::TYPE_BOOLEAN },
102 { key::kPasswordManagerAllowShowPasswords,
103 password_manager::prefs::kPasswordManagerAllowShowPasswords,
104 base::Value::TYPE_BOOLEAN },
105 { key::kPrintingEnabled,
106 prefs::kPrintingEnabled,
107 base::Value::TYPE_BOOLEAN },
108 { key::kDisablePrintPreview,
109 prefs::kPrintPreviewDisabled,
110 base::Value::TYPE_BOOLEAN },
111 { key::kMetricsReportingEnabled,
112 prefs::kMetricsReportingEnabled,
113 base::Value::TYPE_BOOLEAN },
114 { key::kApplicationLocaleValue,
115 prefs::kApplicationLocale,
116 base::Value::TYPE_STRING },
117 { key::kDisabledPlugins,
118 prefs::kPluginsDisabledPlugins,
119 base::Value::TYPE_LIST },
120 { key::kDisabledPluginsExceptions,
121 prefs::kPluginsDisabledPluginsExceptions,
122 base::Value::TYPE_LIST },
123 { key::kEnabledPlugins,
124 prefs::kPluginsEnabledPlugins,
125 base::Value::TYPE_LIST },
126 { key::kShowHomeButton,
127 prefs::kShowHomeButton,
128 base::Value::TYPE_BOOLEAN },
129 { key::kSavingBrowserHistoryDisabled,
130 prefs::kSavingBrowserHistoryDisabled,
131 base::Value::TYPE_BOOLEAN },
132 { key::kAllowDeletingBrowserHistory,
133 prefs::kAllowDeletingBrowserHistory,
134 base::Value::TYPE_BOOLEAN },
135 { key::kDeveloperToolsDisabled,
136 prefs::kDevToolsDisabled,
137 base::Value::TYPE_BOOLEAN },
138 { key::kBlockThirdPartyCookies,
139 prefs::kBlockThirdPartyCookies,
140 base::Value::TYPE_BOOLEAN },
141 { key::kDefaultCookiesSetting,
142 prefs::kManagedDefaultCookiesSetting,
143 base::Value::TYPE_INTEGER },
144 { key::kDefaultImagesSetting,
145 prefs::kManagedDefaultImagesSetting,
146 base::Value::TYPE_INTEGER },
147 { key::kDefaultPluginsSetting,
148 prefs::kManagedDefaultPluginsSetting,
149 base::Value::TYPE_INTEGER },
150 { key::kDefaultPopupsSetting,
151 prefs::kManagedDefaultPopupsSetting,
152 base::Value::TYPE_INTEGER },
153 { key::kAutoSelectCertificateForUrls,
154 prefs::kManagedAutoSelectCertificateForUrls,
155 base::Value::TYPE_LIST },
156 { key::kCookiesAllowedForUrls,
157 prefs::kManagedCookiesAllowedForUrls,
158 base::Value::TYPE_LIST },
159 { key::kCookiesBlockedForUrls,
160 prefs::kManagedCookiesBlockedForUrls,
161 base::Value::TYPE_LIST },
162 { key::kCookiesSessionOnlyForUrls,
163 prefs::kManagedCookiesSessionOnlyForUrls,
164 base::Value::TYPE_LIST },
165 { key::kImagesAllowedForUrls,
166 prefs::kManagedImagesAllowedForUrls,
167 base::Value::TYPE_LIST },
168 { key::kImagesBlockedForUrls,
169 prefs::kManagedImagesBlockedForUrls,
170 base::Value::TYPE_LIST },
171 { key::kJavaScriptAllowedForUrls,
172 prefs::kManagedJavaScriptAllowedForUrls,
173 base::Value::TYPE_LIST },
174 { key::kJavaScriptBlockedForUrls,
175 prefs::kManagedJavaScriptBlockedForUrls,
176 base::Value::TYPE_LIST },
177 { key::kPluginsAllowedForUrls,
178 prefs::kManagedPluginsAllowedForUrls,
179 base::Value::TYPE_LIST },
180 { key::kPluginsBlockedForUrls,
181 prefs::kManagedPluginsBlockedForUrls,
182 base::Value::TYPE_LIST },
183 { key::kPopupsAllowedForUrls,
184 prefs::kManagedPopupsAllowedForUrls,
185 base::Value::TYPE_LIST },
186 { key::kPopupsBlockedForUrls,
187 prefs::kManagedPopupsBlockedForUrls,
188 base::Value::TYPE_LIST },
189 { key::kNotificationsAllowedForUrls,
190 prefs::kManagedNotificationsAllowedForUrls,
191 base::Value::TYPE_LIST },
192 { key::kNotificationsBlockedForUrls,
193 prefs::kManagedNotificationsBlockedForUrls,
194 base::Value::TYPE_LIST },
195 { key::kDefaultNotificationsSetting,
196 prefs::kManagedDefaultNotificationsSetting,
197 base::Value::TYPE_INTEGER },
198 { key::kDefaultGeolocationSetting,
199 prefs::kManagedDefaultGeolocationSetting,
200 base::Value::TYPE_INTEGER },
201 { key::kSigninAllowed,
202 prefs::kSigninAllowed,
203 base::Value::TYPE_BOOLEAN },
204 { key::kDisableSSLRecordSplitting,
205 prefs::kDisableSSLRecordSplitting,
206 base::Value::TYPE_BOOLEAN },
207 { key::kEnableOnlineRevocationChecks,
208 prefs::kCertRevocationCheckingEnabled,
209 base::Value::TYPE_BOOLEAN },
210 { key::kRequireOnlineRevocationChecksForLocalAnchors,
211 prefs::kCertRevocationCheckingRequiredLocalAnchors,
212 base::Value::TYPE_BOOLEAN },
215 base::Value::TYPE_STRING },
216 { key::kDisableAuthNegotiateCnameLookup,
217 prefs::kDisableAuthNegotiateCnameLookup,
218 base::Value::TYPE_BOOLEAN },
219 { key::kEnableAuthNegotiatePort,
220 prefs::kEnableAuthNegotiatePort,
221 base::Value::TYPE_BOOLEAN },
222 { key::kAuthServerWhitelist,
223 prefs::kAuthServerWhitelist,
224 base::Value::TYPE_STRING },
225 { key::kAuthNegotiateDelegateWhitelist,
226 prefs::kAuthNegotiateDelegateWhitelist,
227 base::Value::TYPE_STRING },
228 { key::kGSSAPILibraryName,
229 prefs::kGSSAPILibraryName,
230 base::Value::TYPE_STRING },
231 { key::kAllowCrossOriginAuthPrompt,
232 prefs::kAllowCrossOriginAuthPrompt,
233 base::Value::TYPE_BOOLEAN },
234 { key::kDisable3DAPIs,
235 prefs::kDisable3DAPIs,
236 base::Value::TYPE_BOOLEAN },
237 { key::kDisablePluginFinder,
238 prefs::kDisablePluginFinder,
239 base::Value::TYPE_BOOLEAN },
240 { key::kDiskCacheSize,
241 prefs::kDiskCacheSize,
242 base::Value::TYPE_INTEGER },
243 { key::kMediaCacheSize,
244 prefs::kMediaCacheSize,
245 base::Value::TYPE_INTEGER },
246 { key::kPolicyRefreshRate,
247 policy_prefs::kUserPolicyRefreshRate,
248 base::Value::TYPE_INTEGER },
249 { key::kDevicePolicyRefreshRate,
250 prefs::kDevicePolicyRefreshRate,
251 base::Value::TYPE_INTEGER },
252 { key::kDefaultBrowserSettingEnabled,
253 prefs::kDefaultBrowserSettingEnabled,
254 base::Value::TYPE_BOOLEAN },
255 { key::kRemoteAccessHostFirewallTraversal,
256 prefs::kRemoteAccessHostFirewallTraversal,
257 base::Value::TYPE_BOOLEAN },
258 { key::kRemoteAccessHostRequireTwoFactor,
259 prefs::kRemoteAccessHostRequireTwoFactor,
260 base::Value::TYPE_BOOLEAN },
261 { key::kRemoteAccessHostDomain,
262 prefs::kRemoteAccessHostDomain,
263 base::Value::TYPE_STRING },
264 { key::kRemoteAccessHostTalkGadgetPrefix,
265 prefs::kRemoteAccessHostTalkGadgetPrefix,
266 base::Value::TYPE_STRING },
267 { key::kRemoteAccessHostRequireCurtain,
268 prefs::kRemoteAccessHostRequireCurtain,
269 base::Value::TYPE_BOOLEAN },
270 { key::kRemoteAccessHostAllowClientPairing,
271 prefs::kRemoteAccessHostAllowClientPairing,
272 base::Value::TYPE_BOOLEAN },
273 { key::kRemoteAccessHostAllowGnubbyAuth,
274 prefs::kRemoteAccessHostAllowGnubbyAuth,
275 base::Value::TYPE_BOOLEAN },
276 { key::kRemoteAccessHostAllowRelayedConnection,
277 prefs::kRemoteAccessHostAllowRelayedConnection,
278 base::Value::TYPE_BOOLEAN },
279 { key::kRemoteAccessHostUdpPortRange,
280 prefs::kRemoteAccessHostUdpPortRange,
281 base::Value::TYPE_STRING },
282 { key::kCloudPrintProxyEnabled,
283 prefs::kCloudPrintProxyEnabled,
284 base::Value::TYPE_BOOLEAN },
285 { key::kCloudPrintSubmitEnabled,
286 prefs::kCloudPrintSubmitEnabled,
287 base::Value::TYPE_BOOLEAN },
288 { key::kTranslateEnabled,
289 prefs::kEnableTranslate,
290 base::Value::TYPE_BOOLEAN },
291 { key::kAllowOutdatedPlugins,
292 prefs::kPluginsAllowOutdated,
293 base::Value::TYPE_BOOLEAN },
294 { key::kAlwaysAuthorizePlugins,
295 prefs::kPluginsAlwaysAuthorize,
296 base::Value::TYPE_BOOLEAN },
297 { key::kBookmarkBarEnabled,
298 prefs::kShowBookmarkBar,
299 base::Value::TYPE_BOOLEAN },
300 { key::kEditBookmarksEnabled,
301 prefs::kEditBookmarksEnabled,
302 base::Value::TYPE_BOOLEAN },
303 { key::kShowAppsShortcutInBookmarkBar,
304 prefs::kShowAppsShortcutInBookmarkBar,
305 base::Value::TYPE_BOOLEAN },
306 { key::kAllowFileSelectionDialogs,
307 prefs::kAllowFileSelectionDialogs,
308 base::Value::TYPE_BOOLEAN },
309 { key::kImportBookmarks,
310 prefs::kImportBookmarks,
311 base::Value::TYPE_BOOLEAN },
312 { key::kImportHistory,
313 prefs::kImportHistory,
314 base::Value::TYPE_BOOLEAN },
315 { key::kImportHomepage,
316 prefs::kImportHomepage,
317 base::Value::TYPE_BOOLEAN },
318 { key::kImportSearchEngine,
319 prefs::kImportSearchEngine,
320 base::Value::TYPE_BOOLEAN },
321 { key::kImportSavedPasswords,
322 prefs::kImportSavedPasswords,
323 base::Value::TYPE_BOOLEAN },
324 { key::kMaxConnectionsPerProxy,
325 prefs::kMaxConnectionsPerProxy,
326 base::Value::TYPE_INTEGER },
327 { key::kURLWhitelist,
328 policy_prefs::kUrlWhitelist,
329 base::Value::TYPE_LIST },
330 { key::kRestrictSigninToPattern,
331 prefs::kGoogleServicesUsernamePattern,
332 base::Value::TYPE_STRING },
333 { key::kDefaultMediaStreamSetting,
334 prefs::kManagedDefaultMediaStreamSetting,
335 base::Value::TYPE_INTEGER },
336 { key::kDisableSafeBrowsingProceedAnyway,
337 prefs::kSafeBrowsingProceedAnywayDisabled,
338 base::Value::TYPE_BOOLEAN },
339 { key::kSpellCheckServiceEnabled,
340 prefs::kSpellCheckUseSpellingService,
341 base::Value::TYPE_BOOLEAN },
342 { key::kDisableScreenshots,
343 prefs::kDisableScreenshots,
344 base::Value::TYPE_BOOLEAN },
345 { key::kAudioCaptureAllowed,
346 prefs::kAudioCaptureAllowed,
347 base::Value::TYPE_BOOLEAN },
348 { key::kVideoCaptureAllowed,
349 prefs::kVideoCaptureAllowed,
350 base::Value::TYPE_BOOLEAN },
351 { key::kAudioCaptureAllowedUrls,
352 prefs::kAudioCaptureAllowedUrls,
353 base::Value::TYPE_LIST },
354 { key::kVideoCaptureAllowedUrls,
355 prefs::kVideoCaptureAllowedUrls,
356 base::Value::TYPE_LIST },
357 { key::kHideWebStoreIcon,
358 prefs::kHideWebStoreIcon,
359 base::Value::TYPE_BOOLEAN },
360 { key::kVariationsRestrictParameter,
361 prefs::kVariationsRestrictParameter,
362 base::Value::TYPE_STRING },
363 { key::kSupervisedUserCreationEnabled,
364 prefs::kSupervisedUserCreationAllowed,
365 base::Value::TYPE_BOOLEAN },
366 { key::kForceEphemeralProfiles,
367 prefs::kForceEphemeralProfiles,
368 base::Value::TYPE_BOOLEAN },
370 #if !defined(OS_MACOSX) && !defined(OS_IOS)
371 { key::kFullscreenAllowed,
372 prefs::kFullscreenAllowed,
373 base::Value::TYPE_BOOLEAN },
374 #if defined(ENABLE_EXTENSIONS)
375 { key::kFullscreenAllowed,
376 apps::prefs::kAppFullscreenAllowed,
377 base::Value::TYPE_BOOLEAN },
378 #endif // defined(ENABLE_EXTENSIONS)
379 #endif // !defined(OS_MACOSX) && !defined(OS_IOS)
381 #if defined(OS_CHROMEOS)
382 { key::kChromeOsLockOnIdleSuspend,
383 prefs::kEnableAutoScreenLock,
384 base::Value::TYPE_BOOLEAN },
385 { key::kChromeOsReleaseChannel,
386 prefs::kChromeOsReleaseChannel,
387 base::Value::TYPE_STRING },
388 { key::kDriveDisabled,
389 prefs::kDisableDrive,
390 base::Value::TYPE_BOOLEAN },
391 { key::kDriveDisabledOverCellular,
392 prefs::kDisableDriveOverCellular,
393 base::Value::TYPE_BOOLEAN },
394 { key::kExternalStorageDisabled,
395 prefs::kExternalStorageDisabled,
396 base::Value::TYPE_BOOLEAN },
397 { key::kAudioOutputAllowed,
398 prefs::kAudioOutputAllowed,
399 base::Value::TYPE_BOOLEAN },
400 { key::kShowLogoutButtonInTray,
401 prefs::kShowLogoutButtonInTray,
402 base::Value::TYPE_BOOLEAN },
403 { key::kShelfAutoHideBehavior,
404 prefs::kShelfAutoHideBehaviorLocal,
405 base::Value::TYPE_STRING },
406 { key::kSessionLengthLimit,
407 prefs::kSessionLengthLimit,
408 base::Value::TYPE_INTEGER },
409 { key::kWaitForInitialUserActivity,
410 prefs::kSessionWaitForInitialUserActivity,
411 base::Value::TYPE_BOOLEAN },
412 { key::kPowerManagementUsesAudioActivity,
413 prefs::kPowerUseAudioActivity,
414 base::Value::TYPE_BOOLEAN },
415 { key::kPowerManagementUsesVideoActivity,
416 prefs::kPowerUseVideoActivity,
417 base::Value::TYPE_BOOLEAN },
418 { key::kAllowScreenWakeLocks,
419 prefs::kPowerAllowScreenWakeLocks,
420 base::Value::TYPE_BOOLEAN },
421 { key::kWaitForInitialUserActivity,
422 prefs::kPowerWaitForInitialUserActivity,
423 base::Value::TYPE_BOOLEAN },
424 { key::kTermsOfServiceURL,
425 prefs::kTermsOfServiceURL,
426 base::Value::TYPE_STRING },
427 { key::kShowAccessibilityOptionsInSystemTrayMenu,
428 prefs::kShouldAlwaysShowAccessibilityMenu,
429 base::Value::TYPE_BOOLEAN },
430 { key::kLargeCursorEnabled,
431 prefs::kAccessibilityLargeCursorEnabled,
432 base::Value::TYPE_BOOLEAN },
433 { key::kSpokenFeedbackEnabled,
434 prefs::kAccessibilitySpokenFeedbackEnabled,
435 base::Value::TYPE_BOOLEAN },
436 { key::kHighContrastEnabled,
437 prefs::kAccessibilityHighContrastEnabled,
438 base::Value::TYPE_BOOLEAN },
439 { key::kVirtualKeyboardEnabled,
440 prefs::kAccessibilityVirtualKeyboardEnabled,
441 base::Value::TYPE_BOOLEAN },
442 { key::kDeviceLoginScreenDefaultLargeCursorEnabled,
444 base::Value::TYPE_BOOLEAN },
445 { key::kDeviceLoginScreenDefaultSpokenFeedbackEnabled,
447 base::Value::TYPE_BOOLEAN },
448 { key::kDeviceLoginScreenDefaultHighContrastEnabled,
450 base::Value::TYPE_BOOLEAN },
451 { key::kDeviceLoginScreenDefaultVirtualKeyboardEnabled,
453 base::Value::TYPE_BOOLEAN },
454 { key::kRebootAfterUpdate,
455 prefs::kRebootAfterUpdate,
456 base::Value::TYPE_BOOLEAN },
457 { key::kAttestationEnabledForUser,
458 prefs::kAttestationEnabled,
459 base::Value::TYPE_BOOLEAN },
460 { key::kChromeOsMultiProfileUserBehavior,
461 prefs::kMultiProfileUserBehavior,
462 base::Value::TYPE_STRING },
463 { key::kKeyboardDefaultToFunctionKeys,
464 prefs::kLanguageSendFunctionKeys,
465 base::Value::TYPE_BOOLEAN },
466 { key::kTouchVirtualKeyboardEnabled,
467 prefs::kTouchVirtualKeyboardEnabled,
468 base::Value::TYPE_BOOLEAN },
469 { key::kEasyUnlockAllowed,
470 prefs::kEasyUnlockAllowed,
471 base::Value::TYPE_BOOLEAN },
472 #endif // defined(OS_CHROMEOS)
474 #if !defined(OS_MACOSX) && !defined(OS_CHROMEOS)
475 { key::kBackgroundModeEnabled,
476 prefs::kBackgroundModeEnabled,
477 base::Value::TYPE_BOOLEAN },
478 #endif // !defined(OS_MACOSX) && !defined(OS_CHROMEOS)
480 #if defined(OS_ANDROID)
481 { key::kDataCompressionProxyEnabled,
482 data_reduction_proxy::prefs::kDataReductionProxyEnabled,
483 base::Value::TYPE_BOOLEAN },
484 #endif // defined(OS_ANDROID)
486 #if !defined(OS_CHROMEOS) && !defined(OS_ANDROID) && !defined(OS_IOS)
487 { key::kNativeMessagingUserLevelHosts,
488 extensions::pref_names::kNativeMessagingUserLevelHosts,
489 base::Value::TYPE_BOOLEAN },
490 { key::kBrowserGuestModeEnabled,
491 prefs::kBrowserGuestModeEnabled,
492 base::Value::TYPE_BOOLEAN },
493 #endif // !defined(OS_CHROMEOS) && !defined(OS_ANDROID) && !defined(OS_IOS)
496 #if defined(ENABLE_EXTENSIONS)
497 void GetExtensionAllowedTypesMap(
498 ScopedVector<StringMappingListPolicyHandler::MappingEntry>* result) {
499 // Mapping from extension type names to Manifest::Type.
500 result->push_back(new StringMappingListPolicyHandler::MappingEntry(
501 "extension", scoped_ptr<base::Value>(new base::FundamentalValue(
502 extensions::Manifest::TYPE_EXTENSION))));
503 result->push_back(new StringMappingListPolicyHandler::MappingEntry(
504 "theme", scoped_ptr<base::Value>(new base::FundamentalValue(
505 extensions::Manifest::TYPE_THEME))));
506 result->push_back(new StringMappingListPolicyHandler::MappingEntry(
507 "user_script", scoped_ptr<base::Value>(new base::FundamentalValue(
508 extensions::Manifest::TYPE_USER_SCRIPT))));
509 result->push_back(new StringMappingListPolicyHandler::MappingEntry(
510 "hosted_app", scoped_ptr<base::Value>(new base::FundamentalValue(
511 extensions::Manifest::TYPE_HOSTED_APP))));
512 result->push_back(new StringMappingListPolicyHandler::MappingEntry(
513 "legacy_packaged_app", scoped_ptr<base::Value>(new base::FundamentalValue(
514 extensions::Manifest::TYPE_LEGACY_PACKAGED_APP))));
515 result->push_back(new StringMappingListPolicyHandler::MappingEntry(
516 "platform_app", scoped_ptr<base::Value>(new base::FundamentalValue(
517 extensions::Manifest::TYPE_PLATFORM_APP))));
522 void GetDeprecatedFeaturesMap(
523 ScopedVector<StringMappingListPolicyHandler::MappingEntry>* result) {
524 // Maps feature tags as specified in policy to the corresponding switch to
526 // TODO: Remove after 2015-04-30 per http://crbug.com/374782.
527 result->push_back(new StringMappingListPolicyHandler::MappingEntry(
528 "ShowModalDialog_EffectiveUntil20150430",
529 scoped_ptr<base::Value>(new base::StringValue(
530 switches::kEnableShowModalDialog))));
532 #endif // !defined(OS_IOS)
536 void PopulatePolicyHandlerParameters(PolicyHandlerParameters* parameters) {
537 #if defined(OS_CHROMEOS)
538 if (user_manager::UserManager::IsInitialized()) {
539 const user_manager::User* user =
540 user_manager::UserManager::Get()->GetActiveUser();
542 parameters->user_id_hash = user->username_hash();
547 scoped_ptr<ConfigurationPolicyHandlerList> BuildHandlerList(
548 const Schema& chrome_schema) {
549 scoped_ptr<ConfigurationPolicyHandlerList> handlers(
550 new ConfigurationPolicyHandlerList(
551 base::Bind(&PopulatePolicyHandlerParameters),
552 base::Bind(&GetChromePolicyDetails)));
553 for (size_t i = 0; i < arraysize(kSimplePolicyMap); ++i) {
554 handlers->AddHandler(make_scoped_ptr<ConfigurationPolicyHandler>(
555 new SimplePolicyHandler(kSimplePolicyMap[i].policy_name,
556 kSimplePolicyMap[i].preference_path,
557 kSimplePolicyMap[i].value_type)));
560 handlers->AddHandler(make_scoped_ptr<ConfigurationPolicyHandler>(
561 new AutofillPolicyHandler()));
562 handlers->AddHandler(make_scoped_ptr<ConfigurationPolicyHandler>(
563 new DefaultSearchPolicyHandler()));
564 handlers->AddHandler(make_scoped_ptr<ConfigurationPolicyHandler>(
565 new IncognitoModePolicyHandler()));
566 handlers->AddHandler(make_scoped_ptr<ConfigurationPolicyHandler>(
567 new ManagedBookmarksPolicyHandler(chrome_schema)));
568 handlers->AddHandler(make_scoped_ptr<ConfigurationPolicyHandler>(
569 new ProxyPolicyHandler()));
570 handlers->AddHandler(make_scoped_ptr<ConfigurationPolicyHandler>(
571 new URLBlacklistPolicyHandler()));
574 handlers->AddHandler(make_scoped_ptr<ConfigurationPolicyHandler>(
575 new FileSelectionDialogsPolicyHandler()));
576 handlers->AddHandler(make_scoped_ptr<ConfigurationPolicyHandler>(
577 new JavascriptPolicyHandler()));
578 handlers->AddHandler(make_scoped_ptr<ConfigurationPolicyHandler>(
579 new NetworkPredictionPolicyHandler()));
580 handlers->AddHandler(make_scoped_ptr<ConfigurationPolicyHandler>(
581 new RestoreOnStartupPolicyHandler()));
582 handlers->AddHandler(make_scoped_ptr<ConfigurationPolicyHandler>(
583 new browser_sync::SyncPolicyHandler()));
585 handlers->AddHandler(make_scoped_ptr<ConfigurationPolicyHandler>(
586 new StringMappingListPolicyHandler(
587 key::kEnableDeprecatedWebPlatformFeatures,
588 prefs::kEnableDeprecatedWebPlatformFeatures,
589 base::Bind(GetDeprecatedFeaturesMap))));
590 #endif // !defined(OS_IOS)
592 #if defined(ENABLE_EXTENSIONS)
593 handlers->AddHandler(make_scoped_ptr<ConfigurationPolicyHandler>(
594 new extensions::ExtensionListPolicyHandler(
595 key::kExtensionInstallWhitelist,
596 extensions::pref_names::kInstallAllowList,
598 handlers->AddHandler(make_scoped_ptr<ConfigurationPolicyHandler>(
599 new extensions::ExtensionListPolicyHandler(
600 key::kExtensionInstallBlacklist,
601 extensions::pref_names::kInstallDenyList,
603 handlers->AddHandler(make_scoped_ptr<ConfigurationPolicyHandler>(
604 new extensions::ExtensionInstallForcelistPolicyHandler()));
605 handlers->AddHandler(make_scoped_ptr<ConfigurationPolicyHandler>(
606 new extensions::ExtensionURLPatternListPolicyHandler(
607 key::kExtensionInstallSources,
608 extensions::pref_names::kAllowedInstallSites)));
609 handlers->AddHandler(make_scoped_ptr<ConfigurationPolicyHandler>(
610 new StringMappingListPolicyHandler(
611 key::kExtensionAllowedTypes,
612 extensions::pref_names::kAllowedTypes,
613 base::Bind(GetExtensionAllowedTypesMap))));
616 #if !defined(OS_CHROMEOS) && !defined(OS_ANDROID) && !defined(OS_IOS)
617 handlers->AddHandler(make_scoped_ptr<ConfigurationPolicyHandler>(
618 new DiskCacheDirPolicyHandler()));
620 handlers->AddHandler(make_scoped_ptr<ConfigurationPolicyHandler>(
621 new extensions::NativeMessagingHostListPolicyHandler(
622 key::kNativeMessagingWhitelist,
623 extensions::pref_names::kNativeMessagingWhitelist,
625 handlers->AddHandler(make_scoped_ptr<ConfigurationPolicyHandler>(
626 new extensions::NativeMessagingHostListPolicyHandler(
627 key::kNativeMessagingBlacklist,
628 extensions::pref_names::kNativeMessagingBlacklist,
630 #endif // !defined(OS_CHROMEOS) && !defined(OS_ANDROID) && !defined(OS_IOS)
632 #if !defined(OS_ANDROID) && !defined(OS_IOS)
633 handlers->AddHandler(make_scoped_ptr<ConfigurationPolicyHandler>(
634 new DownloadDirPolicyHandler));
636 handlers->AddHandler(make_scoped_ptr<ConfigurationPolicyHandler>(
637 new SimpleSchemaValidatingPolicyHandler(
638 key::kRegisteredProtocolHandlers,
639 prefs::kPolicyRegisteredProtocolHandlers,
642 SimpleSchemaValidatingPolicyHandler::RECOMMENDED_ALLOWED,
643 SimpleSchemaValidatingPolicyHandler::MANDATORY_PROHIBITED)));
646 #if defined(OS_CHROMEOS)
647 handlers->AddHandler(make_scoped_ptr<ConfigurationPolicyHandler>(
648 new extensions::ExtensionListPolicyHandler(
649 key::kAttestationExtensionWhitelist,
650 prefs::kAttestationExtensionWhitelist,
652 handlers->AddHandler(make_scoped_ptr<ConfigurationPolicyHandler>(
653 NetworkConfigurationPolicyHandler::CreateForDevicePolicy()));
654 handlers->AddHandler(make_scoped_ptr<ConfigurationPolicyHandler>(
655 NetworkConfigurationPolicyHandler::CreateForUserPolicy()));
656 handlers->AddHandler(make_scoped_ptr<ConfigurationPolicyHandler>(
657 new PinnedLauncherAppsPolicyHandler()));
658 handlers->AddHandler(make_scoped_ptr<ConfigurationPolicyHandler>(
659 new ScreenMagnifierPolicyHandler()));
660 handlers->AddHandler(make_scoped_ptr<ConfigurationPolicyHandler>(
661 new LoginScreenPowerManagementPolicyHandler(chrome_schema)));
663 ScopedVector<ConfigurationPolicyHandler>
664 power_management_idle_legacy_policies;
665 power_management_idle_legacy_policies.push_back(
666 new IntRangePolicyHandler(key::kScreenDimDelayAC,
667 prefs::kPowerAcScreenDimDelayMs,
671 power_management_idle_legacy_policies.push_back(
672 new IntRangePolicyHandler(key::kScreenOffDelayAC,
673 prefs::kPowerAcScreenOffDelayMs,
677 power_management_idle_legacy_policies.push_back(
678 new IntRangePolicyHandler(key::kIdleWarningDelayAC,
679 prefs::kPowerAcIdleWarningDelayMs,
683 power_management_idle_legacy_policies.push_back(new IntRangePolicyHandler(
684 key::kIdleDelayAC, prefs::kPowerAcIdleDelayMs, 0, INT_MAX, true));
685 power_management_idle_legacy_policies.push_back(
686 new IntRangePolicyHandler(key::kScreenDimDelayBattery,
687 prefs::kPowerBatteryScreenDimDelayMs,
691 power_management_idle_legacy_policies.push_back(
692 new IntRangePolicyHandler(key::kScreenOffDelayBattery,
693 prefs::kPowerBatteryScreenOffDelayMs,
697 power_management_idle_legacy_policies.push_back(
698 new IntRangePolicyHandler(key::kIdleWarningDelayBattery,
699 prefs::kPowerBatteryIdleWarningDelayMs,
703 power_management_idle_legacy_policies.push_back(
704 new IntRangePolicyHandler(key::kIdleDelayBattery,
705 prefs::kPowerBatteryIdleDelayMs,
709 power_management_idle_legacy_policies.push_back(new IntRangePolicyHandler(
711 prefs::kPowerAcIdleAction,
712 chromeos::PowerPolicyController::ACTION_SUSPEND,
713 chromeos::PowerPolicyController::ACTION_DO_NOTHING,
715 power_management_idle_legacy_policies.push_back(new IntRangePolicyHandler(
716 key::kIdleActionBattery,
717 prefs::kPowerBatteryIdleAction,
718 chromeos::PowerPolicyController::ACTION_SUSPEND,
719 chromeos::PowerPolicyController::ACTION_DO_NOTHING,
721 power_management_idle_legacy_policies.push_back(
722 new DeprecatedIdleActionHandler());
724 ScopedVector<ConfigurationPolicyHandler> screen_lock_legacy_policies;
725 screen_lock_legacy_policies.push_back(
726 new IntRangePolicyHandler(key::kScreenLockDelayAC,
727 prefs::kPowerAcScreenLockDelayMs,
731 screen_lock_legacy_policies.push_back(
732 new IntRangePolicyHandler(key::kScreenLockDelayBattery,
733 prefs::kPowerBatteryScreenLockDelayMs,
738 handlers->AddHandler(make_scoped_ptr<ConfigurationPolicyHandler>(
739 new IntRangePolicyHandler(key::kSAMLOfflineSigninTimeLimit,
740 prefs::kSAMLOfflineSigninTimeLimit,
744 handlers->AddHandler(
745 make_scoped_ptr<ConfigurationPolicyHandler>(new IntRangePolicyHandler(
746 key::kLidCloseAction,
747 prefs::kPowerLidClosedAction,
748 chromeos::PowerPolicyController::ACTION_SUSPEND,
749 chromeos::PowerPolicyController::ACTION_DO_NOTHING,
751 handlers->AddHandler(make_scoped_ptr<ConfigurationPolicyHandler>(
752 new IntPercentageToDoublePolicyHandler(
753 key::kPresentationScreenDimDelayScale,
754 prefs::kPowerPresentationScreenDimDelayFactor,
758 handlers->AddHandler(make_scoped_ptr<ConfigurationPolicyHandler>(
759 new IntPercentageToDoublePolicyHandler(
760 key::kUserActivityScreenDimDelayScale,
761 prefs::kPowerUserActivityScreenDimDelayFactor,
765 handlers->AddHandler(
766 make_scoped_ptr<ConfigurationPolicyHandler>(new IntRangePolicyHandler(
767 key::kUptimeLimit, prefs::kUptimeLimit, 3600, INT_MAX, true)));
768 handlers->AddHandler(
769 make_scoped_ptr<ConfigurationPolicyHandler>(new IntRangePolicyHandler(
770 key::kDeviceLoginScreenDefaultScreenMagnifierType,
775 // TODO(binjin): Remove LegacyPoliciesDeprecatingPolicyHandler for these two
776 // policies once deprecation of legacy power management policies is done.
777 // http://crbug.com/346229
778 handlers->AddHandler(make_scoped_ptr<ConfigurationPolicyHandler>(
779 new LegacyPoliciesDeprecatingPolicyHandler(
780 power_management_idle_legacy_policies.Pass(),
781 make_scoped_ptr<SchemaValidatingPolicyHandler>(
782 new PowerManagementIdleSettingsPolicyHandler(chrome_schema)))));
783 handlers->AddHandler(make_scoped_ptr<ConfigurationPolicyHandler>(
784 new LegacyPoliciesDeprecatingPolicyHandler(
785 screen_lock_legacy_policies.Pass(),
786 make_scoped_ptr<SchemaValidatingPolicyHandler>(
787 new ScreenLockDelayPolicyHandler(chrome_schema)))));
788 handlers->AddHandler(make_scoped_ptr<ConfigurationPolicyHandler>(
789 new ExternalDataPolicyHandler(key::kUserAvatarImage)));
790 handlers->AddHandler(make_scoped_ptr<ConfigurationPolicyHandler>(
791 new ExternalDataPolicyHandler(key::kWallpaperImage)));
792 handlers->AddHandler(make_scoped_ptr<ConfigurationPolicyHandler>(
793 new SimpleSchemaValidatingPolicyHandler(
794 key::kSessionLocales,
798 SimpleSchemaValidatingPolicyHandler::RECOMMENDED_ALLOWED,
799 SimpleSchemaValidatingPolicyHandler::MANDATORY_PROHIBITED)));
800 #endif // defined(OS_CHROMEOS)
802 return handlers.Pass();
805 } // namespace policy