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