Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1115)

Side by Side Diff: chrome/browser/chromeos/ownership/owner_settings_service_chromeos.h

Issue 654263003: Implemented OwnerSettingsService::Set() method. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fixed crashes under asan. Created 6 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #ifndef CHROME_BROWSER_CHROMEOS_OWNERSHIP_OWNER_SETTINGS_SERVICE_CHROMEOS_H_ 5 #ifndef CHROME_BROWSER_CHROMEOS_OWNERSHIP_OWNER_SETTINGS_SERVICE_CHROMEOS_H_
6 #define CHROME_BROWSER_CHROMEOS_OWNERSHIP_OWNER_SETTINGS_SERVICE_CHROMEOS_H_ 6 #define CHROME_BROWSER_CHROMEOS_OWNERSHIP_OWNER_SETTINGS_SERVICE_CHROMEOS_H_
7 7
8 #include <deque> 8 #include <string>
9 #include <vector> 9 #include <vector>
10 10
11 #include "base/callback_forward.h" 11 #include "base/callback_forward.h"
12 #include "base/compiler_specific.h"
13 #include "base/macros.h" 12 #include "base/macros.h"
13 #include "chrome/browser/chromeos/policy/proto/chrome_device_policy.pb.h"
14 #include "chrome/browser/chromeos/settings/device_settings_service.h" 14 #include "chrome/browser/chromeos/settings/device_settings_service.h"
15 #include "chromeos/dbus/session_manager_client.h" 15 #include "chromeos/dbus/session_manager_client.h"
16 #include "components/keyed_service/core/keyed_service.h" 16 #include "components/keyed_service/core/keyed_service.h"
17 #include "components/ownership/owner_key_util.h" 17 #include "components/ownership/owner_key_util.h"
18 #include "components/ownership/owner_settings_service.h" 18 #include "components/ownership/owner_settings_service.h"
19 #include "content/public/browser/notification_observer.h" 19 #include "content/public/browser/notification_observer.h"
20 #include "content/public/browser/notification_registrar.h" 20 #include "content/public/browser/notification_registrar.h"
21 21
22 class Profile; 22 class Profile;
23 23
24 namespace ownership { 24 namespace ownership {
25 class OwnerKeyUtil; 25 class OwnerKeyUtil;
26 } 26 }
27 27
28 namespace chromeos { 28 namespace chromeos {
29 29
30 class SessionManagerOperation;
31
32 // The class is a profile-keyed service which holds public/private 30 // The class is a profile-keyed service which holds public/private
33 // keypair corresponds to a profile. The keypair is reloaded automatically when 31 // keypair corresponds to a profile. The keypair is reloaded automatically when
34 // profile is created and TPM token is ready. Note that the private part of a 32 // profile is created and TPM token is ready. Note that the private part of a
35 // key can be loaded only for the owner. 33 // key can be loaded only for the owner.
36 // 34 //
37 // TODO (ygorshenin@): move write path for device settings here 35 // TODO (ygorshenin@): move write path for device settings here
38 // (crbug.com/230018). 36 // (crbug.com/230018).
39 class OwnerSettingsServiceChromeOS : public ownership::OwnerSettingsService, 37 class OwnerSettingsServiceChromeOS : public ownership::OwnerSettingsService,
40 public content::NotificationObserver, 38 public content::NotificationObserver,
41 public SessionManagerClient::Observer { 39 public SessionManagerClient::Observer,
40 public DeviceSettingsService::Observer {
42 public: 41 public:
43 virtual ~OwnerSettingsServiceChromeOS(); 42 virtual ~OwnerSettingsServiceChromeOS();
44 43
45 void OnTPMTokenReady(bool tpm_token_enabled); 44 void OnTPMTokenReady(bool tpm_token_enabled);
46 45
47 // ownership::OwnerSettingsService implementation: 46 // ownership::OwnerSettingsService implementation:
48 virtual void SignAndStorePolicyAsync( 47 virtual bool HandlesSetting(const std::string& setting) override;
49 scoped_ptr<enterprise_management::PolicyData> policy, 48 virtual bool Set(const std::string& setting,
50 const base::Closure& callback) override; 49 const base::Value& value) override;
50 virtual bool CommitTentativeDeviceSettings(
51 scoped_ptr<enterprise_management::PolicyData> policy) override;
51 52
52 // NotificationObserver implementation: 53 // NotificationObserver implementation:
53 virtual void Observe(int type, 54 virtual void Observe(int type,
54 const content::NotificationSource& source, 55 const content::NotificationSource& source,
55 const content::NotificationDetails& details) override; 56 const content::NotificationDetails& details) override;
56 57
57 // SessionManagerClient::Observer: 58 // SessionManagerClient::Observer:
58 virtual void OwnerKeySet(bool success) override; 59 virtual void OwnerKeySet(bool success) override;
59 60
61 // DeviceSettingsService::Observer:
62 virtual void OwnershipStatusChanged() override;
63 virtual void DeviceSettingsUpdated() override;
64 virtual void OnDeviceSettingsServiceShutdown() override;
65
60 // Checks if the user is the device owner, without the user profile having to 66 // Checks if the user is the device owner, without the user profile having to
61 // been initialized. Should be used only if login state is in safe mode. 67 // been initialized. Should be used only if login state is in safe mode.
62 static void IsOwnerForSafeModeAsync( 68 static void IsOwnerForSafeModeAsync(
63 const std::string& user_hash, 69 const std::string& user_hash,
64 const scoped_refptr<ownership::OwnerKeyUtil>& owner_key_util, 70 const scoped_refptr<ownership::OwnerKeyUtil>& owner_key_util,
65 const IsOwnerCallback& callback); 71 const IsOwnerCallback& callback);
66 72
67 static void SetDeviceSettingsServiceForTesting( 73 // Assembles PolicyData based on |settings|, |policy_data| and
68 DeviceSettingsService* device_settings_service); 74 // |user_id|.
75 static scoped_ptr<enterprise_management::PolicyData> AssemblePolicy(
76 const std::string& user_id,
77 const enterprise_management::PolicyData* policy_data,
78 const enterprise_management::ChromeDeviceSettingsProto* settings);
79
80 // Updates device |settings|.
81 static void UpdateDeviceSettings(
82 const std::string& path,
83 const base::Value& value,
84 enterprise_management::ChromeDeviceSettingsProto& settings);
85
86 bool has_pending_changes() const { return has_pending_changes_; }
69 87
70 private: 88 private:
71 friend class OwnerSettingsServiceChromeOSFactory; 89 friend class OwnerSettingsServiceChromeOSFactory;
72 90
73 OwnerSettingsServiceChromeOS( 91 OwnerSettingsServiceChromeOS(
92 DeviceSettingsService* device_settings_service,
74 Profile* profile, 93 Profile* profile,
75 const scoped_refptr<ownership::OwnerKeyUtil>& owner_key_util); 94 const scoped_refptr<ownership::OwnerKeyUtil>& owner_key_util);
76 95
77 // OwnerSettingsService protected interface overrides: 96 // OwnerSettingsService protected interface overrides:
78 97
79 // Reloads private key from profile's NSS slots, responds via |callback|. 98 // Reloads private key from profile's NSS slots, responds via |callback|.
80 virtual void ReloadKeypairImpl(const base::Callback< 99 virtual void ReloadKeypairImpl(const base::Callback<
81 void(const scoped_refptr<ownership::PublicKey>& public_key, 100 void(const scoped_refptr<ownership::PublicKey>& public_key,
82 const scoped_refptr<ownership::PrivateKey>& private_key)>& callback) 101 const scoped_refptr<ownership::PrivateKey>& private_key)>& callback)
83 override; 102 override;
84 103
85 // Possibly notifies DeviceSettingsService that owner's keypair is loaded. 104 // Possibly notifies DeviceSettingsService that owner's keypair is loaded.
86 virtual void OnPostKeypairLoadedActions() override; 105 virtual void OnPostKeypairLoadedActions() override;
87 106
88 // Performs next operation in the queue. 107 // Tries to sign store current device settings if there're pending
89 void StartNextOperation(); 108 // changes in device settings and no active previous call to
109 // DeviceSettingsService::Store().
110 void StoreDeviceSettings();
90 111
91 // Called when sign-and-store operation completes it's work. 112 // Called when current device settings are successfully signed.
92 void HandleCompletedOperation(const base::Closure& callback, 113 // Sends signed settings for storage.
93 SessionManagerOperation* operation, 114 void OnPolicyAssembledAndSigned(
94 DeviceSettingsService::Status status); 115 scoped_ptr<enterprise_management::PolicyFetchResponse> policy_response);
116
117 // Called by DeviceSettingsService when modified and signed device
118 // settings are stored. Notifies observers and tries to store device
119 // settings again.
120 void OnSignedPolicyStored(bool success);
121
122 // Fetches device settings from DeviceSettingsService and merges
123 // them with local device settings.
124 bool UpdateFromService();
125
126 DeviceSettingsService* device_settings_service_;
95 127
96 // Profile this service instance belongs to. 128 // Profile this service instance belongs to.
97 Profile* profile_; 129 Profile* profile_;
98 130
99 // User ID this service instance belongs to. 131 // User ID this service instance belongs to.
100 std::string user_id_; 132 std::string user_id_;
101 133
102 // Whether profile still needs to be initialized. 134 // Whether profile still needs to be initialized.
103 bool waiting_for_profile_creation_; 135 bool waiting_for_profile_creation_;
104 136
105 // Whether TPM token still needs to be initialized. 137 // Whether TPM token still needs to be initialized.
106 bool waiting_for_tpm_token_; 138 bool waiting_for_tpm_token_;
107 139
108 // The queue of pending sign-and-store operations. The first operation on the 140 // The device settings. This may be different from the actual
109 // queue is currently active; it gets removed and destroyed once it completes. 141 // current device settings (which can be obtained from
110 std::deque<SessionManagerOperation*> pending_operations_; 142 // DeviceSettingsService) in case the device does not have an owner
143 // yet or there are pending changes that have not yet been written
144 // to session_manager.
145 enterprise_management::ChromeDeviceSettingsProto device_settings_;
146
147 // True if some settings were changed but not stored.
148 bool has_pending_changes_;
111 149
112 content::NotificationRegistrar registrar_; 150 content::NotificationRegistrar registrar_;
113 151
114 base::WeakPtrFactory<OwnerSettingsServiceChromeOS> weak_factory_; 152 base::WeakPtrFactory<OwnerSettingsServiceChromeOS> weak_factory_;
115 153
154 base::WeakPtrFactory<OwnerSettingsServiceChromeOS> store_settings_factory_;
155
116 DISALLOW_COPY_AND_ASSIGN(OwnerSettingsServiceChromeOS); 156 DISALLOW_COPY_AND_ASSIGN(OwnerSettingsServiceChromeOS);
117 }; 157 };
118 158
119 } // namespace chromeos 159 } // namespace chromeos
120 160
121 #endif // CHROME_BROWSER_CHROMEOS_OWNERSHIP_OWNER_SETTINGS_SERVICE_CHROMEOS_H_ 161 #endif // CHROME_BROWSER_CHROMEOS_OWNERSHIP_OWNER_SETTINGS_SERVICE_CHROMEOS_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698