Index: chrome/browser/chromeos/ownership/owner_settings_service_chromeos.h |
diff --git a/chrome/browser/chromeos/ownership/owner_settings_service_chromeos.h b/chrome/browser/chromeos/ownership/owner_settings_service_chromeos.h |
index 3d0116a4edf187e9a16a7b662e324ae923160fe7..8f47b4d968582b8e0ed8a6a907ea2cc25d325ddf 100644 |
--- a/chrome/browser/chromeos/ownership/owner_settings_service_chromeos.h |
+++ b/chrome/browser/chromeos/ownership/owner_settings_service_chromeos.h |
@@ -5,12 +5,12 @@ |
#ifndef CHROME_BROWSER_CHROMEOS_OWNERSHIP_OWNER_SETTINGS_SERVICE_CHROMEOS_H_ |
#define CHROME_BROWSER_CHROMEOS_OWNERSHIP_OWNER_SETTINGS_SERVICE_CHROMEOS_H_ |
-#include <string> |
+#include <deque> |
#include <vector> |
#include "base/callback_forward.h" |
+#include "base/compiler_specific.h" |
#include "base/macros.h" |
-#include "chrome/browser/chromeos/policy/proto/chrome_device_policy.pb.h" |
#include "chrome/browser/chromeos/settings/device_settings_service.h" |
#include "chromeos/dbus/session_manager_client.h" |
#include "components/keyed_service/core/keyed_service.h" |
@@ -27,6 +27,8 @@ |
namespace chromeos { |
+class SessionManagerOperation; |
+ |
// The class is a profile-keyed service which holds public/private |
// keypair corresponds to a profile. The keypair is reloaded automatically when |
// profile is created and TPM token is ready. Note that the private part of a |
@@ -36,19 +38,16 @@ |
// (crbug.com/230018). |
class OwnerSettingsServiceChromeOS : public ownership::OwnerSettingsService, |
public content::NotificationObserver, |
- public SessionManagerClient::Observer, |
- public DeviceSettingsService::Observer { |
+ public SessionManagerClient::Observer { |
public: |
virtual ~OwnerSettingsServiceChromeOS(); |
void OnTPMTokenReady(bool tpm_token_enabled); |
// ownership::OwnerSettingsService implementation: |
- virtual bool HandlesSetting(const std::string& setting) override; |
- virtual bool Set(const std::string& setting, |
- const base::Value& value) override; |
- virtual bool CommitTentativeDeviceSettings( |
- scoped_ptr<enterprise_management::PolicyData> policy) override; |
+ virtual void SignAndStorePolicyAsync( |
+ scoped_ptr<enterprise_management::PolicyData> policy, |
+ const base::Closure& callback) override; |
// NotificationObserver implementation: |
virtual void Observe(int type, |
@@ -58,10 +57,6 @@ |
// SessionManagerClient::Observer: |
virtual void OwnerKeySet(bool success) override; |
- // DeviceSettingsService::Observer: |
- virtual void OwnershipStatusChanged() override; |
- virtual void DeviceSettingsUpdated() override; |
- |
// Checks if the user is the device owner, without the user profile having to |
// been initialized. Should be used only if login state is in safe mode. |
static void IsOwnerForSafeModeAsync( |
@@ -69,26 +64,13 @@ |
const scoped_refptr<ownership::OwnerKeyUtil>& owner_key_util, |
const IsOwnerCallback& callback); |
- // Assembles PolicyData based on |settings|, |policy_data| and |
- // |user_id|. |
- static scoped_ptr<enterprise_management::PolicyData> AssemblePolicy( |
- const std::string& user_id, |
- const enterprise_management::PolicyData* policy_data, |
- const enterprise_management::ChromeDeviceSettingsProto* settings); |
- |
- // Updates device |settings|. |
- static void UpdateDeviceSettings( |
- const std::string& path, |
- const base::Value& value, |
- enterprise_management::ChromeDeviceSettingsProto& settings); |
- |
- bool has_pending_changes() const { return has_pending_changes_; } |
+ static void SetDeviceSettingsServiceForTesting( |
+ DeviceSettingsService* device_settings_service); |
private: |
friend class OwnerSettingsServiceChromeOSFactory; |
OwnerSettingsServiceChromeOS( |
- DeviceSettingsService* device_settings_service, |
Profile* profile, |
const scoped_refptr<ownership::OwnerKeyUtil>& owner_key_util); |
@@ -103,26 +85,13 @@ |
// Possibly notifies DeviceSettingsService that owner's keypair is loaded. |
virtual void OnPostKeypairLoadedActions() override; |
- // Tries to sign store current device settings if there're pending |
- // changes in device settings and no active previous call to |
- // DeviceSettingsService::Store(). |
- void StoreDeviceSettings(); |
+ // Performs next operation in the queue. |
+ void StartNextOperation(); |
- // Called when current device settings are successfully signed. |
- // Sends signed settings for storage. |
- void OnPolicyAssembledAndSigned( |
- scoped_ptr<enterprise_management::PolicyFetchResponse> policy_response); |
- |
- // Called by DeviceSettingsService when modified and signed device |
- // settings are stored. Notifies observers and tries to store device |
- // settings again. |
- void OnSignedPolicyStored(bool success); |
- |
- // Fetches device settings from DeviceSettingsService and merges |
- // them with local device settings. |
- bool UpdateFromService(); |
- |
- DeviceSettingsService* device_settings_service_; |
+ // Called when sign-and-store operation completes it's work. |
+ void HandleCompletedOperation(const base::Closure& callback, |
+ SessionManagerOperation* operation, |
+ DeviceSettingsService::Status status); |
// Profile this service instance belongs to. |
Profile* profile_; |
@@ -136,21 +105,13 @@ |
// Whether TPM token still needs to be initialized. |
bool waiting_for_tpm_token_; |
- // The device settings. This may be different from the actual |
- // current device settings (which can be obtained from |
- // DeviceSettingsService) in case the device does not have an owner |
- // yet or there are pending changes that have not yet been written |
- // to session_manager. |
- enterprise_management::ChromeDeviceSettingsProto device_settings_; |
- |
- // True if some settings were changed but not stored. |
- bool has_pending_changes_; |
+ // The queue of pending sign-and-store operations. The first operation on the |
+ // queue is currently active; it gets removed and destroyed once it completes. |
+ std::deque<SessionManagerOperation*> pending_operations_; |
content::NotificationRegistrar registrar_; |
base::WeakPtrFactory<OwnerSettingsServiceChromeOS> weak_factory_; |
- |
- base::WeakPtrFactory<OwnerSettingsServiceChromeOS> store_settings_factory_; |
DISALLOW_COPY_AND_ASSIGN(OwnerSettingsServiceChromeOS); |
}; |