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(ENABLE_EXTENSIONS)
52 #include "chrome/browser/extensions/api/messaging/native_messaging_policy_handler.h"
53 #include "chrome/browser/extensions/extension_management_constants.h"
54 #include "chrome/browser/extensions/policy_handlers.h"
55 #include "extensions/browser/pref_names.h"
56 #include "extensions/common/manifest.h"
63 // List of policy types to preference names. This is used for simple policies
64 // that directly map to a single preference.
65 const PolicyToPreferenceMapEntry kSimplePolicyMap
[] = {
66 { key::kHomepageLocation
,
68 base::Value::TYPE_STRING
},
69 { key::kHomepageIsNewTabPage
,
70 prefs::kHomePageIsNewTabPage
,
71 base::Value::TYPE_BOOLEAN
},
72 { key::kRestoreOnStartupURLs
,
73 prefs::kURLsToRestoreOnStartup
,
74 base::Value::TYPE_LIST
},
75 { key::kAlternateErrorPagesEnabled
,
76 prefs::kAlternateErrorPagesEnabled
,
77 base::Value::TYPE_BOOLEAN
},
78 { key::kSearchSuggestEnabled
,
79 prefs::kSearchSuggestEnabled
,
80 base::Value::TYPE_BOOLEAN
},
81 { key::kBuiltInDnsClientEnabled
,
82 prefs::kBuiltInDnsClientEnabled
,
83 base::Value::TYPE_BOOLEAN
},
84 { key::kWPADQuickCheckEnabled
,
85 prefs::kQuickCheckEnabled
,
86 base::Value::TYPE_BOOLEAN
},
89 base::Value::TYPE_BOOLEAN
},
90 { key::kSafeBrowsingEnabled
,
91 prefs::kSafeBrowsingEnabled
,
92 base::Value::TYPE_BOOLEAN
},
93 { key::kForceSafeSearch
,
94 prefs::kForceSafeSearch
,
95 base::Value::TYPE_BOOLEAN
},
96 { key::kPasswordManagerEnabled
,
97 password_manager::prefs::kPasswordManagerSavingEnabled
,
98 base::Value::TYPE_BOOLEAN
},
99 { key::kPasswordManagerAllowShowPasswords
,
100 password_manager::prefs::kPasswordManagerAllowShowPasswords
,
101 base::Value::TYPE_BOOLEAN
},
102 { key::kPrintingEnabled
,
103 prefs::kPrintingEnabled
,
104 base::Value::TYPE_BOOLEAN
},
105 { key::kDisablePrintPreview
,
106 prefs::kPrintPreviewDisabled
,
107 base::Value::TYPE_BOOLEAN
},
108 { key::kMetricsReportingEnabled
,
109 prefs::kMetricsReportingEnabled
,
110 base::Value::TYPE_BOOLEAN
},
111 { key::kApplicationLocaleValue
,
112 prefs::kApplicationLocale
,
113 base::Value::TYPE_STRING
},
114 { key::kDisabledPlugins
,
115 prefs::kPluginsDisabledPlugins
,
116 base::Value::TYPE_LIST
},
117 { key::kDisabledPluginsExceptions
,
118 prefs::kPluginsDisabledPluginsExceptions
,
119 base::Value::TYPE_LIST
},
120 { key::kEnabledPlugins
,
121 prefs::kPluginsEnabledPlugins
,
122 base::Value::TYPE_LIST
},
123 { key::kShowHomeButton
,
124 prefs::kShowHomeButton
,
125 base::Value::TYPE_BOOLEAN
},
126 { key::kSavingBrowserHistoryDisabled
,
127 prefs::kSavingBrowserHistoryDisabled
,
128 base::Value::TYPE_BOOLEAN
},
129 { key::kAllowDeletingBrowserHistory
,
130 prefs::kAllowDeletingBrowserHistory
,
131 base::Value::TYPE_BOOLEAN
},
132 { key::kDeveloperToolsDisabled
,
133 prefs::kDevToolsDisabled
,
134 base::Value::TYPE_BOOLEAN
},
135 { key::kBlockThirdPartyCookies
,
136 prefs::kBlockThirdPartyCookies
,
137 base::Value::TYPE_BOOLEAN
},
138 { key::kDefaultCookiesSetting
,
139 prefs::kManagedDefaultCookiesSetting
,
140 base::Value::TYPE_INTEGER
},
141 { key::kDefaultImagesSetting
,
142 prefs::kManagedDefaultImagesSetting
,
143 base::Value::TYPE_INTEGER
},
144 { key::kDefaultPluginsSetting
,
145 prefs::kManagedDefaultPluginsSetting
,
146 base::Value::TYPE_INTEGER
},
147 { key::kDefaultPopupsSetting
,
148 prefs::kManagedDefaultPopupsSetting
,
149 base::Value::TYPE_INTEGER
},
150 { key::kAutoSelectCertificateForUrls
,
151 prefs::kManagedAutoSelectCertificateForUrls
,
152 base::Value::TYPE_LIST
},
153 { key::kCookiesAllowedForUrls
,
154 prefs::kManagedCookiesAllowedForUrls
,
155 base::Value::TYPE_LIST
},
156 { key::kCookiesBlockedForUrls
,
157 prefs::kManagedCookiesBlockedForUrls
,
158 base::Value::TYPE_LIST
},
159 { key::kCookiesSessionOnlyForUrls
,
160 prefs::kManagedCookiesSessionOnlyForUrls
,
161 base::Value::TYPE_LIST
},
162 { key::kImagesAllowedForUrls
,
163 prefs::kManagedImagesAllowedForUrls
,
164 base::Value::TYPE_LIST
},
165 { key::kImagesBlockedForUrls
,
166 prefs::kManagedImagesBlockedForUrls
,
167 base::Value::TYPE_LIST
},
168 { key::kJavaScriptAllowedForUrls
,
169 prefs::kManagedJavaScriptAllowedForUrls
,
170 base::Value::TYPE_LIST
},
171 { key::kJavaScriptBlockedForUrls
,
172 prefs::kManagedJavaScriptBlockedForUrls
,
173 base::Value::TYPE_LIST
},
174 { key::kPluginsAllowedForUrls
,
175 prefs::kManagedPluginsAllowedForUrls
,
176 base::Value::TYPE_LIST
},
177 { key::kPluginsBlockedForUrls
,
178 prefs::kManagedPluginsBlockedForUrls
,
179 base::Value::TYPE_LIST
},
180 { key::kPopupsAllowedForUrls
,
181 prefs::kManagedPopupsAllowedForUrls
,
182 base::Value::TYPE_LIST
},
183 { key::kPopupsBlockedForUrls
,
184 prefs::kManagedPopupsBlockedForUrls
,
185 base::Value::TYPE_LIST
},
186 { key::kNotificationsAllowedForUrls
,
187 prefs::kManagedNotificationsAllowedForUrls
,
188 base::Value::TYPE_LIST
},
189 { key::kNotificationsBlockedForUrls
,
190 prefs::kManagedNotificationsBlockedForUrls
,
191 base::Value::TYPE_LIST
},
192 { key::kDefaultNotificationsSetting
,
193 prefs::kManagedDefaultNotificationsSetting
,
194 base::Value::TYPE_INTEGER
},
195 { key::kDefaultGeolocationSetting
,
196 prefs::kManagedDefaultGeolocationSetting
,
197 base::Value::TYPE_INTEGER
},
198 { key::kSigninAllowed
,
199 prefs::kSigninAllowed
,
200 base::Value::TYPE_BOOLEAN
},
201 { key::kDisableSSLRecordSplitting
,
202 prefs::kDisableSSLRecordSplitting
,
203 base::Value::TYPE_BOOLEAN
},
204 { key::kEnableOnlineRevocationChecks
,
205 prefs::kCertRevocationCheckingEnabled
,
206 base::Value::TYPE_BOOLEAN
},
207 { key::kRequireOnlineRevocationChecksForLocalAnchors
,
208 prefs::kCertRevocationCheckingRequiredLocalAnchors
,
209 base::Value::TYPE_BOOLEAN
},
212 base::Value::TYPE_STRING
},
213 { key::kDisableAuthNegotiateCnameLookup
,
214 prefs::kDisableAuthNegotiateCnameLookup
,
215 base::Value::TYPE_BOOLEAN
},
216 { key::kEnableAuthNegotiatePort
,
217 prefs::kEnableAuthNegotiatePort
,
218 base::Value::TYPE_BOOLEAN
},
219 { key::kAuthServerWhitelist
,
220 prefs::kAuthServerWhitelist
,
221 base::Value::TYPE_STRING
},
222 { key::kAuthNegotiateDelegateWhitelist
,
223 prefs::kAuthNegotiateDelegateWhitelist
,
224 base::Value::TYPE_STRING
},
225 { key::kGSSAPILibraryName
,
226 prefs::kGSSAPILibraryName
,
227 base::Value::TYPE_STRING
},
228 { key::kAllowCrossOriginAuthPrompt
,
229 prefs::kAllowCrossOriginAuthPrompt
,
230 base::Value::TYPE_BOOLEAN
},
231 { key::kDisable3DAPIs
,
232 prefs::kDisable3DAPIs
,
233 base::Value::TYPE_BOOLEAN
},
234 { key::kDisablePluginFinder
,
235 prefs::kDisablePluginFinder
,
236 base::Value::TYPE_BOOLEAN
},
237 { key::kDiskCacheSize
,
238 prefs::kDiskCacheSize
,
239 base::Value::TYPE_INTEGER
},
240 { key::kMediaCacheSize
,
241 prefs::kMediaCacheSize
,
242 base::Value::TYPE_INTEGER
},
243 { key::kPolicyRefreshRate
,
244 policy_prefs::kUserPolicyRefreshRate
,
245 base::Value::TYPE_INTEGER
},
246 { key::kDevicePolicyRefreshRate
,
247 prefs::kDevicePolicyRefreshRate
,
248 base::Value::TYPE_INTEGER
},
249 { key::kDefaultBrowserSettingEnabled
,
250 prefs::kDefaultBrowserSettingEnabled
,
251 base::Value::TYPE_BOOLEAN
},
252 { key::kRemoteAccessHostFirewallTraversal
,
253 prefs::kRemoteAccessHostFirewallTraversal
,
254 base::Value::TYPE_BOOLEAN
},
255 { key::kRemoteAccessHostRequireTwoFactor
,
256 prefs::kRemoteAccessHostRequireTwoFactor
,
257 base::Value::TYPE_BOOLEAN
},
258 { key::kRemoteAccessHostDomain
,
259 prefs::kRemoteAccessHostDomain
,
260 base::Value::TYPE_STRING
},
261 { key::kRemoteAccessHostTalkGadgetPrefix
,
262 prefs::kRemoteAccessHostTalkGadgetPrefix
,
263 base::Value::TYPE_STRING
},
264 { key::kRemoteAccessHostRequireCurtain
,
265 prefs::kRemoteAccessHostRequireCurtain
,
266 base::Value::TYPE_BOOLEAN
},
267 { key::kRemoteAccessHostAllowClientPairing
,
268 prefs::kRemoteAccessHostAllowClientPairing
,
269 base::Value::TYPE_BOOLEAN
},
270 { key::kRemoteAccessHostAllowGnubbyAuth
,
271 prefs::kRemoteAccessHostAllowGnubbyAuth
,
272 base::Value::TYPE_BOOLEAN
},
273 { key::kRemoteAccessHostAllowRelayedConnection
,
274 prefs::kRemoteAccessHostAllowRelayedConnection
,
275 base::Value::TYPE_BOOLEAN
},
276 { key::kRemoteAccessHostUdpPortRange
,
277 prefs::kRemoteAccessHostUdpPortRange
,
278 base::Value::TYPE_STRING
},
279 { key::kCloudPrintProxyEnabled
,
280 prefs::kCloudPrintProxyEnabled
,
281 base::Value::TYPE_BOOLEAN
},
282 { key::kCloudPrintSubmitEnabled
,
283 prefs::kCloudPrintSubmitEnabled
,
284 base::Value::TYPE_BOOLEAN
},
285 { key::kTranslateEnabled
,
286 prefs::kEnableTranslate
,
287 base::Value::TYPE_BOOLEAN
},
288 { key::kAllowOutdatedPlugins
,
289 prefs::kPluginsAllowOutdated
,
290 base::Value::TYPE_BOOLEAN
},
291 { key::kAlwaysAuthorizePlugins
,
292 prefs::kPluginsAlwaysAuthorize
,
293 base::Value::TYPE_BOOLEAN
},
294 { key::kBookmarkBarEnabled
,
295 bookmarks::prefs::kShowBookmarkBar
,
296 base::Value::TYPE_BOOLEAN
},
297 { key::kEditBookmarksEnabled
,
298 bookmarks::prefs::kEditBookmarksEnabled
,
299 base::Value::TYPE_BOOLEAN
},
300 { key::kShowAppsShortcutInBookmarkBar
,
301 bookmarks::prefs::kShowAppsShortcutInBookmarkBar
,
302 base::Value::TYPE_BOOLEAN
},
303 { key::kAllowFileSelectionDialogs
,
304 prefs::kAllowFileSelectionDialogs
,
305 base::Value::TYPE_BOOLEAN
},
306 { key::kImportBookmarks
,
307 prefs::kImportBookmarks
,
308 base::Value::TYPE_BOOLEAN
},
309 { key::kImportHistory
,
310 prefs::kImportHistory
,
311 base::Value::TYPE_BOOLEAN
},
312 { key::kImportHomepage
,
313 prefs::kImportHomepage
,
314 base::Value::TYPE_BOOLEAN
},
315 { key::kImportSearchEngine
,
316 prefs::kImportSearchEngine
,
317 base::Value::TYPE_BOOLEAN
},
318 { key::kImportSavedPasswords
,
319 prefs::kImportSavedPasswords
,
320 base::Value::TYPE_BOOLEAN
},
321 { key::kImportAutofillFormData
,
322 prefs::kImportAutofillFormData
,
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
},
369 { key::kSSLVersionMin
,
370 prefs::kSSLVersionMin
,
371 base::Value::TYPE_STRING
},
372 { key::kSSLVersionFallbackMin
,
373 prefs::kSSLVersionFallbackMin
,
374 base::Value::TYPE_STRING
},
376 #if !defined(OS_MACOSX) && !defined(OS_IOS)
377 { key::kFullscreenAllowed
,
378 prefs::kFullscreenAllowed
,
379 base::Value::TYPE_BOOLEAN
},
380 #if defined(ENABLE_EXTENSIONS)
381 { key::kFullscreenAllowed
,
382 extensions::pref_names::kAppFullscreenAllowed
,
383 base::Value::TYPE_BOOLEAN
},
384 #endif // defined(ENABLE_EXTENSIONS)
385 #endif // !defined(OS_MACOSX) && !defined(OS_IOS)
387 #if defined(OS_CHROMEOS)
388 { key::kChromeOsLockOnIdleSuspend
,
389 prefs::kEnableAutoScreenLock
,
390 base::Value::TYPE_BOOLEAN
},
391 { key::kChromeOsReleaseChannel
,
392 prefs::kChromeOsReleaseChannel
,
393 base::Value::TYPE_STRING
},
394 { key::kDriveDisabled
,
395 prefs::kDisableDrive
,
396 base::Value::TYPE_BOOLEAN
},
397 { key::kDriveDisabledOverCellular
,
398 prefs::kDisableDriveOverCellular
,
399 base::Value::TYPE_BOOLEAN
},
400 { key::kExternalStorageDisabled
,
401 prefs::kExternalStorageDisabled
,
402 base::Value::TYPE_BOOLEAN
},
403 { key::kAudioOutputAllowed
,
404 prefs::kAudioOutputAllowed
,
405 base::Value::TYPE_BOOLEAN
},
406 { key::kShowLogoutButtonInTray
,
407 prefs::kShowLogoutButtonInTray
,
408 base::Value::TYPE_BOOLEAN
},
409 { key::kShelfAutoHideBehavior
,
410 prefs::kShelfAutoHideBehaviorLocal
,
411 base::Value::TYPE_STRING
},
412 { key::kSessionLengthLimit
,
413 prefs::kSessionLengthLimit
,
414 base::Value::TYPE_INTEGER
},
415 { key::kWaitForInitialUserActivity
,
416 prefs::kSessionWaitForInitialUserActivity
,
417 base::Value::TYPE_BOOLEAN
},
418 { key::kPowerManagementUsesAudioActivity
,
419 prefs::kPowerUseAudioActivity
,
420 base::Value::TYPE_BOOLEAN
},
421 { key::kPowerManagementUsesVideoActivity
,
422 prefs::kPowerUseVideoActivity
,
423 base::Value::TYPE_BOOLEAN
},
424 { key::kAllowScreenWakeLocks
,
425 prefs::kPowerAllowScreenWakeLocks
,
426 base::Value::TYPE_BOOLEAN
},
427 { key::kWaitForInitialUserActivity
,
428 prefs::kPowerWaitForInitialUserActivity
,
429 base::Value::TYPE_BOOLEAN
},
430 { key::kTermsOfServiceURL
,
431 prefs::kTermsOfServiceURL
,
432 base::Value::TYPE_STRING
},
433 { key::kShowAccessibilityOptionsInSystemTrayMenu
,
434 prefs::kShouldAlwaysShowAccessibilityMenu
,
435 base::Value::TYPE_BOOLEAN
},
436 { key::kLargeCursorEnabled
,
437 prefs::kAccessibilityLargeCursorEnabled
,
438 base::Value::TYPE_BOOLEAN
},
439 { key::kSpokenFeedbackEnabled
,
440 prefs::kAccessibilitySpokenFeedbackEnabled
,
441 base::Value::TYPE_BOOLEAN
},
442 { key::kHighContrastEnabled
,
443 prefs::kAccessibilityHighContrastEnabled
,
444 base::Value::TYPE_BOOLEAN
},
445 { key::kVirtualKeyboardEnabled
,
446 prefs::kAccessibilityVirtualKeyboardEnabled
,
447 base::Value::TYPE_BOOLEAN
},
448 { key::kDeviceLoginScreenDefaultLargeCursorEnabled
,
450 base::Value::TYPE_BOOLEAN
},
451 { key::kDeviceLoginScreenDefaultSpokenFeedbackEnabled
,
453 base::Value::TYPE_BOOLEAN
},
454 { key::kDeviceLoginScreenDefaultHighContrastEnabled
,
456 base::Value::TYPE_BOOLEAN
},
457 { key::kDeviceLoginScreenDefaultVirtualKeyboardEnabled
,
459 base::Value::TYPE_BOOLEAN
},
460 { key::kRebootAfterUpdate
,
461 prefs::kRebootAfterUpdate
,
462 base::Value::TYPE_BOOLEAN
},
463 { key::kAttestationEnabledForUser
,
464 prefs::kAttestationEnabled
,
465 base::Value::TYPE_BOOLEAN
},
466 { key::kChromeOsMultiProfileUserBehavior
,
467 prefs::kMultiProfileUserBehavior
,
468 base::Value::TYPE_STRING
},
469 { key::kKeyboardDefaultToFunctionKeys
,
470 prefs::kLanguageSendFunctionKeys
,
471 base::Value::TYPE_BOOLEAN
},
472 { key::kTouchVirtualKeyboardEnabled
,
473 prefs::kTouchVirtualKeyboardEnabled
,
474 base::Value::TYPE_BOOLEAN
},
475 { key::kEasyUnlockAllowed
,
476 prefs::kEasyUnlockAllowed
,
477 base::Value::TYPE_BOOLEAN
},
478 #endif // defined(OS_CHROMEOS)
480 #if !defined(OS_MACOSX) && !defined(OS_CHROMEOS)
481 { key::kBackgroundModeEnabled
,
482 prefs::kBackgroundModeEnabled
,
483 base::Value::TYPE_BOOLEAN
},
484 #endif // !defined(OS_MACOSX) && !defined(OS_CHROMEOS)
486 #if defined(OS_ANDROID)
487 { key::kDataCompressionProxyEnabled
,
488 data_reduction_proxy::prefs::kDataReductionProxyEnabled
,
489 base::Value::TYPE_BOOLEAN
},
490 #endif // defined(OS_ANDROID)
492 #if !defined(OS_CHROMEOS) && !defined(OS_ANDROID) && !defined(OS_IOS)
493 { key::kNativeMessagingUserLevelHosts
,
494 extensions::pref_names::kNativeMessagingUserLevelHosts
,
495 base::Value::TYPE_BOOLEAN
},
496 { key::kBrowserGuestModeEnabled
,
497 prefs::kBrowserGuestModeEnabled
,
498 base::Value::TYPE_BOOLEAN
},
499 { key::kBrowserAddPersonEnabled
,
500 prefs::kBrowserAddPersonEnabled
,
501 base::Value::TYPE_BOOLEAN
},
502 #endif // !defined(OS_CHROMEOS) && !defined(OS_ANDROID) && !defined(OS_IOS)
505 #if defined(ENABLE_EXTENSIONS)
506 void GetExtensionAllowedTypesMap(
507 ScopedVector
<StringMappingListPolicyHandler::MappingEntry
>* result
) {
508 // Mapping from extension type names to Manifest::Type.
509 for (size_t index
= 0;
510 index
< extensions::schema_constants::kAllowedTypesMapSize
;
512 const extensions::schema_constants::AllowedTypesMapEntry
& entry
=
513 extensions::schema_constants::kAllowedTypesMap
[index
];
514 result
->push_back(new StringMappingListPolicyHandler::MappingEntry(
516 scoped_ptr
<base::Value
>(
517 new base::FundamentalValue(entry
.manifest_type
))));
523 void GetDeprecatedFeaturesMap(
524 ScopedVector
<StringMappingListPolicyHandler::MappingEntry
>* result
) {
525 // Maps feature tags as specified in policy to the corresponding switch to
527 // TODO: Remove after 2015-04-30 per http://crbug.com/374782.
528 result
->push_back(new StringMappingListPolicyHandler::MappingEntry(
529 "ShowModalDialog_EffectiveUntil20150430",
530 scoped_ptr
<base::Value
>(new base::StringValue(
531 switches::kEnableShowModalDialog
))));
533 #endif // !defined(OS_IOS)
537 void PopulatePolicyHandlerParameters(PolicyHandlerParameters
* parameters
) {
538 #if defined(OS_CHROMEOS)
539 if (user_manager::UserManager::IsInitialized()) {
540 const user_manager::User
* user
=
541 user_manager::UserManager::Get()->GetActiveUser();
543 parameters
->user_id_hash
= user
->username_hash();
548 scoped_ptr
<ConfigurationPolicyHandlerList
> BuildHandlerList(
549 const Schema
& chrome_schema
) {
550 scoped_ptr
<ConfigurationPolicyHandlerList
> handlers(
551 new ConfigurationPolicyHandlerList(
552 base::Bind(&PopulatePolicyHandlerParameters
),
553 base::Bind(&GetChromePolicyDetails
)));
554 for (size_t i
= 0; i
< arraysize(kSimplePolicyMap
); ++i
) {
555 handlers
->AddHandler(make_scoped_ptr
<ConfigurationPolicyHandler
>(
556 new SimplePolicyHandler(kSimplePolicyMap
[i
].policy_name
,
557 kSimplePolicyMap
[i
].preference_path
,
558 kSimplePolicyMap
[i
].value_type
)));
561 handlers
->AddHandler(make_scoped_ptr
<ConfigurationPolicyHandler
>(
562 new AutofillPolicyHandler()));
563 handlers
->AddHandler(make_scoped_ptr
<ConfigurationPolicyHandler
>(
564 new DefaultSearchPolicyHandler()));
565 handlers
->AddHandler(make_scoped_ptr
<ConfigurationPolicyHandler
>(
566 new IncognitoModePolicyHandler()));
567 handlers
->AddHandler(make_scoped_ptr
<ConfigurationPolicyHandler
>(
568 new ManagedBookmarksPolicyHandler(chrome_schema
)));
569 handlers
->AddHandler(make_scoped_ptr
<ConfigurationPolicyHandler
>(
570 new ProxyPolicyHandler()));
571 handlers
->AddHandler(make_scoped_ptr
<ConfigurationPolicyHandler
>(
572 new URLBlacklistPolicyHandler()));
575 handlers
->AddHandler(make_scoped_ptr
<ConfigurationPolicyHandler
>(
576 new FileSelectionDialogsPolicyHandler()));
577 handlers
->AddHandler(make_scoped_ptr
<ConfigurationPolicyHandler
>(
578 new JavascriptPolicyHandler()));
579 handlers
->AddHandler(make_scoped_ptr
<ConfigurationPolicyHandler
>(
580 new NetworkPredictionPolicyHandler()));
581 handlers
->AddHandler(make_scoped_ptr
<ConfigurationPolicyHandler
>(
582 new RestoreOnStartupPolicyHandler()));
583 handlers
->AddHandler(make_scoped_ptr
<ConfigurationPolicyHandler
>(
584 new browser_sync::SyncPolicyHandler()));
586 handlers
->AddHandler(make_scoped_ptr
<ConfigurationPolicyHandler
>(
587 new StringMappingListPolicyHandler(
588 key::kEnableDeprecatedWebPlatformFeatures
,
589 prefs::kEnableDeprecatedWebPlatformFeatures
,
590 base::Bind(GetDeprecatedFeaturesMap
))));
591 #endif // !defined(OS_IOS)
593 #if defined(ENABLE_EXTENSIONS)
594 handlers
->AddHandler(make_scoped_ptr
<ConfigurationPolicyHandler
>(
595 new extensions::ExtensionListPolicyHandler(
596 key::kExtensionInstallWhitelist
,
597 extensions::pref_names::kInstallAllowList
,
599 handlers
->AddHandler(make_scoped_ptr
<ConfigurationPolicyHandler
>(
600 new extensions::ExtensionListPolicyHandler(
601 key::kExtensionInstallBlacklist
,
602 extensions::pref_names::kInstallDenyList
,
604 handlers
->AddHandler(make_scoped_ptr
<ConfigurationPolicyHandler
>(
605 new extensions::ExtensionInstallForcelistPolicyHandler()));
606 handlers
->AddHandler(make_scoped_ptr
<ConfigurationPolicyHandler
>(
607 new extensions::ExtensionURLPatternListPolicyHandler(
608 key::kExtensionInstallSources
,
609 extensions::pref_names::kAllowedInstallSites
)));
610 handlers
->AddHandler(make_scoped_ptr
<ConfigurationPolicyHandler
>(
611 new StringMappingListPolicyHandler(
612 key::kExtensionAllowedTypes
,
613 extensions::pref_names::kAllowedTypes
,
614 base::Bind(GetExtensionAllowedTypesMap
))));
615 handlers
->AddHandler(make_scoped_ptr
<ConfigurationPolicyHandler
>(
616 new extensions::ExtensionSettingsPolicyHandler(chrome_schema
)));
619 #if !defined(OS_CHROMEOS) && !defined(OS_ANDROID) && !defined(OS_IOS)
620 handlers
->AddHandler(make_scoped_ptr
<ConfigurationPolicyHandler
>(
621 new DiskCacheDirPolicyHandler()));
623 handlers
->AddHandler(make_scoped_ptr
<ConfigurationPolicyHandler
>(
624 new extensions::NativeMessagingHostListPolicyHandler(
625 key::kNativeMessagingWhitelist
,
626 extensions::pref_names::kNativeMessagingWhitelist
,
628 handlers
->AddHandler(make_scoped_ptr
<ConfigurationPolicyHandler
>(
629 new extensions::NativeMessagingHostListPolicyHandler(
630 key::kNativeMessagingBlacklist
,
631 extensions::pref_names::kNativeMessagingBlacklist
,
633 #endif // !defined(OS_CHROMEOS) && !defined(OS_ANDROID) && !defined(OS_IOS)
635 #if !defined(OS_ANDROID) && !defined(OS_IOS)
636 handlers
->AddHandler(make_scoped_ptr
<ConfigurationPolicyHandler
>(
637 new DownloadDirPolicyHandler
));
639 handlers
->AddHandler(make_scoped_ptr
<ConfigurationPolicyHandler
>(
640 new SimpleSchemaValidatingPolicyHandler(
641 key::kRegisteredProtocolHandlers
,
642 prefs::kPolicyRegisteredProtocolHandlers
,
645 SimpleSchemaValidatingPolicyHandler::RECOMMENDED_ALLOWED
,
646 SimpleSchemaValidatingPolicyHandler::MANDATORY_PROHIBITED
)));
649 #if defined(OS_CHROMEOS)
650 handlers
->AddHandler(make_scoped_ptr
<ConfigurationPolicyHandler
>(
651 new extensions::ExtensionListPolicyHandler(
652 key::kAttestationExtensionWhitelist
,
653 prefs::kAttestationExtensionWhitelist
,
655 handlers
->AddHandler(make_scoped_ptr
<ConfigurationPolicyHandler
>(
656 NetworkConfigurationPolicyHandler::CreateForDevicePolicy()));
657 handlers
->AddHandler(make_scoped_ptr
<ConfigurationPolicyHandler
>(
658 NetworkConfigurationPolicyHandler::CreateForUserPolicy()));
659 handlers
->AddHandler(make_scoped_ptr
<ConfigurationPolicyHandler
>(
660 new PinnedLauncherAppsPolicyHandler()));
661 handlers
->AddHandler(make_scoped_ptr
<ConfigurationPolicyHandler
>(
662 new ScreenMagnifierPolicyHandler()));
663 handlers
->AddHandler(make_scoped_ptr
<ConfigurationPolicyHandler
>(
664 new LoginScreenPowerManagementPolicyHandler(chrome_schema
)));
666 ScopedVector
<ConfigurationPolicyHandler
>
667 power_management_idle_legacy_policies
;
668 power_management_idle_legacy_policies
.push_back(
669 new IntRangePolicyHandler(key::kScreenDimDelayAC
,
670 prefs::kPowerAcScreenDimDelayMs
,
674 power_management_idle_legacy_policies
.push_back(
675 new IntRangePolicyHandler(key::kScreenOffDelayAC
,
676 prefs::kPowerAcScreenOffDelayMs
,
680 power_management_idle_legacy_policies
.push_back(
681 new IntRangePolicyHandler(key::kIdleWarningDelayAC
,
682 prefs::kPowerAcIdleWarningDelayMs
,
686 power_management_idle_legacy_policies
.push_back(new IntRangePolicyHandler(
687 key::kIdleDelayAC
, prefs::kPowerAcIdleDelayMs
, 0, INT_MAX
, true));
688 power_management_idle_legacy_policies
.push_back(
689 new IntRangePolicyHandler(key::kScreenDimDelayBattery
,
690 prefs::kPowerBatteryScreenDimDelayMs
,
694 power_management_idle_legacy_policies
.push_back(
695 new IntRangePolicyHandler(key::kScreenOffDelayBattery
,
696 prefs::kPowerBatteryScreenOffDelayMs
,
700 power_management_idle_legacy_policies
.push_back(
701 new IntRangePolicyHandler(key::kIdleWarningDelayBattery
,
702 prefs::kPowerBatteryIdleWarningDelayMs
,
706 power_management_idle_legacy_policies
.push_back(
707 new IntRangePolicyHandler(key::kIdleDelayBattery
,
708 prefs::kPowerBatteryIdleDelayMs
,
712 power_management_idle_legacy_policies
.push_back(new IntRangePolicyHandler(
714 prefs::kPowerAcIdleAction
,
715 chromeos::PowerPolicyController::ACTION_SUSPEND
,
716 chromeos::PowerPolicyController::ACTION_DO_NOTHING
,
718 power_management_idle_legacy_policies
.push_back(new IntRangePolicyHandler(
719 key::kIdleActionBattery
,
720 prefs::kPowerBatteryIdleAction
,
721 chromeos::PowerPolicyController::ACTION_SUSPEND
,
722 chromeos::PowerPolicyController::ACTION_DO_NOTHING
,
724 power_management_idle_legacy_policies
.push_back(
725 new DeprecatedIdleActionHandler());
727 ScopedVector
<ConfigurationPolicyHandler
> screen_lock_legacy_policies
;
728 screen_lock_legacy_policies
.push_back(
729 new IntRangePolicyHandler(key::kScreenLockDelayAC
,
730 prefs::kPowerAcScreenLockDelayMs
,
734 screen_lock_legacy_policies
.push_back(
735 new IntRangePolicyHandler(key::kScreenLockDelayBattery
,
736 prefs::kPowerBatteryScreenLockDelayMs
,
741 handlers
->AddHandler(make_scoped_ptr
<ConfigurationPolicyHandler
>(
742 new IntRangePolicyHandler(key::kSAMLOfflineSigninTimeLimit
,
743 prefs::kSAMLOfflineSigninTimeLimit
,
747 handlers
->AddHandler(
748 make_scoped_ptr
<ConfigurationPolicyHandler
>(new IntRangePolicyHandler(
749 key::kLidCloseAction
,
750 prefs::kPowerLidClosedAction
,
751 chromeos::PowerPolicyController::ACTION_SUSPEND
,
752 chromeos::PowerPolicyController::ACTION_DO_NOTHING
,
754 handlers
->AddHandler(make_scoped_ptr
<ConfigurationPolicyHandler
>(
755 new IntPercentageToDoublePolicyHandler(
756 key::kPresentationScreenDimDelayScale
,
757 prefs::kPowerPresentationScreenDimDelayFactor
,
761 handlers
->AddHandler(make_scoped_ptr
<ConfigurationPolicyHandler
>(
762 new IntPercentageToDoublePolicyHandler(
763 key::kUserActivityScreenDimDelayScale
,
764 prefs::kPowerUserActivityScreenDimDelayFactor
,
768 handlers
->AddHandler(
769 make_scoped_ptr
<ConfigurationPolicyHandler
>(new IntRangePolicyHandler(
770 key::kUptimeLimit
, prefs::kUptimeLimit
, 3600, INT_MAX
, true)));
771 handlers
->AddHandler(
772 make_scoped_ptr
<ConfigurationPolicyHandler
>(new IntRangePolicyHandler(
773 key::kDeviceLoginScreenDefaultScreenMagnifierType
,
778 // TODO(binjin): Remove LegacyPoliciesDeprecatingPolicyHandler for these two
779 // policies once deprecation of legacy power management policies is done.
780 // http://crbug.com/346229
781 handlers
->AddHandler(make_scoped_ptr
<ConfigurationPolicyHandler
>(
782 new LegacyPoliciesDeprecatingPolicyHandler(
783 power_management_idle_legacy_policies
.Pass(),
784 make_scoped_ptr
<SchemaValidatingPolicyHandler
>(
785 new PowerManagementIdleSettingsPolicyHandler(chrome_schema
)))));
786 handlers
->AddHandler(make_scoped_ptr
<ConfigurationPolicyHandler
>(
787 new LegacyPoliciesDeprecatingPolicyHandler(
788 screen_lock_legacy_policies
.Pass(),
789 make_scoped_ptr
<SchemaValidatingPolicyHandler
>(
790 new ScreenLockDelayPolicyHandler(chrome_schema
)))));
791 handlers
->AddHandler(make_scoped_ptr
<ConfigurationPolicyHandler
>(
792 new ExternalDataPolicyHandler(key::kUserAvatarImage
)));
793 handlers
->AddHandler(make_scoped_ptr
<ConfigurationPolicyHandler
>(
794 new ExternalDataPolicyHandler(key::kWallpaperImage
)));
795 handlers
->AddHandler(make_scoped_ptr
<ConfigurationPolicyHandler
>(
796 new SimpleSchemaValidatingPolicyHandler(
797 key::kSessionLocales
,
801 SimpleSchemaValidatingPolicyHandler::RECOMMENDED_ALLOWED
,
802 SimpleSchemaValidatingPolicyHandler::MANDATORY_PROHIBITED
)));
803 #endif // defined(OS_CHROMEOS)
805 return handlers
.Pass();
808 } // namespace policy