configuration_policy_handler_chromeos.cc revision 9ab5563a3196760eb381d102cbb2bc0f7abc6a50
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)#include "chrome/browser/chromeos/policy/configuration_policy_handler_chromeos.h"
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <string>
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
9868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "ash/magnifier/magnifier_constants.h"
107dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "base/callback.h"
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/json/json_reader.h"
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/json/json_writer.h"
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/scoped_ptr.h"
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/prefs/pref_value_map.h"
155e3f23d412006dc4db4e659864679f29341e113fTorne (Richard Coles)#include "base/strings/string_util.h"
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/values.h"
179ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch#include "chrome/browser/chromeos/policy/login_screen_power_management_policy.h"
187dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "chrome/browser/policy/external_data_fetcher.h"
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/policy/policy_error_map.h"
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/policy/policy_map.h"
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/ash/chrome_launcher_prefs.h"
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/pref_names.h"
232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chromeos/network/onc/onc_constants.h"
242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chromeos/network/onc/onc_signature.h"
252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chromeos/network/onc/onc_utils.h"
262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chromeos/network/onc/onc_validator.h"
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "grit/generated_resources.h"
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "policy/policy_constants.h"
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace onc = chromeos::onc;
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace policy {
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
34c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// static
35c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)NetworkConfigurationPolicyHandler*
36c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)NetworkConfigurationPolicyHandler::CreateForUserPolicy() {
37c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  return new NetworkConfigurationPolicyHandler(
38c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      key::kOpenNetworkConfiguration, onc::ONC_SOURCE_USER_POLICY);
39c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}
40c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
41c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// static
42c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)NetworkConfigurationPolicyHandler*
43c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)NetworkConfigurationPolicyHandler::CreateForDevicePolicy() {
44c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  return new NetworkConfigurationPolicyHandler(
45c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      key::kDeviceOpenNetworkConfiguration, onc::ONC_SOURCE_DEVICE_POLICY);
46c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)NetworkConfigurationPolicyHandler::~NetworkConfigurationPolicyHandler() {}
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool NetworkConfigurationPolicyHandler::CheckPolicySettings(
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const PolicyMap& policies,
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    PolicyErrorMap* errors) {
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const base::Value* value;
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (!CheckAndGetValue(policies, errors, &value))
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return false;
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (value) {
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    std::string onc_blob;
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    value->GetAsString(&onc_blob);
602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    scoped_ptr<base::DictionaryValue> root_dict =
612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        onc::ReadDictionaryFromJson(onc_blob);
622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    if (root_dict.get() == NULL) {
632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      errors->AddError(policy_name(), IDS_POLICY_NETWORK_CONFIG_PARSE_FAILED);
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      return false;
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    // Validate the ONC dictionary. We are liberal and ignore unknown field
682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    // names and ignore invalid field names in kRecommended arrays.
692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    onc::Validator validator(false,  // Ignore unknown fields.
702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                             false,  // Ignore invalid recommended field names.
712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                             true,  // Fail on missing fields.
722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                             true);  // Validate for managed ONC
732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    validator.SetOncSource(onc_source_);
742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    // ONC policies are always unencrypted.
762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    onc::Validator::Result validation_result;
772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    root_dict = validator.ValidateAndRepairObject(
782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        &onc::kToplevelConfigurationSignature, *root_dict, &validation_result);
792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    if (validation_result == onc::Validator::VALID_WITH_WARNINGS) {
802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      errors->AddError(policy_name(),
812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                       IDS_POLICY_NETWORK_CONFIG_IMPORT_PARTIAL);
822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    } else if (validation_result == onc::Validator::INVALID) {
832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      errors->AddError(policy_name(), IDS_POLICY_NETWORK_CONFIG_IMPORT_FAILED);
842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    }
852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    // In any case, don't reject the policy as some networks or certificates
872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    // could still be applied.
885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return true;
915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void NetworkConfigurationPolicyHandler::ApplyPolicySettings(
945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const PolicyMap& policies,
955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    PrefValueMap* prefs) {
965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Network policy is read directly from the provider and injected into
975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // NetworkLibrary, so no need to convert the policy settings into prefs.
985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void NetworkConfigurationPolicyHandler::PrepareForDisplaying(
1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    PolicyMap* policies) const {
1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const PolicyMap::Entry* entry = policies->Get(policy_name());
1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (!entry)
1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return;
1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  base::Value* sanitized_config = SanitizeNetworkConfig(entry->value);
1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (!sanitized_config)
1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    sanitized_config = base::Value::CreateNullValue();
1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1097dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  policies->Set(policy_name(), entry->level, entry->scope,
1107dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch                sanitized_config, NULL);
1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
113c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)NetworkConfigurationPolicyHandler::NetworkConfigurationPolicyHandler(
114c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    const char* policy_name,
115c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    chromeos::onc::ONCSource onc_source)
116c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    : TypeCheckingPolicyHandler(policy_name, base::Value::TYPE_STRING),
117c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      onc_source_(onc_source) {
118c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}
119c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// static
1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)base::Value* NetworkConfigurationPolicyHandler::SanitizeNetworkConfig(
1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const base::Value* config) {
1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::string json_string;
1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (!config->GetAsString(&json_string))
1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return NULL;
1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
127c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  scoped_ptr<base::DictionaryValue> toplevel_dict =
128c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      onc::ReadDictionaryFromJson(json_string);
129c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  if (!toplevel_dict)
1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return NULL;
1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
132c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  // Placeholder to insert in place of the filtered setting.
133c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  const char kPlaceholder[] = "********";
134c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
135c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  toplevel_dict = onc::MaskCredentialsInOncObject(
136c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      onc::kToplevelConfigurationSignature,
137c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      *toplevel_dict,
138c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      kPlaceholder);
1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
140c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  base::JSONWriter::WriteWithOptions(toplevel_dict.get(),
1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                     base::JSONWriter::OPTIONS_DO_NOT_ESCAPE |
1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                         base::JSONWriter::OPTIONS_PRETTY_PRINT,
1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                     &json_string);
1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return base::Value::CreateStringValue(json_string);
1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)PinnedLauncherAppsPolicyHandler::PinnedLauncherAppsPolicyHandler()
1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    : ExtensionListPolicyHandler(key::kPinnedLauncherApps,
1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                 prefs::kPinnedLauncherApps,
1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                 false) {}
1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)PinnedLauncherAppsPolicyHandler::~PinnedLauncherAppsPolicyHandler() {}
1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void PinnedLauncherAppsPolicyHandler::ApplyPolicySettings(
1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const PolicyMap& policies,
1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    PrefValueMap* prefs) {
1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  PolicyErrorMap errors;
1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const base::Value* policy_value = policies.GetValue(policy_name());
1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const base::ListValue* policy_list = NULL;
1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (policy_value && policy_value->GetAsList(&policy_list) && policy_list) {
1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    base::ListValue* pinned_apps_list = new base::ListValue();
1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    for (base::ListValue::const_iterator entry(policy_list->begin());
1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)         entry != policy_list->end(); ++entry) {
1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      std::string id;
1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      if ((*entry)->GetAsString(&id)) {
1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        base::DictionaryValue* app_dict = new base::DictionaryValue();
1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        app_dict->SetString(ash::kPinnedAppsPrefAppIDPath, id);
1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        pinned_apps_list->Append(app_dict);
1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      }
1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    prefs->SetValue(pref_path(), pinned_apps_list);
1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
175868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)ScreenMagnifierPolicyHandler::ScreenMagnifierPolicyHandler()
176868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)    : IntRangePolicyHandlerBase(key::kScreenMagnifierType,
177868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)                                0, ash::MAGNIFIER_FULL, false) {
178868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)}
179868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
180868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)ScreenMagnifierPolicyHandler::~ScreenMagnifierPolicyHandler() {
181868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)}
182868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
183868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)void ScreenMagnifierPolicyHandler::ApplyPolicySettings(
184868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)    const PolicyMap& policies,
185868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)    PrefValueMap* prefs) {
186868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  const base::Value* value = policies.GetValue(policy_name());
187868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  int value_in_range;
188868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  if (value && EnsureInRange(value, &value_in_range, NULL)) {
189868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)    prefs->SetValue(prefs::kScreenMagnifierEnabled,
190868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)                    base::Value::CreateBooleanValue(value_in_range != 0));
191868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)    prefs->SetValue(prefs::kScreenMagnifierType,
192868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)                    base::Value::CreateIntegerValue(value_in_range));
193868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  }
194868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)}
195868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
1969ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben MurdochLoginScreenPowerManagementPolicyHandler::
1979ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch    LoginScreenPowerManagementPolicyHandler()
1989ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch    : TypeCheckingPolicyHandler(key::kDeviceLoginScreenPowerManagement,
1999ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch                                base::Value::TYPE_STRING) {
2009ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch}
2019ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch
2029ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben MurdochLoginScreenPowerManagementPolicyHandler::
2039ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch    ~LoginScreenPowerManagementPolicyHandler() {
2049ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch}
2059ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch
2069ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdochbool LoginScreenPowerManagementPolicyHandler::CheckPolicySettings(
2079ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch    const PolicyMap& policies,
2089ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch    PolicyErrorMap* errors) {
2099ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch  const base::Value* value;
2109ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch  if (!CheckAndGetValue(policies, errors, &value))
2119ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch    return false;
2129ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch
2139ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch  if (!value)
2149ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch    return true;
2159ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch
2169ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch  std::string json;
2179ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch  value->GetAsString(&json);
2189ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch  return LoginScreenPowerManagementPolicy().Init(json, errors);
2199ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch}
2209ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch
2219ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdochvoid LoginScreenPowerManagementPolicyHandler::ApplyPolicySettings(
2229ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch    const PolicyMap& policies,
2239ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch    PrefValueMap* prefs) {
2249ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch}
2259ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch
2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace policy
227