15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
52a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#ifndef CHROME_BROWSER_CHROMEOS_POLICY_CONFIGURATION_POLICY_HANDLER_CHROMEOS_H_
62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define CHROME_BROWSER_CHROMEOS_POLICY_CONFIGURATION_POLICY_HANDLER_CHROMEOS_H_
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
8a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#include "base/basictypes.h"
9a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#include "base/compiler_specific.h"
108bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)#include "chrome/browser/extensions/policy_handlers.h"
11c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chromeos/network/network_ui_data.h"
124e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "components/onc/onc_constants.h"
13a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#include "components/policy/core/browser/configuration_policy_handler.h"
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace base {
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class DictionaryValue;
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class Value;
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace policy {
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
22a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)class Schema;
23a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
24a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)// ConfigurationPolicyHandler for policies referencing external data.
25a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)class ExternalDataPolicyHandler : public TypeCheckingPolicyHandler {
26a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) public:
27a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  explicit ExternalDataPolicyHandler(const char* policy_name);
28a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  virtual ~ExternalDataPolicyHandler();
29a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
30a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  // TypeCheckingPolicyHandler:
31a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  virtual bool CheckPolicySettings(const PolicyMap& policies,
32a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)                                   PolicyErrorMap* errors) OVERRIDE;
33a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
34a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  virtual void ApplyPolicySettings(const PolicyMap& policies,
35a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)                                   PrefValueMap* prefs) OVERRIDE;
36a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
37a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) private:
38a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(ExternalDataPolicyHandler);
39a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)};
40a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// ConfigurationPolicyHandler for validation of the network configuration
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// policies. These actually don't set any preferences, but the handler just
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// generates error messages.
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class NetworkConfigurationPolicyHandler : public TypeCheckingPolicyHandler {
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
46c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  static NetworkConfigurationPolicyHandler* CreateForUserPolicy();
47c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  static NetworkConfigurationPolicyHandler* CreateForDevicePolicy();
48c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual ~NetworkConfigurationPolicyHandler();
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // ConfigurationPolicyHandler methods:
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual bool CheckPolicySettings(const PolicyMap& policies,
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                   PolicyErrorMap* errors) OVERRIDE;
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void ApplyPolicySettings(const PolicyMap& policies,
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                   PrefValueMap* prefs) OVERRIDE;
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void PrepareForDisplaying(PolicyMap* policies) const OVERRIDE;
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private:
59c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  explicit NetworkConfigurationPolicyHandler(
60c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      const char* policy_name,
614e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)      ::onc::ONCSource onc_source,
62ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch      const char* pref_path);
63c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Takes network policy in Value representation and produces an output Value
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // that contains a pretty-printed and sanitized version. In particular, we
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // remove any Passphrases that may be contained in the JSON. Ownership of the
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // return value is transferred to the caller.
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  static base::Value* SanitizeNetworkConfig(const base::Value* config);
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
70c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  // The kind of ONC source that this handler represents. ONCSource
71c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  // distinguishes between user and device policy.
724e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  const ::onc::ONCSource onc_source_;
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
74ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  // The name of the pref to apply the policy to.
75ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  const char* pref_path_;
76ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(NetworkConfigurationPolicyHandler);
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Maps the PinnedLauncherApps policy to the corresponding pref.
818bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)class PinnedLauncherAppsPolicyHandler
828bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)    : public extensions::ExtensionListPolicyHandler {
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  PinnedLauncherAppsPolicyHandler();
855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual ~PinnedLauncherAppsPolicyHandler();
865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // ExtensionListPolicyHandler methods:
885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void ApplyPolicySettings(const PolicyMap& policies,
895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                   PrefValueMap* prefs) OVERRIDE;
905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private:
925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(PinnedLauncherAppsPolicyHandler);
935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
95868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)class ScreenMagnifierPolicyHandler : public IntRangePolicyHandlerBase {
96868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) public:
97868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  ScreenMagnifierPolicyHandler();
98868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  virtual ~ScreenMagnifierPolicyHandler();
99868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
100868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  // IntRangePolicyHandlerBase:
101868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  virtual void ApplyPolicySettings(const PolicyMap& policies,
102868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)                                   PrefValueMap* prefs) OVERRIDE;
103868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
104868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) private:
105868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(ScreenMagnifierPolicyHandler);
106868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)};
107868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
108effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch// Policy handler for login screen power management settings. This does not
109effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch// actually set any prefs, it just checks whether the settings are valid and
110effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch// generates errors if appropriate.
1119ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdochclass LoginScreenPowerManagementPolicyHandler
112effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    : public SchemaValidatingPolicyHandler {
1139ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch public:
114effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  explicit LoginScreenPowerManagementPolicyHandler(const Schema& chrome_schema);
1159ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch  virtual ~LoginScreenPowerManagementPolicyHandler();
1169ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch
117effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  // SchemaValidatingPolicyHandler:
1189ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch  virtual void ApplyPolicySettings(const PolicyMap& policies,
1199ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch                                   PrefValueMap* prefs) OVERRIDE;
1209ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch
1219ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch private:
1229ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch  DISALLOW_COPY_AND_ASSIGN(LoginScreenPowerManagementPolicyHandler);
1239ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch};
1249ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch
125558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch// Handles the deprecated IdleAction policy, so both kIdleActionBattery and
126558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch// kIdleActionAC fall back to the deprecated action.
127558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdochclass DeprecatedIdleActionHandler : public IntRangePolicyHandlerBase {
128558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch public:
129558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch  DeprecatedIdleActionHandler();
130558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch  virtual ~DeprecatedIdleActionHandler();
131558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch
132558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch  // ConfigurationPolicyHandler methods:
133558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch  virtual void ApplyPolicySettings(const PolicyMap& policies,
134558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch                                   PrefValueMap* prefs) OVERRIDE;
135558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch
136558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch private:
137558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch  DISALLOW_COPY_AND_ASSIGN(DeprecatedIdleActionHandler);
138558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch};
139558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch
140a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)class PowerManagementIdleSettingsPolicyHandler
141a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    : public SchemaValidatingPolicyHandler {
142a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) public:
143a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  explicit PowerManagementIdleSettingsPolicyHandler(
144a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      const Schema& chrome_schema);
145a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  virtual ~PowerManagementIdleSettingsPolicyHandler();
146a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
147a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  // SchemaValidatingPolicyHandler:
148a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  virtual void ApplyPolicySettings(const PolicyMap& policies,
149a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)                                   PrefValueMap* prefs) OVERRIDE;
150a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
151a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) private:
152a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(PowerManagementIdleSettingsPolicyHandler);
153a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)};
154a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
155a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)class ScreenLockDelayPolicyHandler : public SchemaValidatingPolicyHandler {
156a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) public:
157a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  explicit ScreenLockDelayPolicyHandler(const Schema& chrome_schema);
158a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  virtual ~ScreenLockDelayPolicyHandler();
159a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
160a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  // SchemaValidatingPolicyHandler:
161a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  virtual void ApplyPolicySettings(const PolicyMap& policies,
162a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)                                   PrefValueMap* prefs) OVERRIDE;
163a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
164a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) private:
165a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(ScreenLockDelayPolicyHandler);
166a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)};
167a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace policy
1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif  // CHROME_BROWSER_CHROMEOS_POLICY_CONFIGURATION_POLICY_HANDLER_CHROMEOS_H_
171