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> 8a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#include <vector> 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "ash/magnifier/magnifier_constants.h" 117dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "base/callback.h" 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/json/json_reader.h" 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/json/json_writer.h" 14a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#include "base/logging.h" 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/scoped_ptr.h" 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/prefs/pref_value_map.h" 17a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#include "base/strings/string_number_conversions.h" 185e3f23d412006dc4db4e659864679f29341e113fTorne (Richard Coles)#include "base/strings/string_util.h" 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/values.h" 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/ash/chrome_launcher_prefs.h" 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/pref_names.h" 22558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch#include "chromeos/dbus/power_policy_controller.h" 232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chromeos/network/onc/onc_signature.h" 242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chromeos/network/onc/onc_utils.h" 252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chromeos/network/onc/onc_validator.h" 264e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "components/onc/onc_constants.h" 27a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#include "components/policy/core/browser/policy_error_map.h" 28f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "components/policy/core/common/external_data_fetcher.h" 29f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "components/policy/core/common/policy_map.h" 30a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "components/policy/core/common/schema.h" 315d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "crypto/sha2.h" 32cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "grit/components_strings.h" 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "policy/policy_constants.h" 34a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#include "url/gurl.h" 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace policy { 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 38a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)namespace { 39a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 40a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)const char kSubkeyURL[] = "url"; 41a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)const char kSubkeyHash[] = "hash"; 42a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 43a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)bool GetSubkeyString(const base::DictionaryValue& dict, 44a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) policy::PolicyErrorMap* errors, 45a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const std::string& policy, 46a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const std::string& subkey, 47a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) std::string* value) { 48a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const base::Value* raw_value = NULL; 49a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) if (!dict.GetWithoutPathExpansion(subkey, &raw_value)) { 50a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) errors->AddError(policy, subkey, IDS_POLICY_NOT_SPECIFIED_ERROR); 51a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) return false; 52a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) } 53a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) std::string string_value; 54a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) if (!raw_value->GetAsString(&string_value)) { 55a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) errors->AddError(policy, subkey, IDS_POLICY_TYPE_ERROR, "string"); 56a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) return false; 57a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) } 58a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) if (string_value.empty()) { 59a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) errors->AddError(policy, subkey, IDS_POLICY_NOT_SPECIFIED_ERROR); 60a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) return false; 61a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) } 62a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) *value = string_value; 63a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) return true; 64a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)} 65a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 66a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)const char kScreenDimDelayAC[] = "AC.Delays.ScreenDim"; 67a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)const char kScreenOffDelayAC[] = "AC.Delays.ScreenOff"; 68a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)const char kIdleWarningDelayAC[] = "AC.Delays.IdleWarning"; 69a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)const char kIdleDelayAC[] = "AC.Delays.Idle"; 70a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)const char kIdleActionAC[] = "AC.IdleAction"; 71a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 72a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)const char kScreenDimDelayBattery[] = "Battery.Delays.ScreenDim"; 73a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)const char kScreenOffDelayBattery[] = "Battery.Delays.ScreenOff"; 74a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)const char kIdleWarningDelayBattery[] = "Battery.Delays.IdleWarning"; 75a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)const char kIdleDelayBattery[] = "Battery.Delays.Idle"; 76a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)const char kIdleActionBattery[] = "Battery.IdleAction"; 77a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 78a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)const char kScreenLockDelayAC[] = "AC"; 79a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)const char kScreenLockDelayBattery[] = "Battery"; 80a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 81a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)const char kActionSuspend[] = "Suspend"; 82a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)const char kActionLogout[] = "Logout"; 83a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)const char kActionShutdown[] = "Shutdown"; 84a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)const char kActionDoNothing[] = "DoNothing"; 85a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 86a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)scoped_ptr<base::Value> GetValue(const base::DictionaryValue* dict, 87a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) const char* key) { 88a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) const base::Value* value = NULL; 89a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) if (!dict->Get(key, &value)) 90a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) return scoped_ptr<base::Value>(); 91a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) return scoped_ptr<base::Value>(value->DeepCopy()); 92a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} 93a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 94a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)scoped_ptr<base::Value> GetAction(const base::DictionaryValue* dict, 95a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) const char* key) { 96a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) scoped_ptr<base::Value> value = GetValue(dict, key); 97a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) std::string action; 98a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) if (!value || !value->GetAsString(&action)) 99a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) return scoped_ptr<base::Value>(); 100a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) if (action == kActionSuspend) { 101a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) return scoped_ptr<base::Value>(new base::FundamentalValue( 102a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) chromeos::PowerPolicyController::ACTION_SUSPEND)); 103a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) } 104a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) if (action == kActionLogout) { 105a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) return scoped_ptr<base::Value>(new base::FundamentalValue( 106a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) chromeos::PowerPolicyController::ACTION_STOP_SESSION)); 107a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) } 108a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) if (action == kActionShutdown) { 109a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) return scoped_ptr<base::Value>(new base::FundamentalValue( 110a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) chromeos::PowerPolicyController::ACTION_SHUT_DOWN)); 111a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) } 112a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) if (action == kActionDoNothing) { 113a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) return scoped_ptr<base::Value>(new base::FundamentalValue( 114a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) chromeos::PowerPolicyController::ACTION_DO_NOTHING)); 115a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) } 116a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) return scoped_ptr<base::Value>(); 117a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} 118a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 119a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)} // namespace 120a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 121a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)ExternalDataPolicyHandler::ExternalDataPolicyHandler(const char* policy_name) 1225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) : TypeCheckingPolicyHandler(policy_name, base::Value::TYPE_DICTIONARY) { 123a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)} 124a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 125a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)ExternalDataPolicyHandler::~ExternalDataPolicyHandler() { 126a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)} 127a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 128a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)bool ExternalDataPolicyHandler::CheckPolicySettings(const PolicyMap& policies, 129a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) PolicyErrorMap* errors) { 130a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) if (!TypeCheckingPolicyHandler::CheckPolicySettings(policies, errors)) 131a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) return false; 132a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 133a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const std::string policy = policy_name(); 134a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const base::Value* value = policies.GetValue(policy); 135a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) if (!value) 136a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) return true; 137a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 1385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const base::DictionaryValue* dict = NULL; 139a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) value->GetAsDictionary(&dict); 140a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) if (!dict) { 141a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) NOTREACHED(); 142a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) return false; 143a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) } 144a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) std::string url_string; 145a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) std::string hash_string; 146a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) if (!GetSubkeyString(*dict, errors, policy, kSubkeyURL, &url_string) || 147a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) !GetSubkeyString(*dict, errors, policy, kSubkeyHash, &hash_string)) { 148a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) return false; 149a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) } 150a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 151a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const GURL url(url_string); 152a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) if (!url.is_valid()) { 153a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) errors->AddError(policy, kSubkeyURL, IDS_POLICY_VALUE_FORMAT_ERROR); 154a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) return false; 155a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) } 156a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 157a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) std::vector<uint8> hash; 158a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) if (!base::HexStringToBytes(hash_string, &hash) || 1595d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) hash.size() != crypto::kSHA256Length) { 160a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) errors->AddError(policy, kSubkeyHash, IDS_POLICY_VALUE_FORMAT_ERROR); 161a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) return false; 162a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) } 163a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 164a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) return true; 165a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)} 166a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 167a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)void ExternalDataPolicyHandler::ApplyPolicySettings(const PolicyMap& policies, 168a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) PrefValueMap* prefs) { 169a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)} 170a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 171c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// static 172c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)NetworkConfigurationPolicyHandler* 173c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)NetworkConfigurationPolicyHandler::CreateForUserPolicy() { 174c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return new NetworkConfigurationPolicyHandler( 175ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch key::kOpenNetworkConfiguration, 176ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch onc::ONC_SOURCE_USER_POLICY, 177ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch prefs::kOpenNetworkConfiguration); 178c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 179c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 180c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// static 181c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)NetworkConfigurationPolicyHandler* 182c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)NetworkConfigurationPolicyHandler::CreateForDevicePolicy() { 183c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return new NetworkConfigurationPolicyHandler( 184ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch key::kDeviceOpenNetworkConfiguration, 185ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch onc::ONC_SOURCE_DEVICE_POLICY, 186ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch prefs::kDeviceOpenNetworkConfiguration); 187c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)NetworkConfigurationPolicyHandler::~NetworkConfigurationPolicyHandler() {} 1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool NetworkConfigurationPolicyHandler::CheckPolicySettings( 1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const PolicyMap& policies, 1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PolicyErrorMap* errors) { 1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const base::Value* value; 1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!CheckAndGetValue(policies, errors, &value)) 1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (value) { 1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string onc_blob; 2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) value->GetAsString(&onc_blob); 2012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<base::DictionaryValue> root_dict = 2024e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) chromeos::onc::ReadDictionaryFromJson(onc_blob); 2032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (root_dict.get() == NULL) { 2042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) errors->AddError(policy_name(), IDS_POLICY_NETWORK_CONFIG_PARSE_FAILED); 2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Validate the ONC dictionary. We are liberal and ignore unknown field 2092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // names and ignore invalid field names in kRecommended arrays. 2104e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) chromeos::onc::Validator validator( 2114e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) false, // Ignore unknown fields. 2124e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) false, // Ignore invalid recommended field names. 2134e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) true, // Fail on missing fields. 2144e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) true); // Validate for managed ONC 2152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) validator.SetOncSource(onc_source_); 2162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // ONC policies are always unencrypted. 2184e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) chromeos::onc::Validator::Result validation_result; 2192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) root_dict = validator.ValidateAndRepairObject( 2204e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) &chromeos::onc::kToplevelConfigurationSignature, *root_dict, 2214e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) &validation_result); 2224e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) if (validation_result == chromeos::onc::Validator::VALID_WITH_WARNINGS) 223ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch errors->AddError(policy_name(), IDS_POLICY_NETWORK_CONFIG_IMPORT_PARTIAL); 2244e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) else if (validation_result == chromeos::onc::Validator::INVALID) 2252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) errors->AddError(policy_name(), IDS_POLICY_NETWORK_CONFIG_IMPORT_FAILED); 2262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // In any case, don't reject the policy as some networks or certificates 2282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // could still be applied. 2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return true; 2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void NetworkConfigurationPolicyHandler::ApplyPolicySettings( 2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const PolicyMap& policies, 2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PrefValueMap* prefs) { 237ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch const base::Value* value = policies.GetValue(policy_name()); 238ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch if (!value) 239ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch return; 240ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 241ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch std::string onc_blob; 242ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch value->GetAsString(&onc_blob); 243ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 244ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch scoped_ptr<base::ListValue> network_configs(new base::ListValue); 245ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch base::ListValue certificates; 2468bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) base::DictionaryValue global_network_config; 2478bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) chromeos::onc::ParseAndValidateOncForImport(onc_blob, 2488bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) onc_source_, 2498bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) "", 2508bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) network_configs.get(), 2518bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) &global_network_config, 2528bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) &certificates); 2538bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 2548bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) // Currently, only the per-network configuration is stored in a pref. Ignore 2558bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) // |global_network_config| and |certificates|. 256ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch prefs->SetValue(pref_path_, network_configs.release()); 2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void NetworkConfigurationPolicyHandler::PrepareForDisplaying( 2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PolicyMap* policies) const { 2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const PolicyMap::Entry* entry = policies->Get(policy_name()); 2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!entry) 2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Value* sanitized_config = SanitizeNetworkConfig(entry->value); 2655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!sanitized_config) 2665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sanitized_config = base::Value::CreateNullValue(); 2675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2687dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch policies->Set(policy_name(), entry->level, entry->scope, 2697dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch sanitized_config, NULL); 2705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 272c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)NetworkConfigurationPolicyHandler::NetworkConfigurationPolicyHandler( 273c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const char* policy_name, 2744e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) onc::ONCSource onc_source, 275ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch const char* pref_path) 276c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) : TypeCheckingPolicyHandler(policy_name, base::Value::TYPE_STRING), 277ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch onc_source_(onc_source), 278ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch pref_path_(pref_path) { 279c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 280c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 2815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// static 2825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)base::Value* NetworkConfigurationPolicyHandler::SanitizeNetworkConfig( 2835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const base::Value* config) { 2845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string json_string; 2855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!config->GetAsString(&json_string)) 2865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return NULL; 2875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 288c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) scoped_ptr<base::DictionaryValue> toplevel_dict = 2894e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) chromeos::onc::ReadDictionaryFromJson(json_string); 290c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (!toplevel_dict) 2915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return NULL; 2925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 293c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Placeholder to insert in place of the filtered setting. 294c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const char kPlaceholder[] = "********"; 295c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 2964e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) toplevel_dict = chromeos::onc::MaskCredentialsInOncObject( 2974e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) chromeos::onc::kToplevelConfigurationSignature, 298c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) *toplevel_dict, 299c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) kPlaceholder); 3005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 301c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::JSONWriter::WriteWithOptions(toplevel_dict.get(), 3025d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::JSONWriter::OPTIONS_PRETTY_PRINT, 3035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &json_string); 304effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch return new base::StringValue(json_string); 3055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)PinnedLauncherAppsPolicyHandler::PinnedLauncherAppsPolicyHandler() 3085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : ExtensionListPolicyHandler(key::kPinnedLauncherApps, 3095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) prefs::kPinnedLauncherApps, 3105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) false) {} 3115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)PinnedLauncherAppsPolicyHandler::~PinnedLauncherAppsPolicyHandler() {} 3135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void PinnedLauncherAppsPolicyHandler::ApplyPolicySettings( 3155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const PolicyMap& policies, 3165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PrefValueMap* prefs) { 3175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PolicyErrorMap errors; 3185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const base::Value* policy_value = policies.GetValue(policy_name()); 3195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const base::ListValue* policy_list = NULL; 3205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (policy_value && policy_value->GetAsList(&policy_list) && policy_list) { 3215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::ListValue* pinned_apps_list = new base::ListValue(); 3225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (base::ListValue::const_iterator entry(policy_list->begin()); 3235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) entry != policy_list->end(); ++entry) { 3245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string id; 3255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if ((*entry)->GetAsString(&id)) { 3265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::DictionaryValue* app_dict = new base::DictionaryValue(); 3275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) app_dict->SetString(ash::kPinnedAppsPrefAppIDPath, id); 3285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pinned_apps_list->Append(app_dict); 3295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) prefs->SetValue(pref_path(), pinned_apps_list); 3325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 335868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)ScreenMagnifierPolicyHandler::ScreenMagnifierPolicyHandler() 336868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) : IntRangePolicyHandlerBase(key::kScreenMagnifierType, 337868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 0, ash::MAGNIFIER_FULL, false) { 338868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)} 339868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 340868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)ScreenMagnifierPolicyHandler::~ScreenMagnifierPolicyHandler() { 341868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)} 342868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 343868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)void ScreenMagnifierPolicyHandler::ApplyPolicySettings( 344868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) const PolicyMap& policies, 345868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) PrefValueMap* prefs) { 346868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) const base::Value* value = policies.GetValue(policy_name()); 347868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) int value_in_range; 348868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) if (value && EnsureInRange(value, &value_in_range, NULL)) { 349f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) prefs->SetValue(prefs::kAccessibilityScreenMagnifierEnabled, 350effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch new base::FundamentalValue(value_in_range != 0)); 351f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) prefs->SetValue(prefs::kAccessibilityScreenMagnifierType, 352effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch new base::FundamentalValue(value_in_range)); 353868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) } 354868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)} 355868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 3569ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben MurdochLoginScreenPowerManagementPolicyHandler:: 357effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch LoginScreenPowerManagementPolicyHandler(const Schema& chrome_schema) 358effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch : SchemaValidatingPolicyHandler(key::kDeviceLoginScreenPowerManagement, 359effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch chrome_schema.GetKnownProperty( 360effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch key::kDeviceLoginScreenPowerManagement), 361effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch SCHEMA_ALLOW_UNKNOWN) { 3629ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch} 3639ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch 3649ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben MurdochLoginScreenPowerManagementPolicyHandler:: 3659ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch ~LoginScreenPowerManagementPolicyHandler() { 3669ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch} 3679ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch 3689ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdochvoid LoginScreenPowerManagementPolicyHandler::ApplyPolicySettings( 3699ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch const PolicyMap& policies, 3709ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch PrefValueMap* prefs) { 3719ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch} 3729ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch 373558790d6acca3451cf3a6b497803a5f07d0bec58Ben MurdochDeprecatedIdleActionHandler::DeprecatedIdleActionHandler() 374558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch : IntRangePolicyHandlerBase( 375558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch key::kIdleAction, 376558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch chromeos::PowerPolicyController::ACTION_SUSPEND, 377558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch chromeos::PowerPolicyController::ACTION_DO_NOTHING, 378558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch false) {} 379558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch 380558790d6acca3451cf3a6b497803a5f07d0bec58Ben MurdochDeprecatedIdleActionHandler::~DeprecatedIdleActionHandler() {} 381558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch 382558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdochvoid DeprecatedIdleActionHandler::ApplyPolicySettings(const PolicyMap& policies, 383558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch PrefValueMap* prefs) { 384558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch const base::Value* value = policies.GetValue(policy_name()); 385558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch if (value && EnsureInRange(value, NULL, NULL)) { 386558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch if (!prefs->GetValue(prefs::kPowerAcIdleAction, NULL)) 387558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch prefs->SetValue(prefs::kPowerAcIdleAction, value->DeepCopy()); 388558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch if (!prefs->GetValue(prefs::kPowerBatteryIdleAction, NULL)) 389558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch prefs->SetValue(prefs::kPowerBatteryIdleAction, value->DeepCopy()); 390558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch } 391558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch} 392558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch 393a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)PowerManagementIdleSettingsPolicyHandler:: 394a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) PowerManagementIdleSettingsPolicyHandler(const Schema& chrome_schema) 395a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) : SchemaValidatingPolicyHandler( 396a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) key::kPowerManagementIdleSettings, 397a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) chrome_schema.GetKnownProperty(key::kPowerManagementIdleSettings), 398a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) SCHEMA_ALLOW_UNKNOWN) { 399a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} 400a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 401a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)PowerManagementIdleSettingsPolicyHandler:: 402a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ~PowerManagementIdleSettingsPolicyHandler() { 403a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} 404a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 405a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)void PowerManagementIdleSettingsPolicyHandler::ApplyPolicySettings( 406a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) const PolicyMap& policies, 407a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) PrefValueMap* prefs) { 408a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) scoped_ptr<base::Value> policy_value; 409a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) if (!CheckAndGetValue(policies, NULL, &policy_value)) 410a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) return; 411a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) const base::DictionaryValue* dict = NULL; 412a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) if (!policy_value->GetAsDictionary(&dict)) { 413a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) NOTREACHED(); 414a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) return; 415a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) } 416a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) scoped_ptr<base::Value> value; 417a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 418a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) value = GetValue(dict, kScreenDimDelayAC); 419a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) if (value) 420a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) prefs->SetValue(prefs::kPowerAcScreenDimDelayMs, value.release()); 421a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) value = GetValue(dict, kScreenOffDelayAC); 422a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) if (value) 423a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) prefs->SetValue(prefs::kPowerAcScreenOffDelayMs, value.release()); 424a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) value = GetValue(dict, kIdleWarningDelayAC); 425a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) if (value) 426a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) prefs->SetValue(prefs::kPowerAcIdleWarningDelayMs, value.release()); 427a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) value = GetValue(dict, kIdleDelayAC); 428a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) if (value) 429a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) prefs->SetValue(prefs::kPowerAcIdleDelayMs, value.release()); 430a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) value = GetAction(dict, kIdleActionAC); 431a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) if (value) 432a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) prefs->SetValue(prefs::kPowerAcIdleAction, value.release()); 433a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 434a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) value = GetValue(dict, kScreenDimDelayBattery); 435a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) if (value) 436a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) prefs->SetValue(prefs::kPowerBatteryScreenDimDelayMs, value.release()); 437a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) value = GetValue(dict, kScreenOffDelayBattery); 438a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) if (value) 439a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) prefs->SetValue(prefs::kPowerBatteryScreenOffDelayMs, value.release()); 440a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) value = GetValue(dict, kIdleWarningDelayBattery); 441a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) if (value) 442a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) prefs->SetValue(prefs::kPowerBatteryIdleWarningDelayMs, value.release()); 443a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) value = GetValue(dict, kIdleDelayBattery); 444a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) if (value) 445a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) prefs->SetValue(prefs::kPowerBatteryIdleDelayMs, value.release()); 446a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) value = GetAction(dict, kIdleActionBattery); 447a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) if (value) 448a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) prefs->SetValue(prefs::kPowerBatteryIdleAction, value.release()); 449a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} 450a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 451a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)ScreenLockDelayPolicyHandler::ScreenLockDelayPolicyHandler( 452a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) const Schema& chrome_schema) 453a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) : SchemaValidatingPolicyHandler( 454a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) key::kScreenLockDelays, 455a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) chrome_schema.GetKnownProperty(key::kScreenLockDelays), 456a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) SCHEMA_ALLOW_UNKNOWN) { 457a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} 458a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 459a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)ScreenLockDelayPolicyHandler::~ScreenLockDelayPolicyHandler() { 460a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} 461a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 462a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)void ScreenLockDelayPolicyHandler::ApplyPolicySettings( 463a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) const PolicyMap& policies, 464a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) PrefValueMap* prefs) { 465a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) scoped_ptr<base::Value> policy_value; 466a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) if (!CheckAndGetValue(policies, NULL, &policy_value)) 467a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) return; 468a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) const base::DictionaryValue* dict = NULL; 469a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) if (!policy_value->GetAsDictionary(&dict)) { 470a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) NOTREACHED(); 471a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) return; 472a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) } 473a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) scoped_ptr<base::Value> value; 474a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 475a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) value = GetValue(dict, kScreenLockDelayAC); 476a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) if (value) 477a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) prefs->SetValue(prefs::kPowerAcScreenLockDelayMs, value.release()); 478a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) value = GetValue(dict, kScreenLockDelayBattery); 479a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) if (value) 480a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) prefs->SetValue(prefs::kPowerBatteryScreenLockDelayMs, value.release()); 481a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} 482a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 4835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace policy 484