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/browser/search_engines/default_search_policy_handler.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/translate/core/common/translate_pref_names.h"
27 #include "grit/components_strings.h"
28 #include "policy/policy_constants.h"
31 #include "chrome/browser/extensions/api/messaging/native_messaging_policy_handler.h"
32 #include "chrome/browser/extensions/policy_handlers.h"
33 #include "chrome/browser/net/disk_cache_dir_policy_handler.h"
34 #include "chrome/browser/policy/file_selection_dialogs_policy_handler.h"
35 #include "chrome/browser/policy/javascript_policy_handler.h"
36 #include "chrome/browser/sessions/restore_on_startup_policy_handler.h"
37 #include "chrome/browser/sync/sync_policy_handler.h"
38 #include "extensions/browser/pref_names.h"
39 #include "extensions/common/manifest.h"
42 #if defined(OS_CHROMEOS)
43 #include "ash/magnifier/magnifier_constants.h"
44 #include "chrome/browser/chromeos/login/users/user.h"
45 #include "chrome/browser/chromeos/login/users/user_manager.h"
46 #include "chrome/browser/chromeos/policy/configuration_policy_handler_chromeos.h"
47 #include "chromeos/dbus/power_policy_controller.h"
50 #if !defined(OS_ANDROID) && !defined(OS_IOS)
51 #include "chrome/browser/download/download_dir_policy_handler.h"
54 #if !defined(OS_MACOSX) && !defined(OS_IOS)
55 #include "apps/pref_names.h"
62 // List of policy types to preference names. This is used for simple policies
63 // that directly map to a single preference.
64 const PolicyToPreferenceMapEntry kSimplePolicyMap
[] = {
65 { key::kHomepageLocation
,
67 base::Value::TYPE_STRING
},
68 { key::kHomepageIsNewTabPage
,
69 prefs::kHomePageIsNewTabPage
,
70 base::Value::TYPE_BOOLEAN
},
71 { key::kRestoreOnStartupURLs
,
72 prefs::kURLsToRestoreOnStartup
,
73 base::Value::TYPE_LIST
},
74 { key::kAlternateErrorPagesEnabled
,
75 prefs::kAlternateErrorPagesEnabled
,
76 base::Value::TYPE_BOOLEAN
},
77 { key::kSearchSuggestEnabled
,
78 prefs::kSearchSuggestEnabled
,
79 base::Value::TYPE_BOOLEAN
},
80 { key::kDnsPrefetchingEnabled
,
81 prefs::kNetworkPredictionEnabled
,
82 base::Value::TYPE_BOOLEAN
},
83 { key::kBuiltInDnsClientEnabled
,
84 prefs::kBuiltInDnsClientEnabled
,
85 base::Value::TYPE_BOOLEAN
},
86 { key::kWPADQuickCheckEnabled
,
87 prefs::kQuickCheckEnabled
,
88 base::Value::TYPE_BOOLEAN
},
91 base::Value::TYPE_BOOLEAN
},
92 { key::kSafeBrowsingEnabled
,
93 prefs::kSafeBrowsingEnabled
,
94 base::Value::TYPE_BOOLEAN
},
95 { key::kForceSafeSearch
,
96 prefs::kForceSafeSearch
,
97 base::Value::TYPE_BOOLEAN
},
98 { key::kPasswordManagerEnabled
,
99 password_manager::prefs::kPasswordManagerEnabled
,
100 base::Value::TYPE_BOOLEAN
},
101 { key::kPasswordManagerAllowShowPasswords
,
102 password_manager::prefs::kPasswordManagerAllowShowPasswords
,
103 base::Value::TYPE_BOOLEAN
},
104 { key::kPrintingEnabled
,
105 prefs::kPrintingEnabled
,
106 base::Value::TYPE_BOOLEAN
},
107 { key::kDisablePrintPreview
,
108 prefs::kPrintPreviewDisabled
,
109 base::Value::TYPE_BOOLEAN
},
110 { key::kMetricsReportingEnabled
,
111 prefs::kMetricsReportingEnabled
,
112 base::Value::TYPE_BOOLEAN
},
113 { key::kApplicationLocaleValue
,
114 prefs::kApplicationLocale
,
115 base::Value::TYPE_STRING
},
116 { key::kDisabledPlugins
,
117 prefs::kPluginsDisabledPlugins
,
118 base::Value::TYPE_LIST
},
119 { key::kDisabledPluginsExceptions
,
120 prefs::kPluginsDisabledPluginsExceptions
,
121 base::Value::TYPE_LIST
},
122 { key::kEnabledPlugins
,
123 prefs::kPluginsEnabledPlugins
,
124 base::Value::TYPE_LIST
},
125 { key::kShowHomeButton
,
126 prefs::kShowHomeButton
,
127 base::Value::TYPE_BOOLEAN
},
128 { key::kSavingBrowserHistoryDisabled
,
129 prefs::kSavingBrowserHistoryDisabled
,
130 base::Value::TYPE_BOOLEAN
},
131 { key::kAllowDeletingBrowserHistory
,
132 prefs::kAllowDeletingBrowserHistory
,
133 base::Value::TYPE_BOOLEAN
},
134 { key::kDeveloperToolsDisabled
,
135 prefs::kDevToolsDisabled
,
136 base::Value::TYPE_BOOLEAN
},
137 { key::kBlockThirdPartyCookies
,
138 prefs::kBlockThirdPartyCookies
,
139 base::Value::TYPE_BOOLEAN
},
140 { key::kDefaultCookiesSetting
,
141 prefs::kManagedDefaultCookiesSetting
,
142 base::Value::TYPE_INTEGER
},
143 { key::kDefaultImagesSetting
,
144 prefs::kManagedDefaultImagesSetting
,
145 base::Value::TYPE_INTEGER
},
146 { key::kDefaultPluginsSetting
,
147 prefs::kManagedDefaultPluginsSetting
,
148 base::Value::TYPE_INTEGER
},
149 { key::kDefaultPopupsSetting
,
150 prefs::kManagedDefaultPopupsSetting
,
151 base::Value::TYPE_INTEGER
},
152 { key::kAutoSelectCertificateForUrls
,
153 prefs::kManagedAutoSelectCertificateForUrls
,
154 base::Value::TYPE_LIST
},
155 { key::kCookiesAllowedForUrls
,
156 prefs::kManagedCookiesAllowedForUrls
,
157 base::Value::TYPE_LIST
},
158 { key::kCookiesBlockedForUrls
,
159 prefs::kManagedCookiesBlockedForUrls
,
160 base::Value::TYPE_LIST
},
161 { key::kCookiesSessionOnlyForUrls
,
162 prefs::kManagedCookiesSessionOnlyForUrls
,
163 base::Value::TYPE_LIST
},
164 { key::kImagesAllowedForUrls
,
165 prefs::kManagedImagesAllowedForUrls
,
166 base::Value::TYPE_LIST
},
167 { key::kImagesBlockedForUrls
,
168 prefs::kManagedImagesBlockedForUrls
,
169 base::Value::TYPE_LIST
},
170 { key::kJavaScriptAllowedForUrls
,
171 prefs::kManagedJavaScriptAllowedForUrls
,
172 base::Value::TYPE_LIST
},
173 { key::kJavaScriptBlockedForUrls
,
174 prefs::kManagedJavaScriptBlockedForUrls
,
175 base::Value::TYPE_LIST
},
176 { key::kPluginsAllowedForUrls
,
177 prefs::kManagedPluginsAllowedForUrls
,
178 base::Value::TYPE_LIST
},
179 { key::kPluginsBlockedForUrls
,
180 prefs::kManagedPluginsBlockedForUrls
,
181 base::Value::TYPE_LIST
},
182 { key::kPopupsAllowedForUrls
,
183 prefs::kManagedPopupsAllowedForUrls
,
184 base::Value::TYPE_LIST
},
185 { key::kPopupsBlockedForUrls
,
186 prefs::kManagedPopupsBlockedForUrls
,
187 base::Value::TYPE_LIST
},
188 { key::kNotificationsAllowedForUrls
,
189 prefs::kManagedNotificationsAllowedForUrls
,
190 base::Value::TYPE_LIST
},
191 { key::kNotificationsBlockedForUrls
,
192 prefs::kManagedNotificationsBlockedForUrls
,
193 base::Value::TYPE_LIST
},
194 { key::kDefaultNotificationsSetting
,
195 prefs::kManagedDefaultNotificationsSetting
,
196 base::Value::TYPE_INTEGER
},
197 { key::kDefaultGeolocationSetting
,
198 prefs::kManagedDefaultGeolocationSetting
,
199 base::Value::TYPE_INTEGER
},
200 { key::kSigninAllowed
,
201 prefs::kSigninAllowed
,
202 base::Value::TYPE_BOOLEAN
},
203 { key::kDisableSSLRecordSplitting
,
204 prefs::kDisableSSLRecordSplitting
,
205 base::Value::TYPE_BOOLEAN
},
206 { key::kEnableOnlineRevocationChecks
,
207 prefs::kCertRevocationCheckingEnabled
,
208 base::Value::TYPE_BOOLEAN
},
209 { key::kRequireOnlineRevocationChecksForLocalAnchors
,
210 prefs::kCertRevocationCheckingRequiredLocalAnchors
,
211 base::Value::TYPE_BOOLEAN
},
214 base::Value::TYPE_STRING
},
215 { key::kDisableAuthNegotiateCnameLookup
,
216 prefs::kDisableAuthNegotiateCnameLookup
,
217 base::Value::TYPE_BOOLEAN
},
218 { key::kEnableAuthNegotiatePort
,
219 prefs::kEnableAuthNegotiatePort
,
220 base::Value::TYPE_BOOLEAN
},
221 { key::kAuthServerWhitelist
,
222 prefs::kAuthServerWhitelist
,
223 base::Value::TYPE_STRING
},
224 { key::kAuthNegotiateDelegateWhitelist
,
225 prefs::kAuthNegotiateDelegateWhitelist
,
226 base::Value::TYPE_STRING
},
227 { key::kGSSAPILibraryName
,
228 prefs::kGSSAPILibraryName
,
229 base::Value::TYPE_STRING
},
230 { key::kAllowCrossOriginAuthPrompt
,
231 prefs::kAllowCrossOriginAuthPrompt
,
232 base::Value::TYPE_BOOLEAN
},
233 { key::kDisable3DAPIs
,
234 prefs::kDisable3DAPIs
,
235 base::Value::TYPE_BOOLEAN
},
236 { key::kDisablePluginFinder
,
237 prefs::kDisablePluginFinder
,
238 base::Value::TYPE_BOOLEAN
},
239 { key::kDiskCacheSize
,
240 prefs::kDiskCacheSize
,
241 base::Value::TYPE_INTEGER
},
242 { key::kMediaCacheSize
,
243 prefs::kMediaCacheSize
,
244 base::Value::TYPE_INTEGER
},
245 { key::kPolicyRefreshRate
,
246 policy_prefs::kUserPolicyRefreshRate
,
247 base::Value::TYPE_INTEGER
},
248 { key::kDevicePolicyRefreshRate
,
249 prefs::kDevicePolicyRefreshRate
,
250 base::Value::TYPE_INTEGER
},
251 { key::kDefaultBrowserSettingEnabled
,
252 prefs::kDefaultBrowserSettingEnabled
,
253 base::Value::TYPE_BOOLEAN
},
254 { key::kRemoteAccessHostFirewallTraversal
,
255 prefs::kRemoteAccessHostFirewallTraversal
,
256 base::Value::TYPE_BOOLEAN
},
257 { key::kRemoteAccessHostRequireTwoFactor
,
258 prefs::kRemoteAccessHostRequireTwoFactor
,
259 base::Value::TYPE_BOOLEAN
},
260 { key::kRemoteAccessHostDomain
,
261 prefs::kRemoteAccessHostDomain
,
262 base::Value::TYPE_STRING
},
263 { key::kRemoteAccessHostTalkGadgetPrefix
,
264 prefs::kRemoteAccessHostTalkGadgetPrefix
,
265 base::Value::TYPE_STRING
},
266 { key::kRemoteAccessHostRequireCurtain
,
267 prefs::kRemoteAccessHostRequireCurtain
,
268 base::Value::TYPE_BOOLEAN
},
269 { key::kRemoteAccessHostAllowClientPairing
,
270 prefs::kRemoteAccessHostAllowClientPairing
,
271 base::Value::TYPE_BOOLEAN
},
272 { key::kRemoteAccessHostAllowGnubbyAuth
,
273 prefs::kRemoteAccessHostAllowGnubbyAuth
,
274 base::Value::TYPE_BOOLEAN
},
275 { key::kRemoteAccessHostAllowRelayedConnection
,
276 prefs::kRemoteAccessHostAllowRelayedConnection
,
277 base::Value::TYPE_BOOLEAN
},
278 { key::kRemoteAccessHostUdpPortRange
,
279 prefs::kRemoteAccessHostUdpPortRange
,
280 base::Value::TYPE_STRING
},
281 { key::kCloudPrintProxyEnabled
,
282 prefs::kCloudPrintProxyEnabled
,
283 base::Value::TYPE_BOOLEAN
},
284 { key::kCloudPrintSubmitEnabled
,
285 prefs::kCloudPrintSubmitEnabled
,
286 base::Value::TYPE_BOOLEAN
},
287 { key::kTranslateEnabled
,
288 prefs::kEnableTranslate
,
289 base::Value::TYPE_BOOLEAN
},
290 { key::kAllowOutdatedPlugins
,
291 prefs::kPluginsAllowOutdated
,
292 base::Value::TYPE_BOOLEAN
},
293 { key::kAlwaysAuthorizePlugins
,
294 prefs::kPluginsAlwaysAuthorize
,
295 base::Value::TYPE_BOOLEAN
},
296 { key::kBookmarkBarEnabled
,
297 prefs::kShowBookmarkBar
,
298 base::Value::TYPE_BOOLEAN
},
299 { key::kEditBookmarksEnabled
,
300 prefs::kEditBookmarksEnabled
,
301 base::Value::TYPE_BOOLEAN
},
302 { key::kAllowFileSelectionDialogs
,
303 prefs::kAllowFileSelectionDialogs
,
304 base::Value::TYPE_BOOLEAN
},
305 { key::kImportBookmarks
,
306 prefs::kImportBookmarks
,
307 base::Value::TYPE_BOOLEAN
},
308 { key::kImportHistory
,
309 prefs::kImportHistory
,
310 base::Value::TYPE_BOOLEAN
},
311 { key::kImportHomepage
,
312 prefs::kImportHomepage
,
313 base::Value::TYPE_BOOLEAN
},
314 { key::kImportSearchEngine
,
315 prefs::kImportSearchEngine
,
316 base::Value::TYPE_BOOLEAN
},
317 { key::kImportSavedPasswords
,
318 prefs::kImportSavedPasswords
,
319 base::Value::TYPE_BOOLEAN
},
320 { key::kMaxConnectionsPerProxy
,
321 prefs::kMaxConnectionsPerProxy
,
322 base::Value::TYPE_INTEGER
},
323 { key::kURLWhitelist
,
324 policy_prefs::kUrlWhitelist
,
325 base::Value::TYPE_LIST
},
326 { key::kRestrictSigninToPattern
,
327 prefs::kGoogleServicesUsernamePattern
,
328 base::Value::TYPE_STRING
},
329 { key::kDefaultMediaStreamSetting
,
330 prefs::kManagedDefaultMediaStreamSetting
,
331 base::Value::TYPE_INTEGER
},
332 { key::kDisableSafeBrowsingProceedAnyway
,
333 prefs::kSafeBrowsingProceedAnywayDisabled
,
334 base::Value::TYPE_BOOLEAN
},
335 { key::kSpellCheckServiceEnabled
,
336 prefs::kSpellCheckUseSpellingService
,
337 base::Value::TYPE_BOOLEAN
},
338 { key::kDisableScreenshots
,
339 prefs::kDisableScreenshots
,
340 base::Value::TYPE_BOOLEAN
},
341 { key::kAudioCaptureAllowed
,
342 prefs::kAudioCaptureAllowed
,
343 base::Value::TYPE_BOOLEAN
},
344 { key::kVideoCaptureAllowed
,
345 prefs::kVideoCaptureAllowed
,
346 base::Value::TYPE_BOOLEAN
},
347 { key::kAudioCaptureAllowedUrls
,
348 prefs::kAudioCaptureAllowedUrls
,
349 base::Value::TYPE_LIST
},
350 { key::kVideoCaptureAllowedUrls
,
351 prefs::kVideoCaptureAllowedUrls
,
352 base::Value::TYPE_LIST
},
353 { key::kHideWebStoreIcon
,
354 prefs::kHideWebStoreIcon
,
355 base::Value::TYPE_BOOLEAN
},
356 { key::kVariationsRestrictParameter
,
357 prefs::kVariationsRestrictParameter
,
358 base::Value::TYPE_STRING
},
359 { key::kSupervisedUserCreationEnabled
,
360 prefs::kManagedUserCreationAllowed
,
361 base::Value::TYPE_BOOLEAN
},
362 { key::kForceEphemeralProfiles
,
363 prefs::kForceEphemeralProfiles
,
364 base::Value::TYPE_BOOLEAN
},
366 #if !defined(OS_MACOSX) && !defined(OS_IOS)
367 { key::kFullscreenAllowed
,
368 prefs::kFullscreenAllowed
,
369 base::Value::TYPE_BOOLEAN
},
370 { key::kFullscreenAllowed
,
371 apps::prefs::kAppFullscreenAllowed
,
372 base::Value::TYPE_BOOLEAN
},
373 #endif // !defined(OS_MACOSX) && !defined(OS_IOS)
375 #if defined(OS_CHROMEOS)
376 { key::kChromeOsLockOnIdleSuspend
,
377 prefs::kEnableAutoScreenLock
,
378 base::Value::TYPE_BOOLEAN
},
379 { key::kChromeOsReleaseChannel
,
380 prefs::kChromeOsReleaseChannel
,
381 base::Value::TYPE_STRING
},
382 { key::kDriveDisabled
,
383 prefs::kDisableDrive
,
384 base::Value::TYPE_BOOLEAN
},
385 { key::kDriveDisabledOverCellular
,
386 prefs::kDisableDriveOverCellular
,
387 base::Value::TYPE_BOOLEAN
},
388 { key::kExternalStorageDisabled
,
389 prefs::kExternalStorageDisabled
,
390 base::Value::TYPE_BOOLEAN
},
391 { key::kAudioOutputAllowed
,
392 prefs::kAudioOutputAllowed
,
393 base::Value::TYPE_BOOLEAN
},
394 { key::kShowLogoutButtonInTray
,
395 prefs::kShowLogoutButtonInTray
,
396 base::Value::TYPE_BOOLEAN
},
397 { key::kShelfAutoHideBehavior
,
398 prefs::kShelfAutoHideBehaviorLocal
,
399 base::Value::TYPE_STRING
},
400 { key::kSessionLengthLimit
,
401 prefs::kSessionLengthLimit
,
402 base::Value::TYPE_INTEGER
},
403 { key::kWaitForInitialUserActivity
,
404 prefs::kSessionWaitForInitialUserActivity
,
405 base::Value::TYPE_BOOLEAN
},
406 { key::kPowerManagementUsesAudioActivity
,
407 prefs::kPowerUseAudioActivity
,
408 base::Value::TYPE_BOOLEAN
},
409 { key::kPowerManagementUsesVideoActivity
,
410 prefs::kPowerUseVideoActivity
,
411 base::Value::TYPE_BOOLEAN
},
412 { key::kAllowScreenWakeLocks
,
413 prefs::kPowerAllowScreenWakeLocks
,
414 base::Value::TYPE_BOOLEAN
},
415 { key::kWaitForInitialUserActivity
,
416 prefs::kPowerWaitForInitialUserActivity
,
417 base::Value::TYPE_BOOLEAN
},
418 { key::kTermsOfServiceURL
,
419 prefs::kTermsOfServiceURL
,
420 base::Value::TYPE_STRING
},
421 { key::kShowAccessibilityOptionsInSystemTrayMenu
,
422 prefs::kShouldAlwaysShowAccessibilityMenu
,
423 base::Value::TYPE_BOOLEAN
},
424 { key::kLargeCursorEnabled
,
425 prefs::kLargeCursorEnabled
,
426 base::Value::TYPE_BOOLEAN
},
427 { key::kSpokenFeedbackEnabled
,
428 prefs::kSpokenFeedbackEnabled
,
429 base::Value::TYPE_BOOLEAN
},
430 { key::kHighContrastEnabled
,
431 prefs::kHighContrastEnabled
,
432 base::Value::TYPE_BOOLEAN
},
433 { key::kVirtualKeyboardEnabled
,
434 prefs::kVirtualKeyboardEnabled
,
435 base::Value::TYPE_BOOLEAN
},
436 { key::kDeviceLoginScreenDefaultLargeCursorEnabled
,
438 base::Value::TYPE_BOOLEAN
},
439 { key::kDeviceLoginScreenDefaultSpokenFeedbackEnabled
,
441 base::Value::TYPE_BOOLEAN
},
442 { key::kDeviceLoginScreenDefaultHighContrastEnabled
,
444 base::Value::TYPE_BOOLEAN
},
445 { key::kDeviceLoginScreenDefaultVirtualKeyboardEnabled
,
447 base::Value::TYPE_BOOLEAN
},
448 { key::kRebootAfterUpdate
,
449 prefs::kRebootAfterUpdate
,
450 base::Value::TYPE_BOOLEAN
},
451 { key::kAttestationEnabledForUser
,
452 prefs::kAttestationEnabled
,
453 base::Value::TYPE_BOOLEAN
},
454 { key::kChromeOsMultiProfileUserBehavior
,
455 prefs::kMultiProfileUserBehavior
,
456 base::Value::TYPE_STRING
},
457 { key::kKeyboardDefaultToFunctionKeys
,
458 prefs::kLanguageSendFunctionKeys
,
459 base::Value::TYPE_BOOLEAN
},
460 #endif // defined(OS_CHROMEOS)
462 #if !defined(OS_MACOSX) && !defined(OS_CHROMEOS)
463 { key::kBackgroundModeEnabled
,
464 prefs::kBackgroundModeEnabled
,
465 base::Value::TYPE_BOOLEAN
},
466 #endif // !defined(OS_MACOSX) && !defined(OS_CHROMEOS)
468 #if defined(OS_ANDROID)
469 { key::kDataCompressionProxyEnabled
,
470 data_reduction_proxy::prefs::kDataReductionProxyEnabled
,
471 base::Value::TYPE_BOOLEAN
},
472 #endif // defined(OS_ANDROID)
474 #if !defined(OS_CHROMEOS) && !defined(OS_ANDROID) && !defined(OS_IOS)
475 { key::kNativeMessagingUserLevelHosts
,
476 extensions::pref_names::kNativeMessagingUserLevelHosts
,
477 base::Value::TYPE_BOOLEAN
},
478 #endif // !defined(OS_CHROMEOS) && !defined(OS_ANDROID) && !defined(OS_IOS)
482 // Mapping from extension type names to Manifest::Type.
483 StringToIntEnumListPolicyHandler::MappingEntry kExtensionAllowedTypesMap
[] = {
484 { "extension", extensions::Manifest::TYPE_EXTENSION
},
485 { "theme", extensions::Manifest::TYPE_THEME
},
486 { "user_script", extensions::Manifest::TYPE_USER_SCRIPT
},
487 { "hosted_app", extensions::Manifest::TYPE_HOSTED_APP
},
488 { "legacy_packaged_app", extensions::Manifest::TYPE_LEGACY_PACKAGED_APP
},
489 { "platform_app", extensions::Manifest::TYPE_PLATFORM_APP
},
491 #endif // !defined(OS_IOS)
495 void PopulatePolicyHandlerParameters(PolicyHandlerParameters
* parameters
) {
496 #if defined(OS_CHROMEOS)
497 if (chromeos::UserManager::IsInitialized()) {
498 const chromeos::User
* user
= chromeos::UserManager::Get()->GetActiveUser();
500 parameters
->user_id_hash
= user
->username_hash();
505 scoped_ptr
<ConfigurationPolicyHandlerList
> BuildHandlerList(
506 const Schema
& chrome_schema
) {
507 scoped_ptr
<ConfigurationPolicyHandlerList
> handlers(
508 new ConfigurationPolicyHandlerList(
509 base::Bind(&PopulatePolicyHandlerParameters
),
510 base::Bind(&GetChromePolicyDetails
)));
511 for (size_t i
= 0; i
< arraysize(kSimplePolicyMap
); ++i
) {
512 handlers
->AddHandler(make_scoped_ptr
<ConfigurationPolicyHandler
>(
513 new SimplePolicyHandler(kSimplePolicyMap
[i
].policy_name
,
514 kSimplePolicyMap
[i
].preference_path
,
515 kSimplePolicyMap
[i
].value_type
)));
518 handlers
->AddHandler(make_scoped_ptr
<ConfigurationPolicyHandler
>(
519 new AutofillPolicyHandler()));
520 handlers
->AddHandler(make_scoped_ptr
<ConfigurationPolicyHandler
>(
521 new DefaultSearchPolicyHandler()));
522 handlers
->AddHandler(make_scoped_ptr
<ConfigurationPolicyHandler
>(
523 new IncognitoModePolicyHandler()));
524 handlers
->AddHandler(make_scoped_ptr
<ConfigurationPolicyHandler
>(
525 new ManagedBookmarksPolicyHandler(chrome_schema
)));
526 handlers
->AddHandler(make_scoped_ptr
<ConfigurationPolicyHandler
>(
527 new ProxyPolicyHandler()));
528 handlers
->AddHandler(make_scoped_ptr
<ConfigurationPolicyHandler
>(
529 new URLBlacklistPolicyHandler()));
532 handlers
->AddHandler(make_scoped_ptr
<ConfigurationPolicyHandler
>(
533 new FileSelectionDialogsPolicyHandler()));
534 handlers
->AddHandler(make_scoped_ptr
<ConfigurationPolicyHandler
>(
535 new JavascriptPolicyHandler()));
536 handlers
->AddHandler(make_scoped_ptr
<ConfigurationPolicyHandler
>(
537 new RestoreOnStartupPolicyHandler()));
538 handlers
->AddHandler(make_scoped_ptr
<ConfigurationPolicyHandler
>(
539 new browser_sync::SyncPolicyHandler()));
541 handlers
->AddHandler(make_scoped_ptr
<ConfigurationPolicyHandler
>(
542 new extensions::ExtensionListPolicyHandler(
543 key::kExtensionInstallWhitelist
,
544 extensions::pref_names::kInstallAllowList
,
546 handlers
->AddHandler(make_scoped_ptr
<ConfigurationPolicyHandler
>(
547 new extensions::ExtensionListPolicyHandler(
548 key::kExtensionInstallBlacklist
,
549 extensions::pref_names::kInstallDenyList
,
551 handlers
->AddHandler(make_scoped_ptr
<ConfigurationPolicyHandler
>(
552 new extensions::ExtensionInstallForcelistPolicyHandler()));
553 handlers
->AddHandler(make_scoped_ptr
<ConfigurationPolicyHandler
>(
554 new extensions::ExtensionURLPatternListPolicyHandler(
555 key::kExtensionInstallSources
,
556 extensions::pref_names::kAllowedInstallSites
)));
557 handlers
->AddHandler(make_scoped_ptr
<ConfigurationPolicyHandler
>(
558 new StringToIntEnumListPolicyHandler(
559 key::kExtensionAllowedTypes
,
560 extensions::pref_names::kAllowedTypes
,
561 kExtensionAllowedTypesMap
,
562 kExtensionAllowedTypesMap
+ arraysize(kExtensionAllowedTypesMap
))));
563 #endif // !defined(OS_IOS)
565 #if !defined(OS_CHROMEOS) && !defined(OS_ANDROID) && !defined(OS_IOS)
566 handlers
->AddHandler(make_scoped_ptr
<ConfigurationPolicyHandler
>(
567 new DiskCacheDirPolicyHandler()));
569 handlers
->AddHandler(make_scoped_ptr
<ConfigurationPolicyHandler
>(
570 new extensions::NativeMessagingHostListPolicyHandler(
571 key::kNativeMessagingWhitelist
,
572 extensions::pref_names::kNativeMessagingWhitelist
,
574 handlers
->AddHandler(make_scoped_ptr
<ConfigurationPolicyHandler
>(
575 new extensions::NativeMessagingHostListPolicyHandler(
576 key::kNativeMessagingBlacklist
,
577 extensions::pref_names::kNativeMessagingBlacklist
,
579 #endif // !defined(OS_CHROMEOS) && !defined(OS_ANDROID) && !defined(OS_IOS)
581 #if !defined(OS_ANDROID) && !defined(OS_IOS)
582 handlers
->AddHandler(make_scoped_ptr
<ConfigurationPolicyHandler
>(
583 new DownloadDirPolicyHandler
));
586 #if defined(OS_CHROMEOS)
587 handlers
->AddHandler(make_scoped_ptr
<ConfigurationPolicyHandler
>(
588 new extensions::ExtensionListPolicyHandler(
589 key::kAttestationExtensionWhitelist
,
590 prefs::kAttestationExtensionWhitelist
,
592 handlers
->AddHandler(make_scoped_ptr
<ConfigurationPolicyHandler
>(
593 NetworkConfigurationPolicyHandler::CreateForDevicePolicy()));
594 handlers
->AddHandler(make_scoped_ptr
<ConfigurationPolicyHandler
>(
595 NetworkConfigurationPolicyHandler::CreateForUserPolicy()));
596 handlers
->AddHandler(make_scoped_ptr
<ConfigurationPolicyHandler
>(
597 new PinnedLauncherAppsPolicyHandler()));
598 handlers
->AddHandler(make_scoped_ptr
<ConfigurationPolicyHandler
>(
599 new ScreenMagnifierPolicyHandler()));
600 handlers
->AddHandler(make_scoped_ptr
<ConfigurationPolicyHandler
>(
601 new LoginScreenPowerManagementPolicyHandler(chrome_schema
)));
603 ScopedVector
<ConfigurationPolicyHandler
>
604 power_management_idle_legacy_policies
;
605 power_management_idle_legacy_policies
.push_back(
606 new IntRangePolicyHandler(key::kScreenDimDelayAC
,
607 prefs::kPowerAcScreenDimDelayMs
,
611 power_management_idle_legacy_policies
.push_back(
612 new IntRangePolicyHandler(key::kScreenOffDelayAC
,
613 prefs::kPowerAcScreenOffDelayMs
,
617 power_management_idle_legacy_policies
.push_back(
618 new IntRangePolicyHandler(key::kIdleWarningDelayAC
,
619 prefs::kPowerAcIdleWarningDelayMs
,
623 power_management_idle_legacy_policies
.push_back(new IntRangePolicyHandler(
624 key::kIdleDelayAC
, prefs::kPowerAcIdleDelayMs
, 0, INT_MAX
, true));
625 power_management_idle_legacy_policies
.push_back(
626 new IntRangePolicyHandler(key::kScreenDimDelayBattery
,
627 prefs::kPowerBatteryScreenDimDelayMs
,
631 power_management_idle_legacy_policies
.push_back(
632 new IntRangePolicyHandler(key::kScreenOffDelayBattery
,
633 prefs::kPowerBatteryScreenOffDelayMs
,
637 power_management_idle_legacy_policies
.push_back(
638 new IntRangePolicyHandler(key::kIdleWarningDelayBattery
,
639 prefs::kPowerBatteryIdleWarningDelayMs
,
643 power_management_idle_legacy_policies
.push_back(
644 new IntRangePolicyHandler(key::kIdleDelayBattery
,
645 prefs::kPowerBatteryIdleDelayMs
,
649 power_management_idle_legacy_policies
.push_back(new IntRangePolicyHandler(
651 prefs::kPowerAcIdleAction
,
652 chromeos::PowerPolicyController::ACTION_SUSPEND
,
653 chromeos::PowerPolicyController::ACTION_DO_NOTHING
,
655 power_management_idle_legacy_policies
.push_back(new IntRangePolicyHandler(
656 key::kIdleActionBattery
,
657 prefs::kPowerBatteryIdleAction
,
658 chromeos::PowerPolicyController::ACTION_SUSPEND
,
659 chromeos::PowerPolicyController::ACTION_DO_NOTHING
,
661 power_management_idle_legacy_policies
.push_back(
662 new DeprecatedIdleActionHandler());
664 ScopedVector
<ConfigurationPolicyHandler
> screen_lock_legacy_policies
;
665 screen_lock_legacy_policies
.push_back(
666 new IntRangePolicyHandler(key::kScreenLockDelayAC
,
667 prefs::kPowerAcScreenLockDelayMs
,
671 screen_lock_legacy_policies
.push_back(
672 new IntRangePolicyHandler(key::kScreenLockDelayBattery
,
673 prefs::kPowerBatteryScreenLockDelayMs
,
678 handlers
->AddHandler(make_scoped_ptr
<ConfigurationPolicyHandler
>(
679 new IntRangePolicyHandler(key::kSAMLOfflineSigninTimeLimit
,
680 prefs::kSAMLOfflineSigninTimeLimit
,
684 handlers
->AddHandler(
685 make_scoped_ptr
<ConfigurationPolicyHandler
>(new IntRangePolicyHandler(
686 key::kLidCloseAction
,
687 prefs::kPowerLidClosedAction
,
688 chromeos::PowerPolicyController::ACTION_SUSPEND
,
689 chromeos::PowerPolicyController::ACTION_DO_NOTHING
,
691 handlers
->AddHandler(make_scoped_ptr
<ConfigurationPolicyHandler
>(
692 new IntPercentageToDoublePolicyHandler(
693 key::kPresentationScreenDimDelayScale
,
694 prefs::kPowerPresentationScreenDimDelayFactor
,
698 handlers
->AddHandler(make_scoped_ptr
<ConfigurationPolicyHandler
>(
699 new IntPercentageToDoublePolicyHandler(
700 key::kUserActivityScreenDimDelayScale
,
701 prefs::kPowerUserActivityScreenDimDelayFactor
,
705 handlers
->AddHandler(
706 make_scoped_ptr
<ConfigurationPolicyHandler
>(new IntRangePolicyHandler(
707 key::kUptimeLimit
, prefs::kUptimeLimit
, 3600, INT_MAX
, true)));
708 handlers
->AddHandler(
709 make_scoped_ptr
<ConfigurationPolicyHandler
>(new IntRangePolicyHandler(
710 key::kDeviceLoginScreenDefaultScreenMagnifierType
,
715 // TODO(binjin): Remove LegacyPoliciesDeprecatingPolicyHandler for these two
716 // policies once deprecation of legacy power management policies is done.
717 // http://crbug.com/346229
718 handlers
->AddHandler(make_scoped_ptr
<ConfigurationPolicyHandler
>(
719 new LegacyPoliciesDeprecatingPolicyHandler(
720 power_management_idle_legacy_policies
.Pass(),
721 make_scoped_ptr
<SchemaValidatingPolicyHandler
>(
722 new PowerManagementIdleSettingsPolicyHandler(chrome_schema
)))));
723 handlers
->AddHandler(make_scoped_ptr
<ConfigurationPolicyHandler
>(
724 new LegacyPoliciesDeprecatingPolicyHandler(
725 screen_lock_legacy_policies
.Pass(),
726 make_scoped_ptr
<SchemaValidatingPolicyHandler
>(
727 new ScreenLockDelayPolicyHandler(chrome_schema
)))));
728 handlers
->AddHandler(make_scoped_ptr
<ConfigurationPolicyHandler
>(
729 new ExternalDataPolicyHandler(key::kUserAvatarImage
)));
730 handlers
->AddHandler(make_scoped_ptr
<ConfigurationPolicyHandler
>(
731 new ExternalDataPolicyHandler(key::kWallpaperImage
)));
732 #endif // defined(OS_CHROMEOS)
734 return handlers
.Pass();
737 } // namespace policy