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) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef CHROME_BROWSER_CHROMEOS_SETTINGS_DEVICE_SETTINGS_SERVICE_H_ 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define CHROME_BROWSER_CHROMEOS_SETTINGS_DEVICE_SETTINGS_SERVICE_H_ 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <deque> 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <string> 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <vector> 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/basictypes.h" 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/callback.h" 14c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "base/compiler_specific.h" 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/ref_counted.h" 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/scoped_ptr.h" 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/observer_list.h" 185f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "chrome/browser/chromeos/policy/proto/chrome_device_policy.pb.h" 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chromeos/dbus/session_manager_client.h" 201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "components/ownership/owner_settings_service.h" 21a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#include "components/policy/core/common/cloud/cloud_policy_validator.h" 22cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "crypto/scoped_nss_types.h" 230529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch#include "policy/proto/device_management_backend.pb.h" 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace crypto { 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class RSAPrivateKey; 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccinamespace ownership { 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class OwnerKeyUtil; 31f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)class PublicKey; 321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccinamespace chromeos { 351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class SessionManagerOperation; 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Deals with the low-level interface to Chromium OS device settings. Device 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// settings are stored in a protobuf that's protected by a cryptographic 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// signature generated by a key in the device owner's possession. Key and 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// settings are brokered by the session_manager daemon. 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// The purpose of DeviceSettingsService is to keep track of the current key and 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// settings blob. For reading and writing device settings, use CrosSettings 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// instead, which provides a high-level interface that allows for manipulation 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// of individual settings. 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// DeviceSettingsService generates notifications for key and policy update 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// events so interested parties can reload state as appropriate. 50f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)class DeviceSettingsService : public SessionManagerClient::Observer { 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Indicates ownership status of the device. 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) enum OwnershipStatus { 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Listed in upgrade order. 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) OWNERSHIP_UNKNOWN = 0, 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) OWNERSHIP_NONE, 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) OWNERSHIP_TAKEN 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) typedef base::Callback<void(OwnershipStatus)> OwnershipStatusCallback; 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Status codes for Store(). 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) enum Status { 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) STORE_SUCCESS, 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) STORE_KEY_UNAVAILABLE, // Owner key not yet configured. 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) STORE_POLICY_ERROR, // Failure constructing the settings blob. 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) STORE_OPERATION_FAILED, // IPC to session_manager daemon failed. 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) STORE_NO_POLICY, // No settings blob present. 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) STORE_INVALID_POLICY, // Invalid settings blob. 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) STORE_VALIDATION_ERROR, // Unrecoverable policy validation failure. 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) STORE_TEMP_VALIDATION_ERROR, // Temporary policy validation failure. 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Observer interface. 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) class Observer { 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~Observer(); 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Indicates device ownership status changes. 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void OwnershipStatusChanged() = 0; 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Gets call after updates to the device settings. 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void DeviceSettingsUpdated() = 0; 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 86c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Manage singleton instance. 87c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) static void Initialize(); 88c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) static bool IsInitialized(); 89c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) static void Shutdown(); 90c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) static DeviceSettingsService* Get(); 91c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Creates a device settings service instance. This is meant for unit tests, 93c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // production code uses the singleton returned by Get() above. 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DeviceSettingsService(); 95c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual ~DeviceSettingsService(); 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // To be called on startup once threads are initialized and DBus is ready. 98c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void SetSessionManager(SessionManagerClient* session_manager_client, 991320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci scoped_refptr<ownership::OwnerKeyUtil> owner_key_util); 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Prevents the service from making further calls to session_manager_client 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // and stops any pending operations. 103c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void UnsetSessionManager(); 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1055f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) SessionManagerClient* session_manager_client() const { 1065f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return session_manager_client_; 1075f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 1085f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns the currently active device settings. Returns NULL if the device 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // settings have not been retrieved from session_manager yet. 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const enterprise_management::PolicyData* policy_data() { 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return policy_data_.get(); 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const enterprise_management::ChromeDeviceSettingsProto* 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) device_settings() const { 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return device_settings_.get(); 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns the currently used owner key. 1201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci scoped_refptr<ownership::PublicKey> GetPublicKey(); 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns the status generated by the last operation. 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Status status() { 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return store_status_; 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Triggers an attempt to pull the public half of the owner key from disk and 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // load the device settings. 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void Load(); 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Signs |settings| with the private half of the owner key and sends the 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // resulting policy blob to session manager for storage. The result of the 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // operation is reported through |callback|. If successful, the updated device 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // settings are present in policy_data() and device_settings() when the 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // callback runs. 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void SignAndStore( 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<enterprise_management::ChromeDeviceSettingsProto> new_settings, 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const base::Closure& callback); 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1405f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // Sets the management related settings in PolicyData. 1410529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch void SetManagementSettings( 1420529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch enterprise_management::PolicyData::ManagementMode management_mode, 1430529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch const std::string& request_token, 1440529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch const std::string& device_id, 1450529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch const base::Closure& callback); 1460529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Stores a policy blob to session_manager. The result of the operation is 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // reported through |callback|. If successful, the updated device settings are 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // present in policy_data() and device_settings() when the callback runs. 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void Store(scoped_ptr<enterprise_management::PolicyFetchResponse> policy, 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const base::Closure& callback); 1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns the ownership status. May return OWNERSHIP_UNKNOWN if the disk 1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // hasn't been checked yet. 1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) OwnershipStatus GetOwnershipStatus(); 1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Determines the ownership status and reports the result to |callback|. This 1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // is guaranteed to never return OWNERSHIP_UNKNOWN. 1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void GetOwnershipStatusAsync(const OwnershipStatusCallback& callback); 1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Checks whether we have the private owner key. 1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool HasPrivateOwnerKey(); 1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Sets the identity of the user that's interacting with the service. This is 1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // relevant only for writing settings through SignAndStore(). 166f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) void InitOwner(const std::string& username, 1671320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const base::WeakPtr<ownership::OwnerSettingsService>& 1681320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci owner_settings_service); 1691320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& GetUsername() const; 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Adds an observer. 1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void AddObserver(Observer* observer); 1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Removes an observer. 1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void RemoveObserver(Observer* observer); 1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // SessionManagerClient::Observer: 1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void OwnerKeySet(bool success) OVERRIDE; 1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void PropertyChangeComplete(bool success) OVERRIDE; 1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 1821320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci friend class OwnerSettingsServiceChromeOS; 1835f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Enqueues a new operation. Takes ownership of |operation| and starts it 1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // right away if there is no active operation currently. 1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void Enqueue(SessionManagerOperation* operation); 1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Enqueues a load operation. 1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void EnqueueLoad(bool force_key_load); 1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Makes sure there's a reload operation so changes to the settings (and key, 1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // in case force_key_load is set) are getting picked up. 1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void EnsureReload(bool force_key_load); 1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Runs the next pending operation. 1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void StartNextOperation(); 1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Updates status, policy data and owner key from a finished operation. 1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Starts the next pending operation if available. 2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void HandleCompletedOperation(const base::Closure& callback, 2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SessionManagerOperation* operation, 2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Status status); 2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2045c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu // Updates status and invokes the callback immediately. 2055c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu void HandleError(Status status, const base::Closure& callback); 2065c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 2075f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // Called by OwnerSettingsService when sign-and-store operation completes. 2085f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) void OnSignAndStoreOperationCompleted(Status status); 2095c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 2105f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) void set_policy_data( 2115f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) scoped_ptr<enterprise_management::PolicyData> policy_data) { 2125f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) policy_data_ = policy_data.Pass(); 2135f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 2145c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 2155f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) void set_device_settings(scoped_ptr< 2165f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) enterprise_management::ChromeDeviceSettingsProto> device_settings) { 2175f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) device_settings_ = device_settings.Pass(); 2185f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 2190529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SessionManagerClient* session_manager_client_; 2211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci scoped_refptr<ownership::OwnerKeyUtil> owner_key_util_; 2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Status store_status_; 2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<OwnershipStatusCallback> pending_ownership_status_callbacks_; 2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string username_; 2281320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci scoped_refptr<ownership::PublicKey> public_key_; 2291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::WeakPtr<ownership::OwnerSettingsService> owner_settings_service_; 2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<enterprise_management::PolicyData> policy_data_; 2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<enterprise_management::ChromeDeviceSettingsProto> device_settings_; 2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The queue of pending operations. The first operation on the queue is 2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // currently active; it gets removed and destroyed once it completes. 2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::deque<SessionManagerOperation*> pending_operations_; 2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ObserverList<Observer, true> observers_; 2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // For recoverable load errors how many retries are left before we give up. 2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int load_retries_left_; 2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::WeakPtrFactory<DeviceSettingsService> weak_factory_; 2445d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(DeviceSettingsService); 2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 248c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Helper class for tests. Initializes the DeviceSettingsService singleton on 249c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// construction and tears it down again on destruction. 250c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)class ScopedTestDeviceSettingsService { 251c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) public: 252c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ScopedTestDeviceSettingsService(); 253c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ~ScopedTestDeviceSettingsService(); 254c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 255c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) private: 256c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(ScopedTestDeviceSettingsService); 257c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}; 258c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace chromeos 2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // CHROME_BROWSER_CHROMEOS_SETTINGS_DEVICE_SETTINGS_SERVICE_H_ 262