device_settings_service.h revision 1320f92c476a1ad9d19dba2a48c72b75566198e9
16a34083e9f74a45e2f79c9fab66f177809a5db66Ted Kremenek// Copyright (c) 2012 The Chromium Authors. All rights reserved. 26a34083e9f74a45e2f79c9fab66f177809a5db66Ted Kremenek// Use of this source code is governed by a BSD-style license that can be 36a34083e9f74a45e2f79c9fab66f177809a5db66Ted Kremenek// found in the LICENSE file. 46a34083e9f74a45e2f79c9fab66f177809a5db66Ted Kremenek 56a34083e9f74a45e2f79c9fab66f177809a5db66Ted Kremenek#ifndef CHROME_BROWSER_CHROMEOS_SETTINGS_DEVICE_SETTINGS_SERVICE_H_ 66a34083e9f74a45e2f79c9fab66f177809a5db66Ted Kremenek#define CHROME_BROWSER_CHROMEOS_SETTINGS_DEVICE_SETTINGS_SERVICE_H_ 76a34083e9f74a45e2f79c9fab66f177809a5db66Ted Kremenek 86a34083e9f74a45e2f79c9fab66f177809a5db66Ted Kremenek#include <deque> 96a34083e9f74a45e2f79c9fab66f177809a5db66Ted Kremenek#include <string> 106a34083e9f74a45e2f79c9fab66f177809a5db66Ted Kremenek#include <vector> 116a34083e9f74a45e2f79c9fab66f177809a5db66Ted Kremenek 126a34083e9f74a45e2f79c9fab66f177809a5db66Ted Kremenek#include "base/basictypes.h" 136a34083e9f74a45e2f79c9fab66f177809a5db66Ted Kremenek#include "base/callback.h" 146a34083e9f74a45e2f79c9fab66f177809a5db66Ted Kremenek#include "base/compiler_specific.h" 15339b9c27759d7b6a53e2370f83f66e78b3254595Ted Kremenek#include "base/memory/ref_counted.h" 166a34083e9f74a45e2f79c9fab66f177809a5db66Ted Kremenek#include "base/memory/scoped_ptr.h" 176a34083e9f74a45e2f79c9fab66f177809a5db66Ted Kremenek#include "base/observer_list.h" 18867924dbeca06870573fd58d620032da6994b223Chris Lattner#include "chrome/browser/chromeos/policy/proto/chrome_device_policy.pb.h" 193245a0a1c7a4fd74fca845b2edba275bb126d773Chris Lattner#include "chromeos/dbus/session_manager_client.h" 206a34083e9f74a45e2f79c9fab66f177809a5db66Ted Kremenek#include "components/ownership/owner_settings_service.h" 2157df3b950061c73d13d3116f747e79d7955a216aChris Lattner#include "components/policy/core/common/cloud/cloud_policy_validator.h" 22339b9c27759d7b6a53e2370f83f66e78b3254595Ted Kremenek#include "crypto/scoped_nss_types.h" 236a34083e9f74a45e2f79c9fab66f177809a5db66Ted Kremenek#include "policy/proto/device_management_backend.pb.h" 24a95d3750441ac8ad03e36af8e6e74039c9a3109dTed Kremenek 256a34083e9f74a45e2f79c9fab66f177809a5db66Ted Kremeneknamespace crypto { 266a34083e9f74a45e2f79c9fab66f177809a5db66Ted Kremenekclass RSAPrivateKey; 279402b57a0dca4058fe56d7fd84e97fc496421125Chris Lattner} 285ef3e2c45f13fccdb0d7bbcf24c1beee8eee6f64Chris Lattner 295ef3e2c45f13fccdb0d7bbcf24c1beee8eee6f64Chris Lattnernamespace ownership { 305ef3e2c45f13fccdb0d7bbcf24c1beee8eee6f64Chris Lattnerclass OwnerKeyUtil; 315ef3e2c45f13fccdb0d7bbcf24c1beee8eee6f64Chris Lattnerclass PublicKey; 325ef3e2c45f13fccdb0d7bbcf24c1beee8eee6f64Chris Lattner} 335ef3e2c45f13fccdb0d7bbcf24c1beee8eee6f64Chris Lattner 345ef3e2c45f13fccdb0d7bbcf24c1beee8eee6f64Chris Lattnernamespace chromeos { 35f7cf85b330bedd2877e1371fb0a83e99751ae162Chris Lattner 36f7cf85b330bedd2877e1371fb0a83e99751ae162Chris Lattnerclass SessionManagerOperation; 37a11d61793341fea195c29a0dab3fbd74f2b39a8cChris Lattner 38a11d61793341fea195c29a0dab3fbd74f2b39a8cChris Lattner// Deals with the low-level interface to Chromium OS device settings. Device 395ef3e2c45f13fccdb0d7bbcf24c1beee8eee6f64Chris Lattner// settings are stored in a protobuf that's protected by a cryptographic 4052c29081281955d3db9e11d10573b2d38f709099Chris Lattner// signature generated by a key in the device owner's possession. Key and 4152c29081281955d3db9e11d10573b2d38f709099Chris Lattner// settings are brokered by the session_manager daemon. 421eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump// 435ef3e2c45f13fccdb0d7bbcf24c1beee8eee6f64Chris Lattner// The purpose of DeviceSettingsService is to keep track of the current key and 442c78b873f4f3823ae859c15674cb3d76c8554113Chris Lattner// settings blob. For reading and writing device settings, use CrosSettings 451eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump// instead, which provides a high-level interface that allows for manipulation 462b2453a7d8fe732561795431f39ceb2b2a832d84Chris Lattner// of individual settings. 472b2453a7d8fe732561795431f39ceb2b2a832d84Chris Lattner// 485ef3e2c45f13fccdb0d7bbcf24c1beee8eee6f64Chris Lattner// DeviceSettingsService generates notifications for key and policy update 495ef3e2c45f13fccdb0d7bbcf24c1beee8eee6f64Chris Lattner// events so interested parties can reload state as appropriate. 505ef3e2c45f13fccdb0d7bbcf24c1beee8eee6f64Chris Lattnerclass DeviceSettingsService : public SessionManagerClient::Observer { 515ef3e2c45f13fccdb0d7bbcf24c1beee8eee6f64Chris Lattner public: 525ef3e2c45f13fccdb0d7bbcf24c1beee8eee6f64Chris Lattner // Indicates ownership status of the device. 535ef3e2c45f13fccdb0d7bbcf24c1beee8eee6f64Chris Lattner enum OwnershipStatus { 545ef3e2c45f13fccdb0d7bbcf24c1beee8eee6f64Chris Lattner // Listed in upgrade order. 559402b57a0dca4058fe56d7fd84e97fc496421125Chris Lattner OWNERSHIP_UNKNOWN = 0, 56d7407dc92c7d19cafce429e7e1cf9819d3fc0b92Daniel Dunbar OWNERSHIP_NONE, 57d7407dc92c7d19cafce429e7e1cf9819d3fc0b92Daniel Dunbar OWNERSHIP_TAKEN 581eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump }; 599402b57a0dca4058fe56d7fd84e97fc496421125Chris Lattner 609402b57a0dca4058fe56d7fd84e97fc496421125Chris Lattner typedef base::Callback<void(OwnershipStatus)> OwnershipStatusCallback; 619402b57a0dca4058fe56d7fd84e97fc496421125Chris Lattner 621eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump // Status codes for Store(). 639402b57a0dca4058fe56d7fd84e97fc496421125Chris Lattner enum Status { 649402b57a0dca4058fe56d7fd84e97fc496421125Chris Lattner STORE_SUCCESS, 659402b57a0dca4058fe56d7fd84e97fc496421125Chris Lattner STORE_KEY_UNAVAILABLE, // Owner key not yet configured. 669402b57a0dca4058fe56d7fd84e97fc496421125Chris Lattner STORE_POLICY_ERROR, // Failure constructing the settings blob. 679402b57a0dca4058fe56d7fd84e97fc496421125Chris Lattner STORE_OPERATION_FAILED, // IPC to session_manager daemon failed. 689402b57a0dca4058fe56d7fd84e97fc496421125Chris Lattner STORE_NO_POLICY, // No settings blob present. 699402b57a0dca4058fe56d7fd84e97fc496421125Chris Lattner STORE_INVALID_POLICY, // Invalid settings blob. 709402b57a0dca4058fe56d7fd84e97fc496421125Chris Lattner STORE_VALIDATION_ERROR, // Unrecoverable policy validation failure. 71d7407dc92c7d19cafce429e7e1cf9819d3fc0b92Daniel Dunbar STORE_TEMP_VALIDATION_ERROR, // Temporary policy validation failure. 721eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump }; 739402b57a0dca4058fe56d7fd84e97fc496421125Chris Lattner 749402b57a0dca4058fe56d7fd84e97fc496421125Chris Lattner // Observer interface. 759402b57a0dca4058fe56d7fd84e97fc496421125Chris Lattner class Observer { 769402b57a0dca4058fe56d7fd84e97fc496421125Chris Lattner public: 779402b57a0dca4058fe56d7fd84e97fc496421125Chris Lattner virtual ~Observer(); 789402b57a0dca4058fe56d7fd84e97fc496421125Chris Lattner 799402b57a0dca4058fe56d7fd84e97fc496421125Chris Lattner // Indicates device ownership status changes. 809402b57a0dca4058fe56d7fd84e97fc496421125Chris Lattner virtual void OwnershipStatusChanged() = 0; 819402b57a0dca4058fe56d7fd84e97fc496421125Chris Lattner 829402b57a0dca4058fe56d7fd84e97fc496421125Chris Lattner // Gets call after updates to the device settings. 839402b57a0dca4058fe56d7fd84e97fc496421125Chris Lattner virtual void DeviceSettingsUpdated() = 0; 849402b57a0dca4058fe56d7fd84e97fc496421125Chris Lattner }; 859402b57a0dca4058fe56d7fd84e97fc496421125Chris Lattner 861eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump // Manage singleton instance. 879402b57a0dca4058fe56d7fd84e97fc496421125Chris Lattner static void Initialize(); 889402b57a0dca4058fe56d7fd84e97fc496421125Chris Lattner static bool IsInitialized(); 899402b57a0dca4058fe56d7fd84e97fc496421125Chris Lattner static void Shutdown(); 90d7407dc92c7d19cafce429e7e1cf9819d3fc0b92Daniel Dunbar static DeviceSettingsService* Get(); 919402b57a0dca4058fe56d7fd84e97fc496421125Chris Lattner 929402b57a0dca4058fe56d7fd84e97fc496421125Chris Lattner // Creates a device settings service instance. This is meant for unit tests, 931eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump // production code uses the singleton returned by Get() above. 949402b57a0dca4058fe56d7fd84e97fc496421125Chris Lattner DeviceSettingsService(); 959402b57a0dca4058fe56d7fd84e97fc496421125Chris Lattner virtual ~DeviceSettingsService(); 969402b57a0dca4058fe56d7fd84e97fc496421125Chris Lattner 979402b57a0dca4058fe56d7fd84e97fc496421125Chris Lattner // To be called on startup once threads are initialized and DBus is ready. 989402b57a0dca4058fe56d7fd84e97fc496421125Chris Lattner void SetSessionManager(SessionManagerClient* session_manager_client, 995ef3e2c45f13fccdb0d7bbcf24c1beee8eee6f64Chris Lattner scoped_refptr<ownership::OwnerKeyUtil> owner_key_util); 1005ef3e2c45f13fccdb0d7bbcf24c1beee8eee6f64Chris Lattner 1012b2453a7d8fe732561795431f39ceb2b2a832d84Chris Lattner // Prevents the service from making further calls to session_manager_client 102fa5be3617294f0e3c341f0ecb6b2076478b1b5acTed Kremenek // and stops any pending operations. 1031eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump void UnsetSessionManager(); 1042b2453a7d8fe732561795431f39ceb2b2a832d84Chris Lattner 1056a34083e9f74a45e2f79c9fab66f177809a5db66Ted Kremenek SessionManagerClient* session_manager_client() const { 1066a34083e9f74a45e2f79c9fab66f177809a5db66Ted Kremenek return session_manager_client_; 1071eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump } 1086a34083e9f74a45e2f79c9fab66f177809a5db66Ted Kremenek 1091eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump // Returns the currently active device settings. Returns NULL if the device 1102b2453a7d8fe732561795431f39ceb2b2a832d84Chris Lattner // settings have not been retrieved from session_manager yet. 1115c176f7a9ba9f7084b903393845be24f85e091daChris Lattner const enterprise_management::PolicyData* policy_data() { 1125c176f7a9ba9f7084b903393845be24f85e091daChris Lattner return policy_data_.get(); 1136a34083e9f74a45e2f79c9fab66f177809a5db66Ted Kremenek } 1146a34083e9f74a45e2f79c9fab66f177809a5db66Ted Kremenek const enterprise_management::ChromeDeviceSettingsProto* 1155c176f7a9ba9f7084b903393845be24f85e091daChris Lattner device_settings() const { 1165c176f7a9ba9f7084b903393845be24f85e091daChris Lattner return device_settings_.get(); 1175c176f7a9ba9f7084b903393845be24f85e091daChris Lattner } 1185c176f7a9ba9f7084b903393845be24f85e091daChris Lattner 1195c176f7a9ba9f7084b903393845be24f85e091daChris Lattner // Returns the currently used owner key. 1201eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump scoped_refptr<ownership::PublicKey> GetPublicKey(); 121735271479ac57c27f744806859efd5b001dea248Chris Lattner 122735271479ac57c27f744806859efd5b001dea248Chris Lattner // Returns the status generated by the last operation. 123d7407dc92c7d19cafce429e7e1cf9819d3fc0b92Daniel Dunbar Status status() { 1245c176f7a9ba9f7084b903393845be24f85e091daChris Lattner return store_status_; 125735271479ac57c27f744806859efd5b001dea248Chris Lattner } 126f3d8d19caf6f1a21785eee8d62c45ef5a0a0e72eChris Lattner 127d7407dc92c7d19cafce429e7e1cf9819d3fc0b92Daniel Dunbar // Triggers an attempt to pull the public half of the owner key from disk and 128f3d8d19caf6f1a21785eee8d62c45ef5a0a0e72eChris Lattner // load the device settings. 129f3d8d19caf6f1a21785eee8d62c45ef5a0a0e72eChris Lattner void Load(); 1301eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump 1315c176f7a9ba9f7084b903393845be24f85e091daChris Lattner // Signs |settings| with the private half of the owner key and sends the 132735271479ac57c27f744806859efd5b001dea248Chris Lattner // resulting policy blob to session manager for storage. The result of the 13349cd6354d5373245dd2e69ca7b7113e6a795d36eTed Kremenek // operation is reported through |callback|. If successful, the updated device 1345c176f7a9ba9f7084b903393845be24f85e091daChris Lattner // settings are present in policy_data() and device_settings() when the 135735271479ac57c27f744806859efd5b001dea248Chris Lattner // callback runs. 136d7407dc92c7d19cafce429e7e1cf9819d3fc0b92Daniel Dunbar void SignAndStore( 137d7407dc92c7d19cafce429e7e1cf9819d3fc0b92Daniel Dunbar scoped_ptr<enterprise_management::ChromeDeviceSettingsProto> new_settings, 138d7407dc92c7d19cafce429e7e1cf9819d3fc0b92Daniel Dunbar const base::Closure& callback); 139735271479ac57c27f744806859efd5b001dea248Chris Lattner 140d7407dc92c7d19cafce429e7e1cf9819d3fc0b92Daniel Dunbar // Sets the management related settings in PolicyData. 1415c176f7a9ba9f7084b903393845be24f85e091daChris Lattner void SetManagementSettings( 142735271479ac57c27f744806859efd5b001dea248Chris Lattner enterprise_management::PolicyData::ManagementMode management_mode, 1435c176f7a9ba9f7084b903393845be24f85e091daChris Lattner const std::string& request_token, 144735271479ac57c27f744806859efd5b001dea248Chris Lattner const std::string& device_id, 145d7407dc92c7d19cafce429e7e1cf9819d3fc0b92Daniel Dunbar const base::Closure& callback); 1465c176f7a9ba9f7084b903393845be24f85e091daChris Lattner 147735271479ac57c27f744806859efd5b001dea248Chris Lattner // Stores a policy blob to session_manager. The result of the operation is 1481eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump // reported through |callback|. If successful, the updated device settings are 149735271479ac57c27f744806859efd5b001dea248Chris Lattner // present in policy_data() and device_settings() when the callback runs. 150d7407dc92c7d19cafce429e7e1cf9819d3fc0b92Daniel Dunbar void Store(scoped_ptr<enterprise_management::PolicyFetchResponse> policy, 1515c176f7a9ba9f7084b903393845be24f85e091daChris Lattner const base::Closure& callback); 152735271479ac57c27f744806859efd5b001dea248Chris Lattner 1531eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump // Returns the ownership status. May return OWNERSHIP_UNKNOWN if the disk 154735271479ac57c27f744806859efd5b001dea248Chris Lattner // hasn't been checked yet. 155d7407dc92c7d19cafce429e7e1cf9819d3fc0b92Daniel Dunbar OwnershipStatus GetOwnershipStatus(); 1565c176f7a9ba9f7084b903393845be24f85e091daChris Lattner 157735271479ac57c27f744806859efd5b001dea248Chris Lattner // Determines the ownership status and reports the result to |callback|. This 1586a34083e9f74a45e2f79c9fab66f177809a5db66Ted Kremenek // is guaranteed to never return OWNERSHIP_UNKNOWN. 1596a34083e9f74a45e2f79c9fab66f177809a5db66Ted Kremenek void GetOwnershipStatusAsync(const OwnershipStatusCallback& callback); 1606a34083e9f74a45e2f79c9fab66f177809a5db66Ted Kremenek 1616a34083e9f74a45e2f79c9fab66f177809a5db66Ted Kremenek // Checks whether we have the private owner key. 162fa5be3617294f0e3c341f0ecb6b2076478b1b5acTed Kremenek bool HasPrivateOwnerKey(); 163fa5be3617294f0e3c341f0ecb6b2076478b1b5acTed Kremenek 1641eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump // Sets the identity of the user that's interacting with the service. This is 165053ef593fa9d2b890645a914eee203231fb34458Ted Kremenek // relevant only for writing settings through SignAndStore(). 166a95d3750441ac8ad03e36af8e6e74039c9a3109dTed Kremenek void InitOwner(const std::string& username, 167a95d3750441ac8ad03e36af8e6e74039c9a3109dTed Kremenek const base::WeakPtr<ownership::OwnerSettingsService>& 1681eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump owner_settings_service); 169053ef593fa9d2b890645a914eee203231fb34458Ted Kremenek 1701eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const std::string& GetUsername() const; 171053ef593fa9d2b890645a914eee203231fb34458Ted Kremenek 172053ef593fa9d2b890645a914eee203231fb34458Ted Kremenek // Adds an observer. 1738570f0b0fde7ca812f8d37f52305f3df4dd2ce01Chris Lattner void AddObserver(Observer* observer); 1748570f0b0fde7ca812f8d37f52305f3df4dd2ce01Chris Lattner // Removes an observer. 1751eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump void RemoveObserver(Observer* observer); 1768570f0b0fde7ca812f8d37f52305f3df4dd2ce01Chris Lattner 1778570f0b0fde7ca812f8d37f52305f3df4dd2ce01Chris Lattner // SessionManagerClient::Observer: 1788570f0b0fde7ca812f8d37f52305f3df4dd2ce01Chris Lattner virtual void OwnerKeySet(bool success) OVERRIDE; 1798570f0b0fde7ca812f8d37f52305f3df4dd2ce01Chris Lattner virtual void PropertyChangeComplete(bool success) OVERRIDE; 1801eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump 181c01b46e2f115bed83f2f6f4a55809bf4003ee015Zhongxing Xu private: 182c01b46e2f115bed83f2f6f4a55809bf4003ee015Zhongxing Xu friend class OwnerSettingsServiceChromeOS; 183c01b46e2f115bed83f2f6f4a55809bf4003ee015Zhongxing Xu 184c01b46e2f115bed83f2f6f4a55809bf4003ee015Zhongxing Xu // Enqueues a new operation. Takes ownership of |operation| and starts it 185c01b46e2f115bed83f2f6f4a55809bf4003ee015Zhongxing Xu // right away if there is no active operation currently. 186c01b46e2f115bed83f2f6f4a55809bf4003ee015Zhongxing Xu void Enqueue(SessionManagerOperation* operation); 187c01b46e2f115bed83f2f6f4a55809bf4003ee015Zhongxing Xu 188c01b46e2f115bed83f2f6f4a55809bf4003ee015Zhongxing Xu // Enqueues a load operation. 189c01b46e2f115bed83f2f6f4a55809bf4003ee015Zhongxing Xu void EnqueueLoad(bool force_key_load); 1901eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump 191c01b46e2f115bed83f2f6f4a55809bf4003ee015Zhongxing Xu // Makes sure there's a reload operation so changes to the settings (and key, 1921eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump // in case force_key_load is set) are getting picked up. 193c01b46e2f115bed83f2f6f4a55809bf4003ee015Zhongxing Xu void EnsureReload(bool force_key_load); 1941eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump 195c01b46e2f115bed83f2f6f4a55809bf4003ee015Zhongxing Xu // Runs the next pending operation. 196c01b46e2f115bed83f2f6f4a55809bf4003ee015Zhongxing Xu void StartNextOperation(); 197c01b46e2f115bed83f2f6f4a55809bf4003ee015Zhongxing Xu 198053ef593fa9d2b890645a914eee203231fb34458Ted Kremenek // Updates status, policy data and owner key from a finished operation. 199053ef593fa9d2b890645a914eee203231fb34458Ted Kremenek // Starts the next pending operation if available. 2001eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump void HandleCompletedOperation(const base::Closure& callback, 201053ef593fa9d2b890645a914eee203231fb34458Ted Kremenek SessionManagerOperation* operation, 202053ef593fa9d2b890645a914eee203231fb34458Ted Kremenek Status status); 203053ef593fa9d2b890645a914eee203231fb34458Ted Kremenek 2048570f0b0fde7ca812f8d37f52305f3df4dd2ce01Chris Lattner // Updates status and invokes the callback immediately. 2058570f0b0fde7ca812f8d37f52305f3df4dd2ce01Chris Lattner void HandleError(Status status, const base::Closure& callback); 2067e37c818f9f77608c602ffb32c1135e3cd0132a8Daniel Dunbar 2077e37c818f9f77608c602ffb32c1135e3cd0132a8Daniel Dunbar // Called by OwnerSettingsService when sign-and-store operation completes. 2087e37c818f9f77608c602ffb32c1135e3cd0132a8Daniel Dunbar void OnSignAndStoreOperationCompleted(Status status); 2097e37c818f9f77608c602ffb32c1135e3cd0132a8Daniel Dunbar 2107e37c818f9f77608c602ffb32c1135e3cd0132a8Daniel Dunbar void set_policy_data( 2117e37c818f9f77608c602ffb32c1135e3cd0132a8Daniel Dunbar scoped_ptr<enterprise_management::PolicyData> policy_data) { 2121eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump policy_data_ = policy_data.Pass(); 21349cd6354d5373245dd2e69ca7b7113e6a795d36eTed Kremenek } 2147e37c818f9f77608c602ffb32c1135e3cd0132a8Daniel Dunbar 215d7407dc92c7d19cafce429e7e1cf9819d3fc0b92Daniel Dunbar void set_device_settings(scoped_ptr< 21657df3b950061c73d13d3116f747e79d7955a216aChris Lattner enterprise_management::ChromeDeviceSettingsProto> device_settings) { 217d7407dc92c7d19cafce429e7e1cf9819d3fc0b92Daniel Dunbar device_settings_ = device_settings.Pass(); 218d7407dc92c7d19cafce429e7e1cf9819d3fc0b92Daniel Dunbar } 21949cd6354d5373245dd2e69ca7b7113e6a795d36eTed Kremenek 220b485cd1e0a5a1e942d0e682b9b1c4bc9df111528Ted Kremenek SessionManagerClient* session_manager_client_; 221b485cd1e0a5a1e942d0e682b9b1c4bc9df111528Ted Kremenek scoped_refptr<ownership::OwnerKeyUtil> owner_key_util_; 2222b2453a7d8fe732561795431f39ceb2b2a832d84Chris Lattner 223b485cd1e0a5a1e942d0e682b9b1c4bc9df111528Ted Kremenek Status store_status_; 2242b2453a7d8fe732561795431f39ceb2b2a832d84Chris Lattner 225b485cd1e0a5a1e942d0e682b9b1c4bc9df111528Ted Kremenek std::vector<OwnershipStatusCallback> pending_ownership_status_callbacks_; 226b485cd1e0a5a1e942d0e682b9b1c4bc9df111528Ted Kremenek 227b485cd1e0a5a1e942d0e682b9b1c4bc9df111528Ted Kremenek std::string username_; 2282b2453a7d8fe732561795431f39ceb2b2a832d84Chris Lattner scoped_refptr<ownership::PublicKey> public_key_; 2291eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump base::WeakPtr<ownership::OwnerSettingsService> owner_settings_service_; 230b485cd1e0a5a1e942d0e682b9b1c4bc9df111528Ted Kremenek 2311eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump scoped_ptr<enterprise_management::PolicyData> policy_data_; 232b485cd1e0a5a1e942d0e682b9b1c4bc9df111528Ted Kremenek scoped_ptr<enterprise_management::ChromeDeviceSettingsProto> device_settings_; 233b485cd1e0a5a1e942d0e682b9b1c4bc9df111528Ted Kremenek 2341eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump // The queue of pending operations. The first operation on the queue is 2351eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump // currently active; it gets removed and destroyed once it completes. 2361eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump std::deque<SessionManagerOperation*> pending_operations_; 237b485cd1e0a5a1e942d0e682b9b1c4bc9df111528Ted Kremenek 238b485cd1e0a5a1e942d0e682b9b1c4bc9df111528Ted Kremenek ObserverList<Observer, true> observers_; 239b485cd1e0a5a1e942d0e682b9b1c4bc9df111528Ted Kremenek 2401eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump // For recoverable load errors how many retries are left before we give up. 241b485cd1e0a5a1e942d0e682b9b1c4bc9df111528Ted Kremenek int load_retries_left_; 242b485cd1e0a5a1e942d0e682b9b1c4bc9df111528Ted Kremenek 2431eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump base::WeakPtrFactory<DeviceSettingsService> weak_factory_; 244b485cd1e0a5a1e942d0e682b9b1c4bc9df111528Ted Kremenek 2451eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump DISALLOW_COPY_AND_ASSIGN(DeviceSettingsService); 24649cd6354d5373245dd2e69ca7b7113e6a795d36eTed Kremenek}; 24749cd6354d5373245dd2e69ca7b7113e6a795d36eTed Kremenek 24849cd6354d5373245dd2e69ca7b7113e6a795d36eTed Kremenek// Helper class for tests. Initializes the DeviceSettingsService singleton on 2491eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump// construction and tears it down again on destruction. 25049cd6354d5373245dd2e69ca7b7113e6a795d36eTed Kremenekclass ScopedTestDeviceSettingsService { 25149cd6354d5373245dd2e69ca7b7113e6a795d36eTed Kremenek public: 252b485cd1e0a5a1e942d0e682b9b1c4bc9df111528Ted Kremenek ScopedTestDeviceSettingsService(); 253b485cd1e0a5a1e942d0e682b9b1c4bc9df111528Ted Kremenek ~ScopedTestDeviceSettingsService(); 2541eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump 25549cd6354d5373245dd2e69ca7b7113e6a795d36eTed Kremenek private: 25649cd6354d5373245dd2e69ca7b7113e6a795d36eTed Kremenek DISALLOW_COPY_AND_ASSIGN(ScopedTestDeviceSettingsService); 2571eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump}; 2588570f0b0fde7ca812f8d37f52305f3df4dd2ce01Chris Lattner 259d6c1360c2bf234c73572a865f119d0518aca8154Ted Kremenek} // namespace chromeos 2601eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump 2618570f0b0fde7ca812f8d37f52305f3df4dd2ce01Chris Lattner#endif // CHROME_BROWSER_CHROMEOS_SETTINGS_DEVICE_SETTINGS_SERVICE_H_ 262d7407dc92c7d19cafce429e7e1cf9819d3fc0b92Daniel Dunbar