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/device_policy_decoder_chromeos.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <limits> 8effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include <string> 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 107dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "base/callback.h" 11effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "base/json/json_reader.h" 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/logging.h" 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/values.h" 14effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "chrome/browser/browser_process.h" 1590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "chrome/browser/chromeos/policy/device_local_account.h" 162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/chromeos/policy/enterprise_install_attributes.h" 17a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#include "chrome/browser/chromeos/policy/proto/chrome_device_policy.pb.h" 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chromeos/dbus/dbus_thread_manager.h" 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chromeos/dbus/update_engine_client.h" 204e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "chromeos/settings/cros_settings_names.h" 21effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "components/policy/core/browser/browser_policy_connector.h" 22f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "components/policy/core/common/external_data_fetcher.h" 23f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "components/policy/core/common/policy_map.h" 24effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "components/policy/core/common/schema.h" 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "policy/policy_constants.h" 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "third_party/cros_system_api/dbus/service_constants.h" 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using google::protobuf::RepeatedField; 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using google::protobuf::RepeatedPtrField; 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace em = enterprise_management; 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace policy { 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace { 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 37effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch// Decodes a protobuf integer to an IntegerValue. Returns NULL in case the input 38effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch// value is out of bounds. 39effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochscoped_ptr<base::Value> DecodeIntegerValue(google::protobuf::int64 value) { 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (value < std::numeric_limits<int>::min() || 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) value > std::numeric_limits<int>::max()) { 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LOG(WARNING) << "Integer value " << value 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) << " out of numeric limits, ignoring."; 44effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch return scoped_ptr<base::Value>(); 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 47effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch return scoped_ptr<base::Value>( 48effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch new base::FundamentalValue(static_cast<int>(value))); 49effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch} 50effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 51effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch// Decodes a JSON string to a base::Value, and drops unknown properties 52effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch// according to a policy schema. |policy_name| is the name of a policy schema 53effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch// defined in policy_templates.json. Returns NULL in case the input is not a 54effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch// valid JSON string. 55effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochscoped_ptr<base::Value> DecodeJsonStringAndDropUnknownBySchema( 56effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch const std::string& json_string, 57effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch const std::string& policy_name) { 58effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch std::string error; 59effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch base::Value* root(base::JSONReader::ReadAndReturnError( 60effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch json_string, base::JSON_ALLOW_TRAILING_COMMAS, NULL, &error)); 61effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 62effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch if (!root) { 63effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch LOG(WARNING) << "Invalid JSON string: " << error << ", ignoring."; 64effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch return scoped_ptr<base::Value>(); 65effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch } 66effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 67effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch const Schema& schema = g_browser_process 68effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch ->browser_policy_connector() 69effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch ->GetChromeSchema() 70effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch .GetKnownProperty(policy_name); 71effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 72effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch if (schema.valid()) { 73effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch std::string error_path; 74effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch bool changed = false; 75effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 76effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch if (!schema.Normalize( 77effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch root, SCHEMA_ALLOW_UNKNOWN, &error_path, &error, &changed)) { 78effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch LOG(WARNING) << "Invalid policy value for " << policy_name << ": " 79effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch << error << " at " << error_path << "."; 80effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch return scoped_ptr<base::Value>(); 81effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch } 82effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 83effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch if (changed) { 84effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch LOG(WARNING) << "Some properties in " << policy_name 85effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch << " were dropped: " << error << " at " << error_path << "."; 86effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch } 87effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch } else { 88effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch LOG(WARNING) << "Unknown or invalid policy schema for " << policy_name 89effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch << "."; 90effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch return scoped_ptr<base::Value>(); 91effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch } 92effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 93effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch return scoped_ptr<base::Value>(root); 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 965d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)base::Value* DecodeConnectionType(int value) { 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static const char* const kConnectionTypes[] = { 9868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) shill::kTypeEthernet, 9968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) shill::kTypeWifi, 10068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) shill::kTypeWimax, 10168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) shill::kTypeBluetooth, 10268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) shill::kTypeCellular, 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (value < 0 || value >= static_cast<int>(arraysize(kConnectionTypes))) 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return NULL; 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 108effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch return new base::StringValue(kConnectionTypes[value]); 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void DecodeLoginPolicies(const em::ChromeDeviceSettingsProto& policy, 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PolicyMap* policies) { 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (policy.has_guest_mode_enabled()) { 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const em::GuestModeEnabledProto& container(policy.guest_mode_enabled()); 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (container.has_guest_mode_enabled()) { 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) policies->Set(key::kDeviceGuestModeEnabled, 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) POLICY_LEVEL_MANDATORY, 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) POLICY_SCOPE_MACHINE, 119effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch new base::FundamentalValue( 1205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) container.guest_mode_enabled()), 1217dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch NULL); 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (policy.has_show_user_names()) { 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const em::ShowUserNamesOnSigninProto& container(policy.show_user_names()); 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (container.has_show_user_names()) { 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) policies->Set(key::kDeviceShowUserNamesOnSignin, 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) POLICY_LEVEL_MANDATORY, 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) POLICY_SCOPE_MACHINE, 131effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch new base::FundamentalValue( 1325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) container.show_user_names()), 1337dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch NULL); 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (policy.has_allow_new_users()) { 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const em::AllowNewUsersProto& container(policy.allow_new_users()); 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (container.has_allow_new_users()) { 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) policies->Set(key::kDeviceAllowNewUsers, 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) POLICY_LEVEL_MANDATORY, 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) POLICY_SCOPE_MACHINE, 143effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch new base::FundamentalValue( 1445d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) container.allow_new_users()), 1457dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch NULL); 1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (policy.has_user_whitelist()) { 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const em::UserWhitelistProto& container(policy.user_whitelist()); 1515d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::ListValue* whitelist = new base::ListValue(); 152c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) RepeatedPtrField<std::string>::const_iterator entry; 153c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) for (entry = container.user_whitelist().begin(); 154c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) entry != container.user_whitelist().end(); 155c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ++entry) { 156effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch whitelist->Append(new base::StringValue(*entry)); 157c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 158c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) policies->Set(key::kDeviceUserWhitelist, 159c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) POLICY_LEVEL_MANDATORY, 160c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) POLICY_SCOPE_MACHINE, 1617dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch whitelist, 1627dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch NULL); 1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (policy.has_ephemeral_users_enabled()) { 1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const em::EphemeralUsersEnabledProto& container( 1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) policy.ephemeral_users_enabled()); 1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (container.has_ephemeral_users_enabled()) { 1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) policies->Set(key::kDeviceEphemeralUsersEnabled, 1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) POLICY_LEVEL_MANDATORY, 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) POLICY_SCOPE_MACHINE, 172effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch new base::FundamentalValue( 1737dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch container.ephemeral_users_enabled()), 1747dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch NULL); 1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (policy.has_device_local_accounts()) { 1792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const em::DeviceLocalAccountsProto& container( 1802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) policy.device_local_accounts()); 1812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const RepeatedPtrField<em::DeviceLocalAccountInfoProto>& accounts = 1822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) container.account(); 183c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) scoped_ptr<base::ListValue> account_list(new base::ListValue()); 184c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) RepeatedPtrField<em::DeviceLocalAccountInfoProto>::const_iterator entry; 185c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) for (entry = accounts.begin(); entry != accounts.end(); ++entry) { 186c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) scoped_ptr<base::DictionaryValue> entry_dict( 187c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) new base::DictionaryValue()); 188c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (entry->has_type()) { 189c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (entry->has_account_id()) { 190c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) entry_dict->SetStringWithoutPathExpansion( 191c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) chromeos::kAccountsPrefDeviceLocalAccountsKeyId, 192c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) entry->account_id()); 193c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 194c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) entry_dict->SetIntegerWithoutPathExpansion( 195c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) chromeos::kAccountsPrefDeviceLocalAccountsKeyType, entry->type()); 196c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (entry->kiosk_app().has_app_id()) { 197c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) entry_dict->SetStringWithoutPathExpansion( 198c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) chromeos::kAccountsPrefDeviceLocalAccountsKeyKioskAppId, 199c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) entry->kiosk_app().app_id()); 200c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 201b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) } else if (entry->has_deprecated_public_session_id()) { 202c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Deprecated public session specification. 203c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) entry_dict->SetStringWithoutPathExpansion( 204b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) chromeos::kAccountsPrefDeviceLocalAccountsKeyId, 205b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) entry->deprecated_public_session_id()); 206c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) entry_dict->SetIntegerWithoutPathExpansion( 207c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) chromeos::kAccountsPrefDeviceLocalAccountsKeyType, 20890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) DeviceLocalAccount::TYPE_PUBLIC_SESSION); 2092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 210c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) account_list->Append(entry_dict.release()); 2112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 212c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) policies->Set(key::kDeviceLocalAccounts, 213c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) POLICY_LEVEL_MANDATORY, 214c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) POLICY_SCOPE_MACHINE, 2157dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch account_list.release(), 2167dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch NULL); 2172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (container.has_auto_login_id()) { 2182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) policies->Set(key::kDeviceLocalAccountAutoLoginId, 2192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) POLICY_LEVEL_MANDATORY, 2202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) POLICY_SCOPE_MACHINE, 221effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch new base::StringValue(container.auto_login_id()), 2227dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch NULL); 2232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 2242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (container.has_auto_login_delay()) { 2252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) policies->Set(key::kDeviceLocalAccountAutoLoginDelay, 2262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) POLICY_LEVEL_MANDATORY, 2272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) POLICY_SCOPE_MACHINE, 228effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch DecodeIntegerValue(container.auto_login_delay()).release(), 2297dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch NULL); 2302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 231c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (container.has_enable_auto_login_bailout()) { 232c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) policies->Set(key::kDeviceLocalAccountAutoLoginBailoutEnabled, 233c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) POLICY_LEVEL_MANDATORY, 234c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) POLICY_SCOPE_MACHINE, 235effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch new base::FundamentalValue( 2367dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch container.enable_auto_login_bailout()), 2377dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch NULL); 238c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 239a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) if (container.has_prompt_for_network_when_offline()) { 240a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) policies->Set(key::kDeviceLocalAccountPromptForNetworkWhenOffline, 241a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) POLICY_LEVEL_MANDATORY, 242a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) POLICY_SCOPE_MACHINE, 243effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch new base::FundamentalValue( 244a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) container.prompt_for_network_when_offline()), 245a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) NULL); 246a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) } 2472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 248eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 249eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch if (policy.has_supervised_users_settings()) { 250eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch const em::SupervisedUsersSettingsProto& container = 251eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch policy.supervised_users_settings(); 252eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch if (container.has_supervised_users_enabled()) { 253effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch base::Value* value = new base::FundamentalValue( 254eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch container.supervised_users_enabled()); 255eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch policies->Set(key::kSupervisedUsersEnabled, 256eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch POLICY_LEVEL_MANDATORY, 257eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch POLICY_SCOPE_MACHINE, 2587dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch value, 2597dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch NULL); 260eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch } 261eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch } 2625f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 2635f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (policy.has_saml_settings()) { 2645f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) const em::SAMLSettingsProto& container(policy.saml_settings()); 2655f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (container.has_transfer_saml_cookies()) { 2665f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) policies->Set(key::kDeviceTransferSAMLCookies, 2675f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) POLICY_LEVEL_MANDATORY, 2685f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) POLICY_SCOPE_MACHINE, 2695f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) new base::FundamentalValue( 2705f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) container.transfer_saml_cookies()), 2715f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) NULL); 2725f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 2735f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 2745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void DecodeKioskPolicies(const em::ChromeDeviceSettingsProto& policy, 2775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PolicyMap* policies, 2785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EnterpriseInstallAttributes* install_attributes) { 2795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // No policies if this is not KIOSK. 2807d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) if (install_attributes->GetMode() != DEVICE_MODE_RETAIL_KIOSK) 2815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 2825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (policy.has_forced_logout_timeouts()) { 2845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const em::ForcedLogoutTimeoutsProto& container( 2855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) policy.forced_logout_timeouts()); 2865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (container.has_idle_logout_timeout()) { 287effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch policies->Set( 288effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch key::kDeviceIdleLogoutTimeout, 289effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch POLICY_LEVEL_MANDATORY, 290effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch POLICY_SCOPE_MACHINE, 291effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch DecodeIntegerValue(container.idle_logout_timeout()).release(), 292effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch NULL); 2935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (container.has_idle_logout_warning_duration()) { 2955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) policies->Set(key::kDeviceIdleLogoutWarningDuration, 2965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) POLICY_LEVEL_MANDATORY, 2975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) POLICY_SCOPE_MACHINE, 298effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch DecodeIntegerValue(container.idle_logout_warning_duration()) 299effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch .release(), 3007dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch NULL); 3015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (policy.has_login_screen_saver()) { 3055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const em::ScreenSaverProto& container( 3065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) policy.login_screen_saver()); 3075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (container.has_screen_saver_extension_id()) { 3085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) policies->Set(key::kDeviceLoginScreenSaverId, 3095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) POLICY_LEVEL_MANDATORY, 3105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) POLICY_SCOPE_MACHINE, 311effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch new base::StringValue( 3127dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch container.screen_saver_extension_id()), 3137dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch NULL); 3145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (container.has_screen_saver_timeout()) { 316effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch policies->Set( 317effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch key::kDeviceLoginScreenSaverTimeout, 318effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch POLICY_LEVEL_MANDATORY, 319effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch POLICY_SCOPE_MACHINE, 320effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch DecodeIntegerValue(container.screen_saver_timeout()).release(), 321effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch NULL); 3225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (policy.has_app_pack()) { 3265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const em::AppPackProto& container(policy.app_pack()); 3275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::ListValue* app_pack_list = new base::ListValue(); 3285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (int i = 0; i < container.app_pack_size(); ++i) { 3295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const em::AppPackEntryProto& entry(container.app_pack(i)); 3305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (entry.has_extension_id() && entry.has_update_url()) { 3315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::DictionaryValue* dict = new base::DictionaryValue(); 332c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) dict->SetString(chromeos::kAppPackKeyExtensionId, entry.extension_id()); 333c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) dict->SetString(chromeos::kAppPackKeyUpdateUrl, entry.update_url()); 3345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) app_pack_list->Append(dict); 3355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) policies->Set(key::kDeviceAppPack, 3385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) POLICY_LEVEL_MANDATORY, 3395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) POLICY_SCOPE_MACHINE, 3407dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch app_pack_list, 3417dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch NULL); 3425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (policy.has_pinned_apps()) { 3455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const em::PinnedAppsProto& container(policy.pinned_apps()); 3465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::ListValue* pinned_apps_list = new base::ListValue(); 3475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) for (int i = 0; i < container.app_id_size(); ++i) { 3485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) pinned_apps_list->Append( 349effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch new base::StringValue(container.app_id(i))); 3505d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 3515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) policies->Set(key::kPinnedLauncherApps, 3535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) POLICY_LEVEL_RECOMMENDED, 3545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) POLICY_SCOPE_MACHINE, 3557dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch pinned_apps_list, 3567dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch NULL); 3575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void DecodeNetworkPolicies(const em::ChromeDeviceSettingsProto& policy, 3615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PolicyMap* policies, 3625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EnterpriseInstallAttributes* install_attributes) { 3635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (policy.has_device_proxy_settings()) { 3645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const em::DeviceProxySettingsProto& container( 3655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) policy.device_proxy_settings()); 3665d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) scoped_ptr<base::DictionaryValue> proxy_settings(new base::DictionaryValue); 3675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (container.has_proxy_mode()) 3685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) proxy_settings->SetString(key::kProxyMode, container.proxy_mode()); 3695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (container.has_proxy_server()) 3705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) proxy_settings->SetString(key::kProxyServer, container.proxy_server()); 3715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (container.has_proxy_pac_url()) 3725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) proxy_settings->SetString(key::kProxyPacUrl, container.proxy_pac_url()); 3735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (container.has_proxy_bypass_list()) { 3745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) proxy_settings->SetString(key::kProxyBypassList, 3755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) container.proxy_bypass_list()); 3765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Figure out the level. Proxy policy is mandatory in kiosk mode. 3795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PolicyLevel level = POLICY_LEVEL_RECOMMENDED; 3807d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) if (install_attributes->GetMode() == DEVICE_MODE_RETAIL_KIOSK) 3815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) level = POLICY_LEVEL_MANDATORY; 3825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!proxy_settings->empty()) { 3845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) policies->Set(key::kProxySettings, 3855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) level, 3865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) POLICY_SCOPE_MACHINE, 3877dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch proxy_settings.release(), 3887dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch NULL); 3895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (policy.has_data_roaming_enabled()) { 3935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const em::DataRoamingEnabledProto& container(policy.data_roaming_enabled()); 3945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (container.has_data_roaming_enabled()) { 3955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) policies->Set(key::kDeviceDataRoamingEnabled, 3965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) POLICY_LEVEL_MANDATORY, 3975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) POLICY_SCOPE_MACHINE, 398effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch new base::FundamentalValue( 3997dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch container.data_roaming_enabled()), 4007dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch NULL); 4015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (policy.has_open_network_configuration() && 4055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) policy.open_network_configuration().has_open_network_configuration()) { 4065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string config( 4075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) policy.open_network_configuration().open_network_configuration()); 4085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) policies->Set(key::kDeviceOpenNetworkConfiguration, 4095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) POLICY_LEVEL_MANDATORY, 4105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) POLICY_SCOPE_MACHINE, 411effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch new base::StringValue(config), 4127dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch NULL); 4135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void DecodeReportingPolicies(const em::ChromeDeviceSettingsProto& policy, 4175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PolicyMap* policies) { 4185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (policy.has_device_reporting()) { 4195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const em::DeviceReportingProto& container(policy.device_reporting()); 4205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (container.has_report_version_info()) { 4215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) policies->Set(key::kReportDeviceVersionInfo, 4225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) POLICY_LEVEL_MANDATORY, 4235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) POLICY_SCOPE_MACHINE, 424effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch new base::FundamentalValue( 4255d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) container.report_version_info()), 4267dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch NULL); 4275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (container.has_report_activity_times()) { 4295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) policies->Set(key::kReportDeviceActivityTimes, 4305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) POLICY_LEVEL_MANDATORY, 4315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) POLICY_SCOPE_MACHINE, 432effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch new base::FundamentalValue( 4337dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch container.report_activity_times()), 4347dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch NULL); 4355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (container.has_report_boot_mode()) { 4375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) policies->Set(key::kReportDeviceBootMode, 4385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) POLICY_LEVEL_MANDATORY, 4395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) POLICY_SCOPE_MACHINE, 440effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch new base::FundamentalValue( 4415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) container.report_boot_mode()), 4427dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch NULL); 4435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (container.has_report_location()) { 4455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) policies->Set(key::kReportDeviceLocation, 4465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) POLICY_LEVEL_MANDATORY, 4475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) POLICY_SCOPE_MACHINE, 448effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch new base::FundamentalValue( 4495d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) container.report_location()), 4507dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch NULL); 4517dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch } 4527dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch if (container.has_report_network_interfaces()) { 4537dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch policies->Set(key::kReportDeviceNetworkInterfaces, 4547dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch POLICY_LEVEL_MANDATORY, 4557dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch POLICY_SCOPE_MACHINE, 456effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch new base::FundamentalValue( 4577dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch container.report_network_interfaces()), 4587dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch NULL); 4595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4601e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) if (container.has_report_users()) { 4611e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) policies->Set(key::kReportDeviceUsers, 4621e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) POLICY_LEVEL_MANDATORY, 4631e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) POLICY_SCOPE_MACHINE, 464effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch new base::FundamentalValue(container.report_users()), 4651e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) NULL); 4661e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) } 4675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void DecodeAutoUpdatePolicies(const em::ChromeDeviceSettingsProto& policy, 4715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PolicyMap* policies) { 4725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (policy.has_release_channel()) { 4735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const em::ReleaseChannelProto& container(policy.release_channel()); 4745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (container.has_release_channel()) { 4755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string channel(container.release_channel()); 4765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) policies->Set(key::kChromeOsReleaseChannel, 4775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) POLICY_LEVEL_MANDATORY, 4785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) POLICY_SCOPE_MACHINE, 479effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch new base::StringValue(channel), 4807dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch NULL); 4815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // TODO(dubroy): Once http://crosbug.com/17015 is implemented, we won't 4825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // have to pass the channel in here, only ping the update engine to tell 4835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // it to fetch the channel from the policy. 4845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chromeos::DBusThreadManager::Get()->GetUpdateEngineClient()-> 485a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) SetChannel(channel, false); 4865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (container.has_release_channel_delegated()) { 4885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) policies->Set(key::kChromeOsReleaseChannelDelegated, 4895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) POLICY_LEVEL_MANDATORY, 4905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) POLICY_SCOPE_MACHINE, 491effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch new base::FundamentalValue( 4927dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch container.release_channel_delegated()), 4937dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch NULL); 4945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (policy.has_auto_update_settings()) { 4985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const em::AutoUpdateSettingsProto& container(policy.auto_update_settings()); 4995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (container.has_update_disabled()) { 5005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) policies->Set(key::kDeviceAutoUpdateDisabled, 5015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) POLICY_LEVEL_MANDATORY, 5025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) POLICY_SCOPE_MACHINE, 503effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch new base::FundamentalValue( 5045d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) container.update_disabled()), 5057dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch NULL); 5065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (container.has_target_version_prefix()) { 5095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) policies->Set(key::kDeviceTargetVersionPrefix, 5105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) POLICY_LEVEL_MANDATORY, 5115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) POLICY_SCOPE_MACHINE, 512effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch new base::StringValue( 5137dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch container.target_version_prefix()), 5147dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch NULL); 5155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // target_version_display_name is not actually a policy, but a display 5185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // string for target_version_prefix, so we ignore it. 5195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (container.has_scatter_factor_in_seconds()) { 5215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) policies->Set(key::kDeviceUpdateScatterFactor, 5225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) POLICY_LEVEL_MANDATORY, 5235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) POLICY_SCOPE_MACHINE, 524effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch new base::FundamentalValue(static_cast<int>( 525effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch container.scatter_factor_in_seconds())), 5267dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch NULL); 5275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (container.allowed_connection_types_size()) { 5305d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::ListValue* allowed_connection_types = new base::ListValue(); 5315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RepeatedField<int>::const_iterator entry; 5325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (entry = container.allowed_connection_types().begin(); 5335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) entry != container.allowed_connection_types().end(); 5345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ++entry) { 5355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Value* value = DecodeConnectionType(*entry); 5365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (value) 5375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) allowed_connection_types->Append(value); 5385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) policies->Set(key::kDeviceUpdateAllowedConnectionTypes, 5405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) POLICY_LEVEL_MANDATORY, 5415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) POLICY_SCOPE_MACHINE, 5427dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch allowed_connection_types, 5437dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch NULL); 5445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 546d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) if (container.has_http_downloads_enabled()) { 547d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) policies->Set( 548d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) key::kDeviceUpdateHttpDownloadsEnabled, 549d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) POLICY_LEVEL_MANDATORY, 550d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) POLICY_SCOPE_MACHINE, 551effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch new base::FundamentalValue(container.http_downloads_enabled()), 552d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) NULL); 553d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) } 554d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 5552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (container.has_reboot_after_update()) { 5562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) policies->Set(key::kRebootAfterUpdate, 5572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) POLICY_LEVEL_MANDATORY, 5582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) POLICY_SCOPE_MACHINE, 559effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch new base::FundamentalValue( 5605d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) container.reboot_after_update()), 5617dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch NULL); 5622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 56358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 56458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) if (container.has_p2p_enabled()) { 56558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) policies->Set(key::kDeviceAutoUpdateP2PEnabled, 56658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) POLICY_LEVEL_MANDATORY, 56758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) POLICY_SCOPE_MACHINE, 568effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch new base::FundamentalValue(container.p2p_enabled()), 56958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) NULL); 57058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) } 5715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 574eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochvoid DecodeAccessibilityPolicies(const em::ChromeDeviceSettingsProto& policy, 575eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch PolicyMap* policies) { 576eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch if (policy.has_accessibility_settings()) { 577eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch const em::AccessibilitySettingsProto& 578eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch container(policy.accessibility_settings()); 579eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 580eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch if (container.has_login_screen_default_large_cursor_enabled()) { 581eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch policies->Set( 582eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch key::kDeviceLoginScreenDefaultLargeCursorEnabled, 583eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch POLICY_LEVEL_MANDATORY, 584eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch POLICY_SCOPE_MACHINE, 585effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch new base::FundamentalValue( 5867dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch container.login_screen_default_large_cursor_enabled()), 5877dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch NULL); 588eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch } 589eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 590eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch if (container.has_login_screen_default_spoken_feedback_enabled()) { 591eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch policies->Set( 592eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch key::kDeviceLoginScreenDefaultSpokenFeedbackEnabled, 593eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch POLICY_LEVEL_MANDATORY, 594eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch POLICY_SCOPE_MACHINE, 595effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch new base::FundamentalValue( 5967dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch container.login_screen_default_spoken_feedback_enabled()), 5977dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch NULL); 598eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch } 599eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 600eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch if (container.has_login_screen_default_high_contrast_enabled()) { 601eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch policies->Set( 602eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch key::kDeviceLoginScreenDefaultHighContrastEnabled, 603eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch POLICY_LEVEL_MANDATORY, 604eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch POLICY_SCOPE_MACHINE, 605effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch new base::FundamentalValue( 6067dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch container.login_screen_default_high_contrast_enabled()), 6077dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch NULL); 608eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch } 609eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 610eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch if (container.has_login_screen_default_screen_magnifier_type()) { 611eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch policies->Set( 612eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch key::kDeviceLoginScreenDefaultScreenMagnifierType, 613eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch POLICY_LEVEL_MANDATORY, 614eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch POLICY_SCOPE_MACHINE, 615eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch DecodeIntegerValue( 616effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch container.login_screen_default_screen_magnifier_type()).release(), 6177dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch NULL); 618eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch } 6195d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (container.has_login_screen_default_virtual_keyboard_enabled()) { 6205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) policies->Set( 6215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) key::kDeviceLoginScreenDefaultVirtualKeyboardEnabled, 6225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) POLICY_LEVEL_MANDATORY, 6235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) POLICY_SCOPE_MACHINE, 624effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch new base::FundamentalValue( 6255d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) container.login_screen_default_virtual_keyboard_enabled()), 6265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) NULL); 6275d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 628eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch } 629eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch} 630eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 6315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void DecodeGenericPolicies(const em::ChromeDeviceSettingsProto& policy, 6325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PolicyMap* policies) { 6335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (policy.has_device_policy_refresh_rate()) { 6345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const em::DevicePolicyRefreshRateProto& container( 6355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) policy.device_policy_refresh_rate()); 6365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (container.has_device_policy_refresh_rate()) { 637effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch policies->Set( 638effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch key::kDevicePolicyRefreshRate, 639effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch POLICY_LEVEL_MANDATORY, 640effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch POLICY_SCOPE_MACHINE, 641effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch DecodeIntegerValue(container.device_policy_refresh_rate()).release(), 642effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch NULL); 6435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 6445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 6455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (policy.has_metrics_enabled()) { 6475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const em::MetricsEnabledProto& container(policy.metrics_enabled()); 6485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (container.has_metrics_enabled()) { 6495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) policies->Set(key::kDeviceMetricsReportingEnabled, 6505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) POLICY_LEVEL_MANDATORY, 6515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) POLICY_SCOPE_MACHINE, 652effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch new base::FundamentalValue( 6535d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) container.metrics_enabled()), 6547dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch NULL); 6555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 6565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 6575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (policy.has_start_up_urls()) { 6595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const em::StartUpUrlsProto& container(policy.start_up_urls()); 6605d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::ListValue* urls = new base::ListValue(); 661c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) RepeatedPtrField<std::string>::const_iterator entry; 662c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) for (entry = container.start_up_urls().begin(); 663c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) entry != container.start_up_urls().end(); 664c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ++entry) { 665effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch urls->Append(new base::StringValue(*entry)); 666c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 667c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) policies->Set(key::kDeviceStartUpUrls, 668c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) POLICY_LEVEL_MANDATORY, 669c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) POLICY_SCOPE_MACHINE, 6707dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch urls, 6717dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch NULL); 6725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 6735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (policy.has_system_timezone()) { 6755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (policy.system_timezone().has_timezone()) { 6765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) policies->Set(key::kSystemTimezone, 6775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) POLICY_LEVEL_MANDATORY, 6785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) POLICY_SCOPE_MACHINE, 679effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch new base::StringValue( 6807dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch policy.system_timezone().timezone()), 6817dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch NULL); 6825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 6835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 6842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 685bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch if (policy.has_use_24hour_clock()) { 686bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch if (policy.use_24hour_clock().has_use_24hour_clock()) { 687bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch policies->Set(key::kSystemUse24HourClock, 688bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch POLICY_LEVEL_MANDATORY, 689bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch POLICY_SCOPE_MACHINE, 690effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch new base::FundamentalValue( 691bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch policy.use_24hour_clock().use_24hour_clock()), 692bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch NULL); 693bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch } 694bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch } 695bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch 6962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (policy.has_allow_redeem_offers()) { 6972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const em::AllowRedeemChromeOsRegistrationOffersProto& container( 6982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) policy.allow_redeem_offers()); 6992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (container.has_allow_redeem_offers()) { 7002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) policies->Set(key::kDeviceAllowRedeemChromeOsRegistrationOffers, 7012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) POLICY_LEVEL_MANDATORY, 7022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) POLICY_SCOPE_MACHINE, 703effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch new base::FundamentalValue( 7047dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch container.allow_redeem_offers()), 7057dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch NULL); 7062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 7072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 7082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 7092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (policy.has_uptime_limit()) { 7102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const em::UptimeLimitProto& container(policy.uptime_limit()); 7112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (container.has_uptime_limit()) { 7122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) policies->Set(key::kUptimeLimit, 7132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) POLICY_LEVEL_MANDATORY, 7142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) POLICY_SCOPE_MACHINE, 715effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch DecodeIntegerValue(container.uptime_limit()).release(), 7167dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch NULL); 7172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 7182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 7192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 7202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (policy.has_start_up_flags()) { 7212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const em::StartUpFlagsProto& container(policy.start_up_flags()); 7225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::ListValue* flags = new base::ListValue(); 723c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) RepeatedPtrField<std::string>::const_iterator entry; 724c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) for (entry = container.flags().begin(); 725c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) entry != container.flags().end(); 726c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ++entry) { 727effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch flags->Append(new base::StringValue(*entry)); 728c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 729c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) policies->Set(key::kDeviceStartUpFlags, 730c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) POLICY_LEVEL_MANDATORY, 731c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) POLICY_SCOPE_MACHINE, 7327dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch flags, 7337dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch NULL); 734c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 735c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 736c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (policy.has_variations_parameter()) { 737c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (policy.variations_parameter().has_parameter()) { 738c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) policies->Set(key::kDeviceVariationsRestrictParameter, 7392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) POLICY_LEVEL_MANDATORY, 7402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) POLICY_SCOPE_MACHINE, 741effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch new base::StringValue( 7427dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch policy.variations_parameter().parameter()), 7437dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch NULL); 7442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 7452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 746a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) 747a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) if (policy.has_attestation_settings()) { 748a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) if (policy.attestation_settings().has_attestation_enabled()) { 749a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) policies->Set(key::kAttestationEnabledForDevice, 750a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) POLICY_LEVEL_MANDATORY, 751a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) POLICY_SCOPE_MACHINE, 752effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch new base::FundamentalValue( 7537dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch policy.attestation_settings().attestation_enabled()), 7547dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch NULL); 755a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) } 7563551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) if (policy.attestation_settings().has_content_protection_enabled()) { 7573551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) policies->Set( 7583551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) key::kAttestationForContentProtectionEnabled, 7593551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) POLICY_LEVEL_MANDATORY, 7603551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) POLICY_SCOPE_MACHINE, 761effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch new base::FundamentalValue( 7623551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) policy.attestation_settings().content_protection_enabled()), 7633551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) NULL); 7643551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) } 765a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) } 7669ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch 7679ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch if (policy.has_login_screen_power_management()) { 7689ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch const em::LoginScreenPowerManagementProto& container( 7699ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch policy.login_screen_power_management()); 7709ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch if (container.has_login_screen_power_management()) { 771effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch scoped_ptr<base::Value> decoded_json; 772effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch decoded_json = DecodeJsonStringAndDropUnknownBySchema( 773effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch container.login_screen_power_management(), 774effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch key::kDeviceLoginScreenPowerManagement); 775effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch if (decoded_json) { 776effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch policies->Set(key::kDeviceLoginScreenPowerManagement, 777effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch POLICY_LEVEL_MANDATORY, 778effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch POLICY_SCOPE_MACHINE, 779effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch decoded_json.release(), 780effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch NULL); 781effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch } 7829ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch } 7839ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch } 784cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 785cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if (policy.has_system_settings()) { 786cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) const em::SystemSettingsProto& container(policy.system_settings()); 787cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if (container.has_block_devmode()) { 788cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) policies->Set( 789cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) key::kDeviceBlockDevmode, 790cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) POLICY_LEVEL_MANDATORY, 791cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) POLICY_SCOPE_MACHINE, 792cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) new base::FundamentalValue(container.block_devmode()), 793cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) NULL); 794cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } 795cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } 7965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 7975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace 7995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void DecodeDevicePolicy(const em::ChromeDeviceSettingsProto& policy, 8015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PolicyMap* policies, 8025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EnterpriseInstallAttributes* install_attributes) { 803a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // TODO(achuith): Remove this once crbug.com/263527 is resolved. 804a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) VLOG(2) << "DecodeDevicePolicy " << policy.SerializeAsString(); 805a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 8065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Decode the various groups of policies. 8075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DecodeLoginPolicies(policy, policies); 8085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DecodeKioskPolicies(policy, policies, install_attributes); 8095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DecodeNetworkPolicies(policy, policies, install_attributes); 8105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DecodeReportingPolicies(policy, policies); 8115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DecodeAutoUpdatePolicies(policy, policies); 812eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch DecodeAccessibilityPolicies(policy, policies); 8135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DecodeGenericPolicies(policy, policies); 8145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 8155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace policy 817