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"
30 #if defined(OS_ANDROID)
31 #include "chrome/browser/search/contextual_search_policy_handler_android.h"
35 #include "chrome/browser/net/disk_cache_dir_policy_handler.h"
36 #include "chrome/browser/policy/file_selection_dialogs_policy_handler.h"
37 #include "chrome/browser/policy/javascript_policy_handler.h"
38 #include "chrome/browser/policy/network_prediction_policy_handler.h"
39 #include "chrome/browser/sessions/restore_on_startup_policy_handler.h"
40 #include "chrome/browser/sync/sync_policy_handler.h"
43 #if defined(OS_CHROMEOS)
44 #include "chrome/browser/chromeos/policy/configuration_policy_handler_chromeos.h"
45 #include "chromeos/chromeos_pref_names.h"
46 #include "chromeos/dbus/power_policy_controller.h"
47 #include "components/user_manager/user.h"
48 #include "components/user_manager/user_manager.h"
49 #include "ui/chromeos/accessibility_types.h"
52 #if !defined(OS_ANDROID) && !defined(OS_IOS)
53 #include "chrome/browser/download/download_dir_policy_handler.h"
56 #if defined(ENABLE_EXTENSIONS)
57 #include "chrome/browser/extensions/api/messaging/native_messaging_policy_handler.h"
58 #include "chrome/browser/extensions/extension_management_constants.h"
59 #include "chrome/browser/extensions/policy_handlers.h"
60 #include "extensions/browser/pref_names.h"
61 #include "extensions/common/manifest.h"
68 // List of policy types to preference names. This is used for simple policies
69 // that directly map to a single preference.
70 const PolicyToPreferenceMapEntry kSimplePolicyMap
[] = {
71 { key::kHomepageLocation
,
73 base::Value::TYPE_STRING
},
74 { key::kHomepageIsNewTabPage
,
75 prefs::kHomePageIsNewTabPage
,
76 base::Value::TYPE_BOOLEAN
},
77 { key::kRestoreOnStartupURLs
,
78 prefs::kURLsToRestoreOnStartup
,
79 base::Value::TYPE_LIST
},
80 { key::kAlternateErrorPagesEnabled
,
81 prefs::kAlternateErrorPagesEnabled
,
82 base::Value::TYPE_BOOLEAN
},
83 { key::kSearchSuggestEnabled
,
84 prefs::kSearchSuggestEnabled
,
85 base::Value::TYPE_BOOLEAN
},
86 { key::kBuiltInDnsClientEnabled
,
87 prefs::kBuiltInDnsClientEnabled
,
88 base::Value::TYPE_BOOLEAN
},
89 { key::kWPADQuickCheckEnabled
,
90 prefs::kQuickCheckEnabled
,
91 base::Value::TYPE_BOOLEAN
},
94 base::Value::TYPE_BOOLEAN
},
95 { key::kSafeBrowsingEnabled
,
96 prefs::kSafeBrowsingEnabled
,
97 base::Value::TYPE_BOOLEAN
},
98 { key::kForceSafeSearch
,
99 prefs::kForceSafeSearch
,
100 base::Value::TYPE_BOOLEAN
},
101 { key::kForceGoogleSafeSearch
,
102 prefs::kForceGoogleSafeSearch
,
103 base::Value::TYPE_BOOLEAN
},
104 { key::kForceYouTubeSafetyMode
,
105 prefs::kForceYouTubeSafetyMode
,
106 base::Value::TYPE_BOOLEAN
},
107 { key::kPasswordManagerEnabled
,
108 password_manager::prefs::kPasswordManagerSavingEnabled
,
109 base::Value::TYPE_BOOLEAN
},
110 { key::kPasswordManagerAllowShowPasswords
,
111 password_manager::prefs::kPasswordManagerAllowShowPasswords
,
112 base::Value::TYPE_BOOLEAN
},
113 { key::kPrintingEnabled
,
114 prefs::kPrintingEnabled
,
115 base::Value::TYPE_BOOLEAN
},
116 { key::kDisablePrintPreview
,
117 prefs::kPrintPreviewDisabled
,
118 base::Value::TYPE_BOOLEAN
},
119 { key::kMetricsReportingEnabled
,
120 prefs::kMetricsReportingEnabled
,
121 base::Value::TYPE_BOOLEAN
},
122 { key::kApplicationLocaleValue
,
123 prefs::kApplicationLocale
,
124 base::Value::TYPE_STRING
},
125 { key::kDisabledPlugins
,
126 prefs::kPluginsDisabledPlugins
,
127 base::Value::TYPE_LIST
},
128 { key::kDisabledPluginsExceptions
,
129 prefs::kPluginsDisabledPluginsExceptions
,
130 base::Value::TYPE_LIST
},
131 { key::kEnabledPlugins
,
132 prefs::kPluginsEnabledPlugins
,
133 base::Value::TYPE_LIST
},
134 { key::kShowHomeButton
,
135 prefs::kShowHomeButton
,
136 base::Value::TYPE_BOOLEAN
},
137 { key::kSavingBrowserHistoryDisabled
,
138 prefs::kSavingBrowserHistoryDisabled
,
139 base::Value::TYPE_BOOLEAN
},
140 { key::kAllowDeletingBrowserHistory
,
141 prefs::kAllowDeletingBrowserHistory
,
142 base::Value::TYPE_BOOLEAN
},
143 { key::kDeveloperToolsDisabled
,
144 prefs::kDevToolsDisabled
,
145 base::Value::TYPE_BOOLEAN
},
146 { key::kBlockThirdPartyCookies
,
147 prefs::kBlockThirdPartyCookies
,
148 base::Value::TYPE_BOOLEAN
},
149 { key::kDefaultCookiesSetting
,
150 prefs::kManagedDefaultCookiesSetting
,
151 base::Value::TYPE_INTEGER
},
152 { key::kDefaultImagesSetting
,
153 prefs::kManagedDefaultImagesSetting
,
154 base::Value::TYPE_INTEGER
},
155 { key::kDefaultPluginsSetting
,
156 prefs::kManagedDefaultPluginsSetting
,
157 base::Value::TYPE_INTEGER
},
158 { key::kDefaultPopupsSetting
,
159 prefs::kManagedDefaultPopupsSetting
,
160 base::Value::TYPE_INTEGER
},
161 { key::kAutoSelectCertificateForUrls
,
162 prefs::kManagedAutoSelectCertificateForUrls
,
163 base::Value::TYPE_LIST
},
164 { key::kCookiesAllowedForUrls
,
165 prefs::kManagedCookiesAllowedForUrls
,
166 base::Value::TYPE_LIST
},
167 { key::kCookiesBlockedForUrls
,
168 prefs::kManagedCookiesBlockedForUrls
,
169 base::Value::TYPE_LIST
},
170 { key::kCookiesSessionOnlyForUrls
,
171 prefs::kManagedCookiesSessionOnlyForUrls
,
172 base::Value::TYPE_LIST
},
173 { key::kImagesAllowedForUrls
,
174 prefs::kManagedImagesAllowedForUrls
,
175 base::Value::TYPE_LIST
},
176 { key::kImagesBlockedForUrls
,
177 prefs::kManagedImagesBlockedForUrls
,
178 base::Value::TYPE_LIST
},
179 { key::kJavaScriptAllowedForUrls
,
180 prefs::kManagedJavaScriptAllowedForUrls
,
181 base::Value::TYPE_LIST
},
182 { key::kJavaScriptBlockedForUrls
,
183 prefs::kManagedJavaScriptBlockedForUrls
,
184 base::Value::TYPE_LIST
},
185 { key::kPluginsAllowedForUrls
,
186 prefs::kManagedPluginsAllowedForUrls
,
187 base::Value::TYPE_LIST
},
188 { key::kPluginsBlockedForUrls
,
189 prefs::kManagedPluginsBlockedForUrls
,
190 base::Value::TYPE_LIST
},
191 { key::kPopupsAllowedForUrls
,
192 prefs::kManagedPopupsAllowedForUrls
,
193 base::Value::TYPE_LIST
},
194 { key::kPopupsBlockedForUrls
,
195 prefs::kManagedPopupsBlockedForUrls
,
196 base::Value::TYPE_LIST
},
197 { key::kNotificationsAllowedForUrls
,
198 prefs::kManagedNotificationsAllowedForUrls
,
199 base::Value::TYPE_LIST
},
200 { key::kNotificationsBlockedForUrls
,
201 prefs::kManagedNotificationsBlockedForUrls
,
202 base::Value::TYPE_LIST
},
203 { key::kDefaultNotificationsSetting
,
204 prefs::kManagedDefaultNotificationsSetting
,
205 base::Value::TYPE_INTEGER
},
206 { key::kDefaultGeolocationSetting
,
207 prefs::kManagedDefaultGeolocationSetting
,
208 base::Value::TYPE_INTEGER
},
209 { key::kSigninAllowed
,
210 prefs::kSigninAllowed
,
211 base::Value::TYPE_BOOLEAN
},
212 { key::kDisableSSLRecordSplitting
,
213 prefs::kDisableSSLRecordSplitting
,
214 base::Value::TYPE_BOOLEAN
},
215 { key::kEnableOnlineRevocationChecks
,
216 prefs::kCertRevocationCheckingEnabled
,
217 base::Value::TYPE_BOOLEAN
},
218 { key::kRequireOnlineRevocationChecksForLocalAnchors
,
219 prefs::kCertRevocationCheckingRequiredLocalAnchors
,
220 base::Value::TYPE_BOOLEAN
},
223 base::Value::TYPE_STRING
},
224 { key::kDisableAuthNegotiateCnameLookup
,
225 prefs::kDisableAuthNegotiateCnameLookup
,
226 base::Value::TYPE_BOOLEAN
},
227 { key::kEnableAuthNegotiatePort
,
228 prefs::kEnableAuthNegotiatePort
,
229 base::Value::TYPE_BOOLEAN
},
230 { key::kAuthServerWhitelist
,
231 prefs::kAuthServerWhitelist
,
232 base::Value::TYPE_STRING
},
233 { key::kAuthNegotiateDelegateWhitelist
,
234 prefs::kAuthNegotiateDelegateWhitelist
,
235 base::Value::TYPE_STRING
},
236 { key::kGSSAPILibraryName
,
237 prefs::kGSSAPILibraryName
,
238 base::Value::TYPE_STRING
},
239 { key::kAllowCrossOriginAuthPrompt
,
240 prefs::kAllowCrossOriginAuthPrompt
,
241 base::Value::TYPE_BOOLEAN
},
242 { key::kDisable3DAPIs
,
243 prefs::kDisable3DAPIs
,
244 base::Value::TYPE_BOOLEAN
},
245 { key::kDisablePluginFinder
,
246 prefs::kDisablePluginFinder
,
247 base::Value::TYPE_BOOLEAN
},
248 { key::kDiskCacheSize
,
249 prefs::kDiskCacheSize
,
250 base::Value::TYPE_INTEGER
},
251 { key::kMediaCacheSize
,
252 prefs::kMediaCacheSize
,
253 base::Value::TYPE_INTEGER
},
254 { key::kPolicyRefreshRate
,
255 policy_prefs::kUserPolicyRefreshRate
,
256 base::Value::TYPE_INTEGER
},
257 { key::kDevicePolicyRefreshRate
,
258 prefs::kDevicePolicyRefreshRate
,
259 base::Value::TYPE_INTEGER
},
260 { key::kDefaultBrowserSettingEnabled
,
261 prefs::kDefaultBrowserSettingEnabled
,
262 base::Value::TYPE_BOOLEAN
},
263 { key::kCloudPrintProxyEnabled
,
264 prefs::kCloudPrintProxyEnabled
,
265 base::Value::TYPE_BOOLEAN
},
266 { key::kCloudPrintSubmitEnabled
,
267 prefs::kCloudPrintSubmitEnabled
,
268 base::Value::TYPE_BOOLEAN
},
269 { key::kTranslateEnabled
,
270 prefs::kEnableTranslate
,
271 base::Value::TYPE_BOOLEAN
},
272 { key::kAllowOutdatedPlugins
,
273 prefs::kPluginsAllowOutdated
,
274 base::Value::TYPE_BOOLEAN
},
275 { key::kAlwaysAuthorizePlugins
,
276 prefs::kPluginsAlwaysAuthorize
,
277 base::Value::TYPE_BOOLEAN
},
278 { key::kBookmarkBarEnabled
,
279 bookmarks::prefs::kShowBookmarkBar
,
280 base::Value::TYPE_BOOLEAN
},
281 { key::kEditBookmarksEnabled
,
282 bookmarks::prefs::kEditBookmarksEnabled
,
283 base::Value::TYPE_BOOLEAN
},
284 { key::kShowAppsShortcutInBookmarkBar
,
285 bookmarks::prefs::kShowAppsShortcutInBookmarkBar
,
286 base::Value::TYPE_BOOLEAN
},
287 { key::kAllowFileSelectionDialogs
,
288 prefs::kAllowFileSelectionDialogs
,
289 base::Value::TYPE_BOOLEAN
},
290 { key::kImportBookmarks
,
291 prefs::kImportBookmarks
,
292 base::Value::TYPE_BOOLEAN
},
293 { key::kImportHistory
,
294 prefs::kImportHistory
,
295 base::Value::TYPE_BOOLEAN
},
296 { key::kImportHomepage
,
297 prefs::kImportHomepage
,
298 base::Value::TYPE_BOOLEAN
},
299 { key::kImportSearchEngine
,
300 prefs::kImportSearchEngine
,
301 base::Value::TYPE_BOOLEAN
},
302 { key::kImportSavedPasswords
,
303 prefs::kImportSavedPasswords
,
304 base::Value::TYPE_BOOLEAN
},
305 { key::kImportAutofillFormData
,
306 prefs::kImportAutofillFormData
,
307 base::Value::TYPE_BOOLEAN
},
308 { key::kMaxConnectionsPerProxy
,
309 prefs::kMaxConnectionsPerProxy
,
310 base::Value::TYPE_INTEGER
},
311 { key::kURLWhitelist
,
312 policy_prefs::kUrlWhitelist
,
313 base::Value::TYPE_LIST
},
314 { key::kRestrictSigninToPattern
,
315 prefs::kGoogleServicesUsernamePattern
,
316 base::Value::TYPE_STRING
},
317 { key::kDefaultMediaStreamSetting
,
318 prefs::kManagedDefaultMediaStreamSetting
,
319 base::Value::TYPE_INTEGER
},
320 { key::kDisableSafeBrowsingProceedAnyway
,
321 prefs::kSafeBrowsingProceedAnywayDisabled
,
322 base::Value::TYPE_BOOLEAN
},
324 #if defined(ENABLE_SPELLCHECK)
325 { key::kSpellCheckServiceEnabled
,
326 prefs::kSpellCheckUseSpellingService
,
327 base::Value::TYPE_BOOLEAN
},
328 #endif // defined(ENABLE_SPELLCHECK)
330 { key::kDisableScreenshots
,
331 prefs::kDisableScreenshots
,
332 base::Value::TYPE_BOOLEAN
},
333 { key::kAudioCaptureAllowed
,
334 prefs::kAudioCaptureAllowed
,
335 base::Value::TYPE_BOOLEAN
},
336 { key::kVideoCaptureAllowed
,
337 prefs::kVideoCaptureAllowed
,
338 base::Value::TYPE_BOOLEAN
},
339 { key::kAudioCaptureAllowedUrls
,
340 prefs::kAudioCaptureAllowedUrls
,
341 base::Value::TYPE_LIST
},
342 { key::kVideoCaptureAllowedUrls
,
343 prefs::kVideoCaptureAllowedUrls
,
344 base::Value::TYPE_LIST
},
345 { key::kHideWebStoreIcon
,
346 prefs::kHideWebStoreIcon
,
347 base::Value::TYPE_BOOLEAN
},
348 { key::kVariationsRestrictParameter
,
349 prefs::kVariationsRestrictParameter
,
350 base::Value::TYPE_STRING
},
351 { key::kSupervisedUserCreationEnabled
,
352 prefs::kSupervisedUserCreationAllowed
,
353 base::Value::TYPE_BOOLEAN
},
354 { key::kForceEphemeralProfiles
,
355 prefs::kForceEphemeralProfiles
,
356 base::Value::TYPE_BOOLEAN
},
357 { key::kSSLVersionMin
,
358 prefs::kSSLVersionMin
,
359 base::Value::TYPE_STRING
},
360 { key::kSSLVersionFallbackMin
,
361 prefs::kSSLVersionFallbackMin
,
362 base::Value::TYPE_STRING
},
364 #if !defined(OS_MACOSX) && !defined(OS_IOS)
365 { key::kFullscreenAllowed
,
366 prefs::kFullscreenAllowed
,
367 base::Value::TYPE_BOOLEAN
},
368 #if defined(ENABLE_EXTENSIONS)
369 { key::kFullscreenAllowed
,
370 extensions::pref_names::kAppFullscreenAllowed
,
371 base::Value::TYPE_BOOLEAN
},
372 #endif // defined(ENABLE_EXTENSIONS)
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 chromeos::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::kAccessibilityLargeCursorEnabled
,
426 base::Value::TYPE_BOOLEAN
},
427 { key::kSpokenFeedbackEnabled
,
428 prefs::kAccessibilitySpokenFeedbackEnabled
,
429 base::Value::TYPE_BOOLEAN
},
430 { key::kHighContrastEnabled
,
431 prefs::kAccessibilityHighContrastEnabled
,
432 base::Value::TYPE_BOOLEAN
},
433 { key::kVirtualKeyboardEnabled
,
434 prefs::kAccessibilityVirtualKeyboardEnabled
,
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 { key::kTouchVirtualKeyboardEnabled
,
461 prefs::kTouchVirtualKeyboardEnabled
,
462 base::Value::TYPE_BOOLEAN
},
463 { key::kEasyUnlockAllowed
,
464 prefs::kEasyUnlockAllowed
,
465 base::Value::TYPE_BOOLEAN
},
466 { key::kCaptivePortalAuthenticationIgnoresProxy
,
467 prefs::kCaptivePortalAuthenticationIgnoresProxy
,
468 base::Value::TYPE_BOOLEAN
},
469 #endif // defined(OS_CHROMEOS)
471 #if !defined(OS_MACOSX) && !defined(OS_CHROMEOS)
472 { key::kBackgroundModeEnabled
,
473 prefs::kBackgroundModeEnabled
,
474 base::Value::TYPE_BOOLEAN
},
475 #endif // !defined(OS_MACOSX) && !defined(OS_CHROMEOS)
477 #if defined(OS_ANDROID)
478 { key::kDataCompressionProxyEnabled
,
479 data_reduction_proxy::prefs::kDataReductionProxyEnabled
,
480 base::Value::TYPE_BOOLEAN
},
481 #endif // defined(OS_ANDROID)
483 #if !defined(OS_CHROMEOS) && !defined(OS_ANDROID) && !defined(OS_IOS)
484 { key::kNativeMessagingUserLevelHosts
,
485 extensions::pref_names::kNativeMessagingUserLevelHosts
,
486 base::Value::TYPE_BOOLEAN
},
487 { key::kBrowserGuestModeEnabled
,
488 prefs::kBrowserGuestModeEnabled
,
489 base::Value::TYPE_BOOLEAN
},
490 { key::kBrowserAddPersonEnabled
,
491 prefs::kBrowserAddPersonEnabled
,
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 for (size_t index
= 0;
501 index
< extensions::schema_constants::kAllowedTypesMapSize
;
503 const extensions::schema_constants::AllowedTypesMapEntry
& entry
=
504 extensions::schema_constants::kAllowedTypesMap
[index
];
505 result
->push_back(new StringMappingListPolicyHandler::MappingEntry(
507 scoped_ptr
<base::Value
>(
508 new base::FundamentalValue(entry
.manifest_type
))));
514 void GetDeprecatedFeaturesMap(
515 ScopedVector
<StringMappingListPolicyHandler::MappingEntry
>* result
) {
516 // Maps feature tags as specified in policy to the corresponding switch to
519 #endif // !defined(OS_IOS)
523 void PopulatePolicyHandlerParameters(PolicyHandlerParameters
* parameters
) {
524 #if defined(OS_CHROMEOS)
525 if (user_manager::UserManager::IsInitialized()) {
526 const user_manager::User
* user
=
527 user_manager::UserManager::Get()->GetActiveUser();
529 parameters
->user_id_hash
= user
->username_hash();
534 scoped_ptr
<ConfigurationPolicyHandlerList
> BuildHandlerList(
535 const Schema
& chrome_schema
) {
536 scoped_ptr
<ConfigurationPolicyHandlerList
> handlers(
537 new ConfigurationPolicyHandlerList(
538 base::Bind(&PopulatePolicyHandlerParameters
),
539 base::Bind(&GetChromePolicyDetails
)));
540 for (size_t i
= 0; i
< arraysize(kSimplePolicyMap
); ++i
) {
541 handlers
->AddHandler(make_scoped_ptr(new SimplePolicyHandler(
542 kSimplePolicyMap
[i
].policy_name
, kSimplePolicyMap
[i
].preference_path
,
543 kSimplePolicyMap
[i
].value_type
)));
546 handlers
->AddHandler(make_scoped_ptr(new AutofillPolicyHandler()));
547 handlers
->AddHandler(make_scoped_ptr(new DefaultSearchPolicyHandler()));
548 handlers
->AddHandler(make_scoped_ptr(new IncognitoModePolicyHandler()));
549 handlers
->AddHandler(
550 make_scoped_ptr(new ManagedBookmarksPolicyHandler(chrome_schema
)));
551 handlers
->AddHandler(make_scoped_ptr(new ProxyPolicyHandler()));
552 handlers
->AddHandler(make_scoped_ptr(new URLBlacklistPolicyHandler()));
554 #if defined(OS_ANDROID)
555 handlers
->AddHandler(
556 make_scoped_ptr(new ContextualSearchPolicyHandlerAndroid()));
560 handlers
->AddHandler(
561 make_scoped_ptr(new FileSelectionDialogsPolicyHandler()));
562 handlers
->AddHandler(make_scoped_ptr(new JavascriptPolicyHandler()));
563 handlers
->AddHandler(make_scoped_ptr(new NetworkPredictionPolicyHandler()));
564 handlers
->AddHandler(make_scoped_ptr(new RestoreOnStartupPolicyHandler()));
565 handlers
->AddHandler(make_scoped_ptr(new browser_sync::SyncPolicyHandler()));
567 handlers
->AddHandler(make_scoped_ptr(new StringMappingListPolicyHandler(
568 key::kEnableDeprecatedWebPlatformFeatures
,
569 prefs::kEnableDeprecatedWebPlatformFeatures
,
570 base::Bind(GetDeprecatedFeaturesMap
))));
571 #endif // !defined(OS_IOS)
573 #if defined(ENABLE_EXTENSIONS)
574 handlers
->AddHandler(
575 make_scoped_ptr(new extensions::ExtensionListPolicyHandler(
576 key::kExtensionInstallWhitelist
,
577 extensions::pref_names::kInstallAllowList
, false)));
578 handlers
->AddHandler(
579 make_scoped_ptr(new extensions::ExtensionListPolicyHandler(
580 key::kExtensionInstallBlacklist
,
581 extensions::pref_names::kInstallDenyList
, true)));
582 handlers
->AddHandler(make_scoped_ptr(
583 new extensions::ExtensionInstallForcelistPolicyHandler()));
584 handlers
->AddHandler(
585 make_scoped_ptr(new extensions::ExtensionURLPatternListPolicyHandler(
586 key::kExtensionInstallSources
,
587 extensions::pref_names::kAllowedInstallSites
)));
588 handlers
->AddHandler(make_scoped_ptr(new StringMappingListPolicyHandler(
589 key::kExtensionAllowedTypes
, extensions::pref_names::kAllowedTypes
,
590 base::Bind(GetExtensionAllowedTypesMap
))));
591 handlers
->AddHandler(make_scoped_ptr(
592 new extensions::ExtensionSettingsPolicyHandler(chrome_schema
)));
595 #if !defined(OS_CHROMEOS) && !defined(OS_ANDROID) && !defined(OS_IOS)
596 handlers
->AddHandler(make_scoped_ptr(new DiskCacheDirPolicyHandler()));
598 handlers
->AddHandler(
599 make_scoped_ptr(new extensions::NativeMessagingHostListPolicyHandler(
600 key::kNativeMessagingWhitelist
,
601 extensions::pref_names::kNativeMessagingWhitelist
, false)));
602 handlers
->AddHandler(
603 make_scoped_ptr(new extensions::NativeMessagingHostListPolicyHandler(
604 key::kNativeMessagingBlacklist
,
605 extensions::pref_names::kNativeMessagingBlacklist
, true)));
606 #endif // !defined(OS_CHROMEOS) && !defined(OS_ANDROID) && !defined(OS_IOS)
608 #if !defined(OS_ANDROID) && !defined(OS_IOS)
609 handlers
->AddHandler(make_scoped_ptr(new DownloadDirPolicyHandler
));
611 handlers
->AddHandler(make_scoped_ptr(new SimpleSchemaValidatingPolicyHandler(
612 key::kRegisteredProtocolHandlers
,
613 prefs::kPolicyRegisteredProtocolHandlers
, chrome_schema
, SCHEMA_STRICT
,
614 SimpleSchemaValidatingPolicyHandler::RECOMMENDED_ALLOWED
,
615 SimpleSchemaValidatingPolicyHandler::MANDATORY_PROHIBITED
)));
618 #if defined(OS_CHROMEOS)
619 handlers
->AddHandler(
620 make_scoped_ptr(new extensions::ExtensionListPolicyHandler(
621 key::kAttestationExtensionWhitelist
,
622 prefs::kAttestationExtensionWhitelist
, false)));
623 handlers
->AddHandler(make_scoped_ptr(
624 NetworkConfigurationPolicyHandler::CreateForDevicePolicy()));
625 handlers
->AddHandler(make_scoped_ptr(
626 NetworkConfigurationPolicyHandler::CreateForUserPolicy()));
627 handlers
->AddHandler(make_scoped_ptr(new PinnedLauncherAppsPolicyHandler()));
628 handlers
->AddHandler(make_scoped_ptr(new ScreenMagnifierPolicyHandler()));
629 handlers
->AddHandler(make_scoped_ptr(
630 new LoginScreenPowerManagementPolicyHandler(chrome_schema
)));
632 ScopedVector
<ConfigurationPolicyHandler
>
633 power_management_idle_legacy_policies
;
634 power_management_idle_legacy_policies
.push_back(
635 new IntRangePolicyHandler(key::kScreenDimDelayAC
,
636 prefs::kPowerAcScreenDimDelayMs
,
640 power_management_idle_legacy_policies
.push_back(
641 new IntRangePolicyHandler(key::kScreenOffDelayAC
,
642 prefs::kPowerAcScreenOffDelayMs
,
646 power_management_idle_legacy_policies
.push_back(
647 new IntRangePolicyHandler(key::kIdleWarningDelayAC
,
648 prefs::kPowerAcIdleWarningDelayMs
,
652 power_management_idle_legacy_policies
.push_back(new IntRangePolicyHandler(
653 key::kIdleDelayAC
, prefs::kPowerAcIdleDelayMs
, 0, INT_MAX
, true));
654 power_management_idle_legacy_policies
.push_back(
655 new IntRangePolicyHandler(key::kScreenDimDelayBattery
,
656 prefs::kPowerBatteryScreenDimDelayMs
,
660 power_management_idle_legacy_policies
.push_back(
661 new IntRangePolicyHandler(key::kScreenOffDelayBattery
,
662 prefs::kPowerBatteryScreenOffDelayMs
,
666 power_management_idle_legacy_policies
.push_back(
667 new IntRangePolicyHandler(key::kIdleWarningDelayBattery
,
668 prefs::kPowerBatteryIdleWarningDelayMs
,
672 power_management_idle_legacy_policies
.push_back(
673 new IntRangePolicyHandler(key::kIdleDelayBattery
,
674 prefs::kPowerBatteryIdleDelayMs
,
678 power_management_idle_legacy_policies
.push_back(new IntRangePolicyHandler(
680 prefs::kPowerAcIdleAction
,
681 chromeos::PowerPolicyController::ACTION_SUSPEND
,
682 chromeos::PowerPolicyController::ACTION_DO_NOTHING
,
684 power_management_idle_legacy_policies
.push_back(new IntRangePolicyHandler(
685 key::kIdleActionBattery
,
686 prefs::kPowerBatteryIdleAction
,
687 chromeos::PowerPolicyController::ACTION_SUSPEND
,
688 chromeos::PowerPolicyController::ACTION_DO_NOTHING
,
690 power_management_idle_legacy_policies
.push_back(
691 new DeprecatedIdleActionHandler());
693 ScopedVector
<ConfigurationPolicyHandler
> screen_lock_legacy_policies
;
694 screen_lock_legacy_policies
.push_back(
695 new IntRangePolicyHandler(key::kScreenLockDelayAC
,
696 prefs::kPowerAcScreenLockDelayMs
,
700 screen_lock_legacy_policies
.push_back(
701 new IntRangePolicyHandler(key::kScreenLockDelayBattery
,
702 prefs::kPowerBatteryScreenLockDelayMs
,
707 handlers
->AddHandler(make_scoped_ptr(new IntRangePolicyHandler(
708 key::kSAMLOfflineSigninTimeLimit
, prefs::kSAMLOfflineSigninTimeLimit
, -1,
710 handlers
->AddHandler(make_scoped_ptr(new IntRangePolicyHandler(
711 key::kLidCloseAction
, prefs::kPowerLidClosedAction
,
712 chromeos::PowerPolicyController::ACTION_SUSPEND
,
713 chromeos::PowerPolicyController::ACTION_DO_NOTHING
, false)));
714 handlers
->AddHandler(make_scoped_ptr(new IntPercentageToDoublePolicyHandler(
715 key::kPresentationScreenDimDelayScale
,
716 prefs::kPowerPresentationScreenDimDelayFactor
, 100, INT_MAX
, true)));
717 handlers
->AddHandler(make_scoped_ptr(new IntPercentageToDoublePolicyHandler(
718 key::kUserActivityScreenDimDelayScale
,
719 prefs::kPowerUserActivityScreenDimDelayFactor
, 100, INT_MAX
, true)));
720 handlers
->AddHandler(make_scoped_ptr(new IntRangePolicyHandler(
721 key::kUptimeLimit
, prefs::kUptimeLimit
, 3600, INT_MAX
, true)));
722 handlers
->AddHandler(make_scoped_ptr(new IntRangePolicyHandler(
723 key::kDeviceLoginScreenDefaultScreenMagnifierType
, NULL
, 0,
724 ui::MAGNIFIER_FULL
, false)));
725 // TODO(binjin): Remove LegacyPoliciesDeprecatingPolicyHandler for these two
726 // policies once deprecation of legacy power management policies is done.
727 // http://crbug.com/346229
728 handlers
->AddHandler(
729 make_scoped_ptr(new LegacyPoliciesDeprecatingPolicyHandler(
730 power_management_idle_legacy_policies
.Pass(),
732 new PowerManagementIdleSettingsPolicyHandler(chrome_schema
)))));
733 handlers
->AddHandler(
734 make_scoped_ptr(new LegacyPoliciesDeprecatingPolicyHandler(
735 screen_lock_legacy_policies
.Pass(),
736 make_scoped_ptr(new ScreenLockDelayPolicyHandler(chrome_schema
)))));
737 handlers
->AddHandler(
738 make_scoped_ptr(new ExternalDataPolicyHandler(key::kUserAvatarImage
)));
739 handlers
->AddHandler(
740 make_scoped_ptr(new ExternalDataPolicyHandler(key::kWallpaperImage
)));
741 handlers
->AddHandler(make_scoped_ptr(new SimpleSchemaValidatingPolicyHandler(
742 key::kSessionLocales
, NULL
, chrome_schema
, SCHEMA_STRICT
,
743 SimpleSchemaValidatingPolicyHandler::RECOMMENDED_ALLOWED
,
744 SimpleSchemaValidatingPolicyHandler::MANDATORY_PROHIBITED
)));
745 #endif // defined(OS_CHROMEOS)
747 return handlers
.Pass();
750 } // namespace policy