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