device_settings_cache.cc revision 5821806d5e7f356e8fa4b058a389a808ea183019
1d85c1e9800213d2a8750215f6980ae67411cac72Rafael Espindola// Copyright (c) 2012 The Chromium Authors. All rights reserved.
2d85c1e9800213d2a8750215f6980ae67411cac72Rafael Espindola// Use of this source code is governed by a BSD-style license that can be
3d85c1e9800213d2a8750215f6980ae67411cac72Rafael Espindola// found in the LICENSE file.
4d85c1e9800213d2a8750215f6980ae67411cac72Rafael Espindola
5d85c1e9800213d2a8750215f6980ae67411cac72Rafael Espindola#include "chrome/browser/chromeos/settings/device_settings_cache.h"
6d85c1e9800213d2a8750215f6980ae67411cac72Rafael Espindola
7d85c1e9800213d2a8750215f6980ae67411cac72Rafael Espindola#include <string>
8d85c1e9800213d2a8750215f6980ae67411cac72Rafael Espindola
9d85c1e9800213d2a8750215f6980ae67411cac72Rafael Espindola#include "base/base64.h"
10d85c1e9800213d2a8750215f6980ae67411cac72Rafael Espindola#include "base/bind.h"
11d85c1e9800213d2a8750215f6980ae67411cac72Rafael Espindola#include "chrome/browser/chromeos/settings/cros_settings.h"
12d85c1e9800213d2a8750215f6980ae67411cac72Rafael Espindola#include "chrome/browser/policy/proto/device_management_backend.pb.h"
13d85c1e9800213d2a8750215f6980ae67411cac72Rafael Espindola#include "chrome/browser/prefs/pref_service.h"
14d85c1e9800213d2a8750215f6980ae67411cac72Rafael Espindola#include "chrome/common/pref_names.h"
15d85c1e9800213d2a8750215f6980ae67411cac72Rafael Espindola
16d85c1e9800213d2a8750215f6980ae67411cac72Rafael Espindolanamespace em = enterprise_management;
17d85c1e9800213d2a8750215f6980ae67411cac72Rafael Espindola
18d85c1e9800213d2a8750215f6980ae67411cac72Rafael Espindolanamespace chromeos {
19d85c1e9800213d2a8750215f6980ae67411cac72Rafael Espindola
20d85c1e9800213d2a8750215f6980ae67411cac72Rafael Espindolanamespace device_settings_cache {
21d85c1e9800213d2a8750215f6980ae67411cac72Rafael Espindola
22d85c1e9800213d2a8750215f6980ae67411cac72Rafael Espindolavoid RegisterPrefs(PrefService* local_state) {
23d85c1e9800213d2a8750215f6980ae67411cac72Rafael Espindola  local_state->RegisterStringPref(prefs::kDeviceSettingsCache,
24d85c1e9800213d2a8750215f6980ae67411cac72Rafael Espindola                                  "invalid",
25d85c1e9800213d2a8750215f6980ae67411cac72Rafael Espindola                                  PrefService::UNSYNCABLE_PREF);
26ccdb2a5e0ab4b0a7fc9d3859c6bb1676182169d5Benjamin Kramer}
27ccdb2a5e0ab4b0a7fc9d3859c6bb1676182169d5Benjamin Kramer
28ccdb2a5e0ab4b0a7fc9d3859c6bb1676182169d5Benjamin Kramerbool Store(const em::PolicyData& policy, PrefService* local_state) {
29f18a87b1ce1be5ccc3b6b3dbd4f15374710e237bJeffrey Yasskin  if (local_state) {
307dc8e8175a3a1d4e40819932165e26b01091541ePeter Collingbourne    std::string policy_string = policy.SerializeAsString();
317dc8e8175a3a1d4e40819932165e26b01091541ePeter Collingbourne    std::string encoded;
32f18a87b1ce1be5ccc3b6b3dbd4f15374710e237bJeffrey Yasskin    if (!base::Base64Encode(policy_string, &encoded)) {
33f18a87b1ce1be5ccc3b6b3dbd4f15374710e237bJeffrey Yasskin      LOG(ERROR) << "Can't encode policy in base64.";
34f18a87b1ce1be5ccc3b6b3dbd4f15374710e237bJeffrey Yasskin      return false;
35f18a87b1ce1be5ccc3b6b3dbd4f15374710e237bJeffrey Yasskin    }
36f18a87b1ce1be5ccc3b6b3dbd4f15374710e237bJeffrey Yasskin    local_state->SetString(prefs::kDeviceSettingsCache, encoded);
37be5ff2f830d1833891051472d29818aa9f783cceRafael Espindola    return true;
38be5ff2f830d1833891051472d29818aa9f783cceRafael Espindola  }
39be5ff2f830d1833891051472d29818aa9f783cceRafael Espindola  return false;
40be5ff2f830d1833891051472d29818aa9f783cceRafael Espindola}
41be5ff2f830d1833891051472d29818aa9f783cceRafael Espindola
42be5ff2f830d1833891051472d29818aa9f783cceRafael Espindolabool Retrieve(em::PolicyData *policy, PrefService* local_state) {
43be5ff2f830d1833891051472d29818aa9f783cceRafael Espindola  if (local_state) {
44be5ff2f830d1833891051472d29818aa9f783cceRafael Espindola    std::string encoded =
45be5ff2f830d1833891051472d29818aa9f783cceRafael Espindola        local_state->GetString(prefs::kDeviceSettingsCache);
46be5ff2f830d1833891051472d29818aa9f783cceRafael Espindola    std::string policy_string;
47be5ff2f830d1833891051472d29818aa9f783cceRafael Espindola    if (!base::Base64Decode(encoded, &policy_string)) {
48be5ff2f830d1833891051472d29818aa9f783cceRafael Espindola      // This is normal and happens on first boot.
49be5ff2f830d1833891051472d29818aa9f783cceRafael Espindola      VLOG(1) << "Can't decode policy from base64.";
50f18a87b1ce1be5ccc3b6b3dbd4f15374710e237bJeffrey Yasskin      return false;
51f18a87b1ce1be5ccc3b6b3dbd4f15374710e237bJeffrey Yasskin    }
52f18a87b1ce1be5ccc3b6b3dbd4f15374710e237bJeffrey Yasskin    return policy->ParseFromString(policy_string);
53f18a87b1ce1be5ccc3b6b3dbd4f15374710e237bJeffrey Yasskin  }
54d85c1e9800213d2a8750215f6980ae67411cac72Rafael Espindola  return false;
55d85c1e9800213d2a8750215f6980ae67411cac72Rafael Espindola}
56d85c1e9800213d2a8750215f6980ae67411cac72Rafael Espindola
57d85c1e9800213d2a8750215f6980ae67411cac72Rafael Espindola}  // namespace device_settings_cache
58d85c1e9800213d2a8750215f6980ae67411cac72Rafael Espindola
59d85c1e9800213d2a8750215f6980ae67411cac72Rafael Espindola}  // namespace chromeos
60d85c1e9800213d2a8750215f6980ae67411cac72Rafael Espindola