OLD | NEW |
---|---|
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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 #include "chrome/browser/managed_mode/managed_user_sync_service.h" | 5 #include "chrome/browser/supervised_user/supervised_user_sync_service.h" |
6 | 6 |
7 #include "base/bind.h" | 7 #include "base/bind.h" |
8 #include "base/callback.h" | 8 #include "base/callback.h" |
9 #include "base/prefs/scoped_user_pref_update.h" | 9 #include "base/prefs/scoped_user_pref_update.h" |
10 #include "base/strings/string_number_conversions.h" | 10 #include "base/strings/string_number_conversions.h" |
11 #include "base/strings/stringprintf.h" | 11 #include "base/strings/stringprintf.h" |
12 #include "base/values.h" | 12 #include "base/values.h" |
13 #include "chrome/browser/profiles/profile_avatar_icon_util.h" | 13 #include "chrome/browser/profiles/profile_avatar_icon_util.h" |
14 #include "chrome/common/pref_names.h" | 14 #include "chrome/common/pref_names.h" |
15 #include "components/pref_registry/pref_registry_syncable.h" | 15 #include "components/pref_registry/pref_registry_syncable.h" |
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
75 } | 75 } |
76 return SyncData::CreateLocalData(id, name, specifics); | 76 return SyncData::CreateLocalData(id, name, specifics); |
77 } | 77 } |
78 | 78 |
79 SyncData CreateSyncDataFromDictionaryEntry(const std::string& id, | 79 SyncData CreateSyncDataFromDictionaryEntry(const std::string& id, |
80 const base::Value& value) { | 80 const base::Value& value) { |
81 const base::DictionaryValue* dict = NULL; | 81 const base::DictionaryValue* dict = NULL; |
82 bool success = value.GetAsDictionary(&dict); | 82 bool success = value.GetAsDictionary(&dict); |
83 DCHECK(success); | 83 DCHECK(success); |
84 bool acknowledged = false; | 84 bool acknowledged = false; |
85 dict->GetBoolean(ManagedUserSyncService::kAcknowledged, &acknowledged); | 85 dict->GetBoolean(SupervisedUserSyncService::kAcknowledged, &acknowledged); |
86 std::string name; | 86 std::string name; |
87 dict->GetString(ManagedUserSyncService::kName, &name); | 87 dict->GetString(SupervisedUserSyncService::kName, &name); |
88 DCHECK(!name.empty()); | 88 DCHECK(!name.empty()); |
89 std::string master_key; | 89 std::string master_key; |
90 dict->GetString(ManagedUserSyncService::kMasterKey, &master_key); | 90 dict->GetString(SupervisedUserSyncService::kMasterKey, &master_key); |
91 std::string chrome_avatar; | 91 std::string chrome_avatar; |
92 dict->GetString(ManagedUserSyncService::kChromeAvatar, &chrome_avatar); | 92 dict->GetString(SupervisedUserSyncService::kChromeAvatar, &chrome_avatar); |
93 std::string chromeos_avatar; | 93 std::string chromeos_avatar; |
94 dict->GetString(ManagedUserSyncService::kChromeOsAvatar, &chromeos_avatar); | 94 dict->GetString(SupervisedUserSyncService::kChromeOsAvatar, &chromeos_avatar); |
95 std::string signature; | 95 std::string signature; |
96 dict->GetString(ManagedUserSyncService::kPasswordSignatureKey, &signature); | 96 dict->GetString(SupervisedUserSyncService::kPasswordSignatureKey, &signature); |
97 std::string encryption; | 97 std::string encryption; |
98 dict->GetString(ManagedUserSyncService::kPasswordEncryptionKey, &encryption); | 98 dict->GetString(SupervisedUserSyncService::kPasswordEncryptionKey, |
99 &encryption); | |
99 | 100 |
100 return CreateLocalSyncData(id, | 101 return CreateLocalSyncData(id, |
101 name, | 102 name, |
102 acknowledged, | 103 acknowledged, |
103 master_key, | 104 master_key, |
104 chrome_avatar, | 105 chrome_avatar, |
105 chromeos_avatar, | 106 chromeos_avatar, |
106 signature, | 107 signature, |
107 encryption); | 108 encryption); |
108 } | 109 } |
109 | 110 |
110 } // namespace | 111 } // namespace |
111 | 112 |
112 const char ManagedUserSyncService::kAcknowledged[] = "acknowledged"; | 113 const char SupervisedUserSyncService::kAcknowledged[] = "acknowledged"; |
113 const char ManagedUserSyncService::kChromeAvatar[] = "chromeAvatar"; | 114 const char SupervisedUserSyncService::kChromeAvatar[] = "chromeAvatar"; |
114 const char ManagedUserSyncService::kChromeOsAvatar[] = "chromeOsAvatar"; | 115 const char SupervisedUserSyncService::kChromeOsAvatar[] = "chromeOsAvatar"; |
115 const char ManagedUserSyncService::kMasterKey[] = "masterKey"; | 116 const char SupervisedUserSyncService::kMasterKey[] = "masterKey"; |
116 const char ManagedUserSyncService::kName[] = "name"; | 117 const char SupervisedUserSyncService::kName[] = "name"; |
117 const char ManagedUserSyncService::kPasswordSignatureKey[] = | 118 const char SupervisedUserSyncService::kPasswordSignatureKey[] = |
118 "passwordSignatureKey"; | 119 "passwordSignatureKey"; |
119 const char ManagedUserSyncService::kPasswordEncryptionKey[] = | 120 const char SupervisedUserSyncService::kPasswordEncryptionKey[] = |
120 "passwordEncryptionKey"; | 121 "passwordEncryptionKey"; |
121 const int ManagedUserSyncService::kNoAvatar = -100; | 122 const int SupervisedUserSyncService::kNoAvatar = -100; |
122 | 123 |
123 ManagedUserSyncService::ManagedUserSyncService(PrefService* prefs) | 124 SupervisedUserSyncService::SupervisedUserSyncService(PrefService* prefs) |
124 : prefs_(prefs) { | 125 : prefs_(prefs) { |
125 pref_change_registrar_.Init(prefs_); | 126 pref_change_registrar_.Init(prefs_); |
126 pref_change_registrar_.Add( | 127 pref_change_registrar_.Add( |
127 prefs::kGoogleServicesLastUsername, | 128 prefs::kGoogleServicesLastUsername, |
128 base::Bind(&ManagedUserSyncService::OnLastSignedInUsernameChange, | 129 base::Bind(&SupervisedUserSyncService::OnLastSignedInUsernameChange, |
129 base::Unretained(this))); | 130 base::Unretained(this))); |
130 } | 131 } |
131 | 132 |
132 ManagedUserSyncService::~ManagedUserSyncService() { | 133 SupervisedUserSyncService::~SupervisedUserSyncService() { |
133 } | 134 } |
134 | 135 |
135 // static | 136 // static |
136 void ManagedUserSyncService::RegisterProfilePrefs( | 137 void SupervisedUserSyncService::RegisterProfilePrefs( |
137 PrefRegistrySyncable* registry) { | 138 PrefRegistrySyncable* registry) { |
138 registry->RegisterDictionaryPref(prefs::kSupervisedUsers, | 139 registry->RegisterDictionaryPref(prefs::kSupervisedUsers, |
139 PrefRegistrySyncable::UNSYNCABLE_PREF); | 140 PrefRegistrySyncable::UNSYNCABLE_PREF); |
140 } | 141 } |
141 | 142 |
142 // static | 143 // static |
143 bool ManagedUserSyncService::GetAvatarIndex(const std::string& avatar_str, | 144 bool SupervisedUserSyncService::GetAvatarIndex(const std::string& avatar_str, |
144 int* avatar_index) { | 145 int* avatar_index) { |
145 DCHECK(avatar_index); | 146 DCHECK(avatar_index); |
146 if (avatar_str.empty()) { | 147 if (avatar_str.empty()) { |
147 *avatar_index = kNoAvatar; | 148 *avatar_index = kNoAvatar; |
148 return true; | 149 return true; |
149 } | 150 } |
150 #if defined(OS_CHROMEOS) | 151 #if defined(OS_CHROMEOS) |
151 const char* prefix = kChromeOSAvatarPrefix; | 152 const char* prefix = kChromeOSAvatarPrefix; |
152 #else | 153 #else |
153 const char* prefix = kChromeAvatarPrefix; | 154 const char* prefix = kChromeAvatarPrefix; |
154 #endif | 155 #endif |
(...skipping 21 matching lines...) Expand all Loading... | |
176 if (*avatar_index == kChromeOSDummyAvatarIndex) | 177 if (*avatar_index == kChromeOSDummyAvatarIndex) |
177 *avatar_index = kNoAvatar; | 178 *avatar_index = kNoAvatar; |
178 return (*avatar_index == kNoAvatar || | 179 return (*avatar_index == kNoAvatar || |
179 (*avatar_index >= 0 && | 180 (*avatar_index >= 0 && |
180 static_cast<size_t>(*avatar_index) < | 181 static_cast<size_t>(*avatar_index) < |
181 profiles::GetDefaultAvatarIconCount())); | 182 profiles::GetDefaultAvatarIconCount())); |
182 #endif | 183 #endif |
183 } | 184 } |
184 | 185 |
185 // static | 186 // static |
186 std::string ManagedUserSyncService::BuildAvatarString(int avatar_index) { | 187 std::string SupervisedUserSyncService::BuildAvatarString(int avatar_index) { |
187 #if defined(OS_CHROMEOS) | 188 #if defined(OS_CHROMEOS) |
188 const char* prefix = kChromeOSAvatarPrefix; | 189 const char* prefix = kChromeOSAvatarPrefix; |
189 #else | 190 #else |
190 const char* prefix = kChromeAvatarPrefix; | 191 const char* prefix = kChromeAvatarPrefix; |
191 #endif | 192 #endif |
192 return base::StringPrintf("%s%d", prefix, avatar_index); | 193 return base::StringPrintf("%s%d", prefix, avatar_index); |
193 } | 194 } |
194 | 195 |
195 void ManagedUserSyncService::AddObserver( | 196 void SupervisedUserSyncService::AddObserver( |
196 ManagedUserSyncServiceObserver* observer) { | 197 SupervisedUserSyncServiceObserver* observer) { |
197 observers_.AddObserver(observer); | 198 observers_.AddObserver(observer); |
198 } | 199 } |
199 | 200 |
200 void ManagedUserSyncService::RemoveObserver( | 201 void SupervisedUserSyncService::RemoveObserver( |
201 ManagedUserSyncServiceObserver* observer) { | 202 SupervisedUserSyncServiceObserver* observer) { |
202 observers_.RemoveObserver(observer); | 203 observers_.RemoveObserver(observer); |
203 } | 204 } |
204 | 205 |
205 scoped_ptr<base::DictionaryValue> ManagedUserSyncService::CreateDictionary( | 206 scoped_ptr<base::DictionaryValue> SupervisedUserSyncService::CreateDictionary( |
206 const std::string& name, | 207 const std::string& name, |
207 const std::string& master_key, | 208 const std::string& master_key, |
208 const std::string& signature_key, | 209 const std::string& signature_key, |
209 const std::string& encryption_key, | 210 const std::string& encryption_key, |
210 int avatar_index) { | 211 int avatar_index) { |
211 scoped_ptr<base::DictionaryValue> result(new base::DictionaryValue()); | 212 scoped_ptr<base::DictionaryValue> result(new base::DictionaryValue()); |
212 result->SetString(kName, name); | 213 result->SetString(kName, name); |
213 result->SetString(kMasterKey, master_key); | 214 result->SetString(kMasterKey, master_key); |
214 result->SetString(kPasswordSignatureKey, signature_key); | 215 result->SetString(kPasswordSignatureKey, signature_key); |
215 result->SetString(kPasswordEncryptionKey, encryption_key); | 216 result->SetString(kPasswordEncryptionKey, encryption_key); |
216 // TODO(akuegel): Get rid of the avatar stuff here when Chrome OS switches | 217 // TODO(akuegel): Get rid of the avatar stuff here when Chrome OS switches |
217 // to the avatar index that is stored as a shared setting. | 218 // to the avatar index that is stored as a shared setting. |
218 std::string chrome_avatar; | 219 std::string chrome_avatar; |
219 std::string chromeos_avatar; | 220 std::string chromeos_avatar; |
220 #if defined(OS_CHROMEOS) | 221 #if defined(OS_CHROMEOS) |
221 chromeos_avatar = BuildAvatarString(avatar_index); | 222 chromeos_avatar = BuildAvatarString(avatar_index); |
222 #else | 223 #else |
223 chrome_avatar = BuildAvatarString(avatar_index); | 224 chrome_avatar = BuildAvatarString(avatar_index); |
224 #endif | 225 #endif |
225 result->SetString(kChromeAvatar, chrome_avatar); | 226 result->SetString(kChromeAvatar, chrome_avatar); |
226 result->SetString(kChromeOsAvatar, chromeos_avatar); | 227 result->SetString(kChromeOsAvatar, chromeos_avatar); |
227 return result.Pass(); | 228 return result.Pass(); |
228 } | 229 } |
229 | 230 |
230 void ManagedUserSyncService::AddManagedUser(const std::string& id, | 231 void SupervisedUserSyncService::AddSupervisedUser( |
231 const std::string& name, | |
232 const std::string& master_key, | |
233 const std::string& signature_key, | |
234 const std::string& encryption_key, | |
235 int avatar_index) { | |
236 UpdateManagedUserImpl(id, | |
237 name, | |
238 master_key, | |
239 signature_key, | |
240 encryption_key, | |
241 avatar_index, | |
242 true /* add */); | |
243 } | |
244 | |
245 void ManagedUserSyncService::UpdateManagedUser( | |
246 const std::string& id, | 232 const std::string& id, |
247 const std::string& name, | 233 const std::string& name, |
248 const std::string& master_key, | 234 const std::string& master_key, |
249 const std::string& signature_key, | 235 const std::string& signature_key, |
Pam (message me for reviews)
2014/06/16 23:51:51
FWIW, the header has these as password_signature_k
| |
250 const std::string& encryption_key, | 236 const std::string& encryption_key, |
251 int avatar_index) { | 237 int avatar_index) { |
252 UpdateManagedUserImpl(id, | 238 UpdateSupervisedUserImpl(id, |
253 name, | 239 name, |
254 master_key, | 240 master_key, |
255 signature_key, | 241 signature_key, |
256 encryption_key, | 242 encryption_key, |
257 avatar_index, | 243 avatar_index, |
258 false /* update */); | 244 true /* add */); |
259 } | 245 } |
260 | 246 |
261 void ManagedUserSyncService::UpdateManagedUserImpl( | 247 void SupervisedUserSyncService::UpdateSupervisedUser( |
262 const std::string& id, | 248 const std::string& id, |
263 const std::string& name, | 249 const std::string& name, |
264 const std::string& master_key, | 250 const std::string& master_key, |
251 const std::string& signature_key, | |
252 const std::string& encryption_key, | |
253 int avatar_index) { | |
254 UpdateSupervisedUserImpl(id, | |
255 name, | |
256 master_key, | |
257 signature_key, | |
258 encryption_key, | |
259 avatar_index, | |
260 false /* update */); | |
261 } | |
262 | |
263 void SupervisedUserSyncService::UpdateSupervisedUserImpl( | |
264 const std::string& id, | |
265 const std::string& name, | |
266 const std::string& master_key, | |
265 const std::string& signature_key, | 267 const std::string& signature_key, |
266 const std::string& encryption_key, | 268 const std::string& encryption_key, |
267 int avatar_index, | 269 int avatar_index, |
268 bool add_user) { | 270 bool add_user) { |
269 DictionaryPrefUpdate update(prefs_, prefs::kSupervisedUsers); | 271 DictionaryPrefUpdate update(prefs_, prefs::kSupervisedUsers); |
270 base::DictionaryValue* dict = update.Get(); | 272 base::DictionaryValue* dict = update.Get(); |
271 scoped_ptr<base::DictionaryValue> value = CreateDictionary( | 273 scoped_ptr<base::DictionaryValue> value = CreateDictionary( |
272 name, master_key, signature_key, encryption_key, avatar_index); | 274 name, master_key, signature_key, encryption_key, avatar_index); |
273 | 275 |
274 DCHECK_EQ(add_user, !dict->HasKey(id)); | 276 DCHECK_EQ(add_user, !dict->HasKey(id)); |
275 base::DictionaryValue* entry = value.get(); | 277 base::DictionaryValue* entry = value.get(); |
276 dict->SetWithoutPathExpansion(id, value.release()); | 278 dict->SetWithoutPathExpansion(id, value.release()); |
277 | 279 |
278 if (!sync_processor_) | 280 if (!sync_processor_) |
279 return; | 281 return; |
280 | 282 |
281 // If we're already syncing, create a new change and upload it. | 283 // If we're already syncing, create a new change and upload it. |
282 SyncChangeList change_list; | 284 SyncChangeList change_list; |
283 change_list.push_back( | 285 change_list.push_back( |
284 SyncChange(FROM_HERE, | 286 SyncChange(FROM_HERE, |
285 add_user ? SyncChange::ACTION_ADD : SyncChange::ACTION_UPDATE, | 287 add_user ? SyncChange::ACTION_ADD : SyncChange::ACTION_UPDATE, |
286 CreateSyncDataFromDictionaryEntry(id, *entry))); | 288 CreateSyncDataFromDictionaryEntry(id, *entry))); |
287 SyncError error = | 289 SyncError error = |
288 sync_processor_->ProcessSyncChanges(FROM_HERE, change_list); | 290 sync_processor_->ProcessSyncChanges(FROM_HERE, change_list); |
289 DCHECK(!error.IsSet()) << error.ToString(); | 291 DCHECK(!error.IsSet()) << error.ToString(); |
290 } | 292 } |
291 | 293 |
292 void ManagedUserSyncService::DeleteManagedUser(const std::string& id) { | 294 void SupervisedUserSyncService::DeleteSupervisedUser(const std::string& id) { |
293 DictionaryPrefUpdate update(prefs_, prefs::kSupervisedUsers); | 295 DictionaryPrefUpdate update(prefs_, prefs::kSupervisedUsers); |
294 bool success = update->RemoveWithoutPathExpansion(id, NULL); | 296 bool success = update->RemoveWithoutPathExpansion(id, NULL); |
295 DCHECK(success); | 297 DCHECK(success); |
296 | 298 |
297 if (!sync_processor_) | 299 if (!sync_processor_) |
298 return; | 300 return; |
299 | 301 |
300 SyncChangeList change_list; | 302 SyncChangeList change_list; |
301 change_list.push_back(SyncChange( | 303 change_list.push_back(SyncChange( |
302 FROM_HERE, | 304 FROM_HERE, |
303 SyncChange::ACTION_DELETE, | 305 SyncChange::ACTION_DELETE, |
304 SyncData::CreateLocalDelete(id, SUPERVISED_USERS))); | 306 SyncData::CreateLocalDelete(id, SUPERVISED_USERS))); |
305 SyncError sync_error = | 307 SyncError sync_error = |
306 sync_processor_->ProcessSyncChanges(FROM_HERE, change_list); | 308 sync_processor_->ProcessSyncChanges(FROM_HERE, change_list); |
307 DCHECK(!sync_error.IsSet()); | 309 DCHECK(!sync_error.IsSet()); |
308 } | 310 } |
309 | 311 |
310 const base::DictionaryValue* ManagedUserSyncService::GetManagedUsers() { | 312 const base::DictionaryValue* SupervisedUserSyncService::GetSupervisedUsers() { |
311 DCHECK(sync_processor_); | 313 DCHECK(sync_processor_); |
312 return prefs_->GetDictionary(prefs::kSupervisedUsers); | 314 return prefs_->GetDictionary(prefs::kSupervisedUsers); |
313 } | 315 } |
314 | 316 |
315 bool ManagedUserSyncService::UpdateManagedUserAvatarIfNeeded( | 317 bool SupervisedUserSyncService::UpdateSupervisedUserAvatarIfNeeded( |
316 const std::string& id, | 318 const std::string& id, |
317 int avatar_index) { | 319 int avatar_index) { |
318 DictionaryPrefUpdate update(prefs_, prefs::kSupervisedUsers); | 320 DictionaryPrefUpdate update(prefs_, prefs::kSupervisedUsers); |
319 base::DictionaryValue* dict = update.Get(); | 321 base::DictionaryValue* dict = update.Get(); |
320 DCHECK(dict->HasKey(id)); | 322 DCHECK(dict->HasKey(id)); |
321 base::DictionaryValue* value = NULL; | 323 base::DictionaryValue* value = NULL; |
322 bool success = dict->GetDictionaryWithoutPathExpansion(id, &value); | 324 bool success = dict->GetDictionaryWithoutPathExpansion(id, &value); |
323 DCHECK(success); | 325 DCHECK(success); |
324 | 326 |
325 bool acknowledged = false; | 327 bool acknowledged = false; |
326 value->GetBoolean(ManagedUserSyncService::kAcknowledged, &acknowledged); | 328 value->GetBoolean(SupervisedUserSyncService::kAcknowledged, &acknowledged); |
327 std::string name; | 329 std::string name; |
328 value->GetString(ManagedUserSyncService::kName, &name); | 330 value->GetString(SupervisedUserSyncService::kName, &name); |
329 std::string master_key; | 331 std::string master_key; |
330 value->GetString(ManagedUserSyncService::kMasterKey, &master_key); | 332 value->GetString(SupervisedUserSyncService::kMasterKey, &master_key); |
331 std::string signature; | 333 std::string signature; |
332 value->GetString(ManagedUserSyncService::kPasswordSignatureKey, &signature); | 334 value->GetString(SupervisedUserSyncService::kPasswordSignatureKey, |
335 &signature); | |
333 std::string encryption; | 336 std::string encryption; |
334 value->GetString(ManagedUserSyncService::kPasswordEncryptionKey, &encryption); | 337 value->GetString(SupervisedUserSyncService::kPasswordEncryptionKey, |
338 &encryption); | |
335 std::string chromeos_avatar; | 339 std::string chromeos_avatar; |
336 value->GetString(ManagedUserSyncService::kChromeOsAvatar, &chromeos_avatar); | 340 value->GetString(SupervisedUserSyncService::kChromeOsAvatar, |
341 &chromeos_avatar); | |
337 std::string chrome_avatar; | 342 std::string chrome_avatar; |
338 value->GetString(ManagedUserSyncService::kChromeAvatar, &chrome_avatar); | 343 value->GetString(SupervisedUserSyncService::kChromeAvatar, &chrome_avatar); |
339 // The following check is just for safety. We want to avoid that the existing | 344 // The following check is just for safety. We want to avoid that the existing |
340 // avatar selection is overwritten. Currently we don't allow the user to | 345 // avatar selection is overwritten. Currently we don't allow the user to |
341 // choose a different avatar in the recreation dialog, anyway, if there is | 346 // choose a different avatar in the recreation dialog, anyway, if there is |
342 // already an avatar selected. | 347 // already an avatar selected. |
343 #if defined(OS_CHROMEOS) | 348 #if defined(OS_CHROMEOS) |
344 if (!chromeos_avatar.empty() && avatar_index != kNoAvatar) | 349 if (!chromeos_avatar.empty() && avatar_index != kNoAvatar) |
345 return false; | 350 return false; |
346 #else | 351 #else |
347 if (!chrome_avatar.empty() && avatar_index != kNoAvatar) | 352 if (!chrome_avatar.empty() && avatar_index != kNoAvatar) |
348 return false; | 353 return false; |
(...skipping 16 matching lines...) Expand all Loading... | |
365 SyncChange::ACTION_UPDATE, | 370 SyncChange::ACTION_UPDATE, |
366 CreateLocalSyncData(id, name, acknowledged, master_key, | 371 CreateLocalSyncData(id, name, acknowledged, master_key, |
367 chrome_avatar, chromeos_avatar, | 372 chrome_avatar, chromeos_avatar, |
368 signature, encryption))); | 373 signature, encryption))); |
369 SyncError error = | 374 SyncError error = |
370 sync_processor_->ProcessSyncChanges(FROM_HERE, change_list); | 375 sync_processor_->ProcessSyncChanges(FROM_HERE, change_list); |
371 DCHECK(!error.IsSet()) << error.ToString(); | 376 DCHECK(!error.IsSet()) << error.ToString(); |
372 return true; | 377 return true; |
373 } | 378 } |
374 | 379 |
375 void ManagedUserSyncService::ClearManagedUserAvatar(const std::string& id) { | 380 void SupervisedUserSyncService::ClearSupervisedUserAvatar( |
376 bool cleared = UpdateManagedUserAvatarIfNeeded(id, kNoAvatar); | 381 const std::string& id) { |
382 bool cleared = UpdateSupervisedUserAvatarIfNeeded(id, kNoAvatar); | |
377 DCHECK(cleared); | 383 DCHECK(cleared); |
378 } | 384 } |
379 | 385 |
380 void ManagedUserSyncService::GetManagedUsersAsync( | 386 void SupervisedUserSyncService::GetSupervisedUsersAsync( |
381 const ManagedUsersCallback& callback) { | 387 const SupervisedUsersCallback& callback) { |
382 // If we are already syncing, just run the callback. | 388 // If we are already syncing, just run the callback. |
383 if (sync_processor_) { | 389 if (sync_processor_) { |
384 callback.Run(GetManagedUsers()); | 390 callback.Run(GetSupervisedUsers()); |
385 return; | 391 return; |
386 } | 392 } |
387 | 393 |
388 // Otherwise queue it up until we start syncing. | 394 // Otherwise queue it up until we start syncing. |
389 callbacks_.push_back(callback); | 395 callbacks_.push_back(callback); |
390 } | 396 } |
391 | 397 |
392 void ManagedUserSyncService::Shutdown() { | 398 void SupervisedUserSyncService::Shutdown() { |
393 NotifyManagedUsersSyncingStopped(); | 399 NotifySupervisedUsersSyncingStopped(); |
394 } | 400 } |
395 | 401 |
396 SyncMergeResult ManagedUserSyncService::MergeDataAndStartSyncing( | 402 SyncMergeResult SupervisedUserSyncService::MergeDataAndStartSyncing( |
397 ModelType type, | 403 ModelType type, |
398 const SyncDataList& initial_sync_data, | 404 const SyncDataList& initial_sync_data, |
399 scoped_ptr<SyncChangeProcessor> sync_processor, | 405 scoped_ptr<SyncChangeProcessor> sync_processor, |
400 scoped_ptr<SyncErrorFactory> error_handler) { | 406 scoped_ptr<SyncErrorFactory> error_handler) { |
401 DCHECK_EQ(SUPERVISED_USERS, type); | 407 DCHECK_EQ(SUPERVISED_USERS, type); |
402 sync_processor_ = sync_processor.Pass(); | 408 sync_processor_ = sync_processor.Pass(); |
403 error_handler_ = error_handler.Pass(); | 409 error_handler_ = error_handler.Pass(); |
404 | 410 |
405 SyncChangeList change_list; | 411 SyncChangeList change_list; |
406 SyncMergeResult result(SUPERVISED_USERS); | 412 SyncMergeResult result(SUPERVISED_USERS); |
407 | 413 |
408 DictionaryPrefUpdate update(prefs_, prefs::kSupervisedUsers); | 414 DictionaryPrefUpdate update(prefs_, prefs::kSupervisedUsers); |
409 base::DictionaryValue* dict = update.Get(); | 415 base::DictionaryValue* dict = update.Get(); |
410 result.set_num_items_before_association(dict->size()); | 416 result.set_num_items_before_association(dict->size()); |
411 std::set<std::string> seen_ids; | 417 std::set<std::string> seen_ids; |
412 int num_items_added = 0; | 418 int num_items_added = 0; |
413 int num_items_modified = 0; | 419 int num_items_modified = 0; |
414 for (SyncDataList::const_iterator it = initial_sync_data.begin(); | 420 for (SyncDataList::const_iterator it = initial_sync_data.begin(); |
415 it != initial_sync_data.end(); ++it) { | 421 it != initial_sync_data.end(); ++it) { |
416 DCHECK_EQ(SUPERVISED_USERS, it->GetDataType()); | 422 DCHECK_EQ(SUPERVISED_USERS, it->GetDataType()); |
417 const ManagedUserSpecifics& managed_user = | 423 const ManagedUserSpecifics& supervised_user = |
418 it->GetSpecifics().managed_user(); | 424 it->GetSpecifics().managed_user(); |
419 base::DictionaryValue* value = new base::DictionaryValue(); | 425 base::DictionaryValue* value = new base::DictionaryValue(); |
420 value->SetString(kName, managed_user.name()); | 426 value->SetString(kName, supervised_user.name()); |
421 value->SetBoolean(kAcknowledged, managed_user.acknowledged()); | 427 value->SetBoolean(kAcknowledged, supervised_user.acknowledged()); |
422 value->SetString(kMasterKey, managed_user.master_key()); | 428 value->SetString(kMasterKey, supervised_user.master_key()); |
423 value->SetString(kChromeAvatar, managed_user.chrome_avatar()); | 429 value->SetString(kChromeAvatar, supervised_user.chrome_avatar()); |
424 value->SetString(kChromeOsAvatar, managed_user.chromeos_avatar()); | 430 value->SetString(kChromeOsAvatar, supervised_user.chromeos_avatar()); |
425 value->SetString(kPasswordSignatureKey, | 431 value->SetString(kPasswordSignatureKey, |
426 managed_user.password_signature_key()); | 432 supervised_user.password_signature_key()); |
427 value->SetString(kPasswordEncryptionKey, | 433 value->SetString(kPasswordEncryptionKey, |
428 managed_user.password_encryption_key()); | 434 supervised_user.password_encryption_key()); |
429 if (dict->HasKey(managed_user.id())) | 435 if (dict->HasKey(supervised_user.id())) |
430 num_items_modified++; | 436 num_items_modified++; |
431 else | 437 else |
432 num_items_added++; | 438 num_items_added++; |
433 dict->SetWithoutPathExpansion(managed_user.id(), value); | 439 dict->SetWithoutPathExpansion(supervised_user.id(), value); |
434 seen_ids.insert(managed_user.id()); | 440 seen_ids.insert(supervised_user.id()); |
435 } | 441 } |
436 | 442 |
437 for (base::DictionaryValue::Iterator it(*dict); !it.IsAtEnd(); it.Advance()) { | 443 for (base::DictionaryValue::Iterator it(*dict); !it.IsAtEnd(); it.Advance()) { |
438 if (seen_ids.find(it.key()) != seen_ids.end()) | 444 if (seen_ids.find(it.key()) != seen_ids.end()) |
439 continue; | 445 continue; |
440 | 446 |
441 change_list.push_back( | 447 change_list.push_back( |
442 SyncChange(FROM_HERE, | 448 SyncChange(FROM_HERE, |
443 SyncChange::ACTION_ADD, | 449 SyncChange::ACTION_ADD, |
444 CreateSyncDataFromDictionaryEntry(it.key(), it.value()))); | 450 CreateSyncDataFromDictionaryEntry(it.key(), it.value()))); |
445 } | 451 } |
446 result.set_error(sync_processor_->ProcessSyncChanges(FROM_HERE, change_list)); | 452 result.set_error(sync_processor_->ProcessSyncChanges(FROM_HERE, change_list)); |
447 | 453 |
448 result.set_num_items_modified(num_items_modified); | 454 result.set_num_items_modified(num_items_modified); |
449 result.set_num_items_added(num_items_added); | 455 result.set_num_items_added(num_items_added); |
450 result.set_num_items_after_association(dict->size()); | 456 result.set_num_items_after_association(dict->size()); |
451 | 457 |
452 DispatchCallbacks(); | 458 DispatchCallbacks(); |
453 | 459 |
454 return result; | 460 return result; |
455 } | 461 } |
456 | 462 |
457 void ManagedUserSyncService::StopSyncing(ModelType type) { | 463 void SupervisedUserSyncService::StopSyncing(ModelType type) { |
458 DCHECK_EQ(SUPERVISED_USERS, type); | 464 DCHECK_EQ(SUPERVISED_USERS, type); |
459 // The observers may want to change the Sync data, so notify them before | 465 // The observers may want to change the Sync data, so notify them before |
460 // resetting the |sync_processor_|. | 466 // resetting the |sync_processor_|. |
461 NotifyManagedUsersSyncingStopped(); | 467 NotifySupervisedUsersSyncingStopped(); |
462 sync_processor_.reset(); | 468 sync_processor_.reset(); |
463 error_handler_.reset(); | 469 error_handler_.reset(); |
464 } | 470 } |
465 | 471 |
466 SyncDataList ManagedUserSyncService::GetAllSyncData( | 472 SyncDataList SupervisedUserSyncService::GetAllSyncData( |
467 ModelType type) const { | 473 ModelType type) const { |
468 SyncDataList data; | 474 SyncDataList data; |
469 DictionaryPrefUpdate update(prefs_, prefs::kSupervisedUsers); | 475 DictionaryPrefUpdate update(prefs_, prefs::kSupervisedUsers); |
470 base::DictionaryValue* dict = update.Get(); | 476 base::DictionaryValue* dict = update.Get(); |
471 for (base::DictionaryValue::Iterator it(*dict); !it.IsAtEnd(); it.Advance()) | 477 for (base::DictionaryValue::Iterator it(*dict); !it.IsAtEnd(); it.Advance()) |
472 data.push_back(CreateSyncDataFromDictionaryEntry(it.key(), it.value())); | 478 data.push_back(CreateSyncDataFromDictionaryEntry(it.key(), it.value())); |
473 | 479 |
474 return data; | 480 return data; |
475 } | 481 } |
476 | 482 |
477 SyncError ManagedUserSyncService::ProcessSyncChanges( | 483 SyncError SupervisedUserSyncService::ProcessSyncChanges( |
478 const tracked_objects::Location& from_here, | 484 const tracked_objects::Location& from_here, |
479 const SyncChangeList& change_list) { | 485 const SyncChangeList& change_list) { |
480 SyncError error; | 486 SyncError error; |
481 DictionaryPrefUpdate update(prefs_, prefs::kSupervisedUsers); | 487 DictionaryPrefUpdate update(prefs_, prefs::kSupervisedUsers); |
482 base::DictionaryValue* dict = update.Get(); | 488 base::DictionaryValue* dict = update.Get(); |
483 for (SyncChangeList::const_iterator it = change_list.begin(); | 489 for (SyncChangeList::const_iterator it = change_list.begin(); |
484 it != change_list.end(); ++it) { | 490 it != change_list.end(); ++it) { |
485 SyncData data = it->sync_data(); | 491 SyncData data = it->sync_data(); |
486 DCHECK_EQ(SUPERVISED_USERS, data.GetDataType()); | 492 DCHECK_EQ(SUPERVISED_USERS, data.GetDataType()); |
487 const ManagedUserSpecifics& managed_user = | 493 const ManagedUserSpecifics& supervised_user = |
488 data.GetSpecifics().managed_user(); | 494 data.GetSpecifics().managed_user(); |
489 switch (it->change_type()) { | 495 switch (it->change_type()) { |
490 case SyncChange::ACTION_ADD: | 496 case SyncChange::ACTION_ADD: |
491 case SyncChange::ACTION_UPDATE: { | 497 case SyncChange::ACTION_UPDATE: { |
492 // Every item we get from the server should be acknowledged. | 498 // Every item we get from the server should be acknowledged. |
493 DCHECK(managed_user.acknowledged()); | 499 DCHECK(supervised_user.acknowledged()); |
494 const base::DictionaryValue* old_value = NULL; | 500 const base::DictionaryValue* old_value = NULL; |
495 dict->GetDictionaryWithoutPathExpansion(managed_user.id(), &old_value); | 501 dict->GetDictionaryWithoutPathExpansion(supervised_user.id(), |
502 &old_value); | |
496 | 503 |
497 // For an update action, the managed user should already exist, for an | 504 // For an update action, the supervised user should already exist, for |
498 // add action, it should not. | 505 // an add action, it should not. |
499 DCHECK_EQ( | 506 DCHECK_EQ( |
500 old_value ? SyncChange::ACTION_UPDATE : SyncChange::ACTION_ADD, | 507 old_value ? SyncChange::ACTION_UPDATE : SyncChange::ACTION_ADD, |
501 it->change_type()); | 508 it->change_type()); |
502 | 509 |
503 // If the managed user switched from unacknowledged to acknowledged, | 510 // If the supervised user switched from unacknowledged to acknowledged, |
504 // we might need to continue with a registration. | 511 // we might need to continue with a registration. |
505 if (old_value && !old_value->HasKey(kAcknowledged)) | 512 if (old_value && !old_value->HasKey(kAcknowledged)) |
506 NotifyManagedUserAcknowledged(managed_user.id()); | 513 NotifySupervisedUserAcknowledged(supervised_user.id()); |
507 | 514 |
508 base::DictionaryValue* value = new base::DictionaryValue; | 515 base::DictionaryValue* value = new base::DictionaryValue; |
509 value->SetString(kName, managed_user.name()); | 516 value->SetString(kName, supervised_user.name()); |
510 value->SetBoolean(kAcknowledged, managed_user.acknowledged()); | 517 value->SetBoolean(kAcknowledged, supervised_user.acknowledged()); |
511 value->SetString(kMasterKey, managed_user.master_key()); | 518 value->SetString(kMasterKey, supervised_user.master_key()); |
512 value->SetString(kChromeAvatar, managed_user.chrome_avatar()); | 519 value->SetString(kChromeAvatar, supervised_user.chrome_avatar()); |
513 value->SetString(kChromeOsAvatar, managed_user.chromeos_avatar()); | 520 value->SetString(kChromeOsAvatar, supervised_user.chromeos_avatar()); |
514 value->SetString(kPasswordSignatureKey, | 521 value->SetString(kPasswordSignatureKey, |
515 managed_user.password_signature_key()); | 522 supervised_user.password_signature_key()); |
516 value->SetString(kPasswordEncryptionKey, | 523 value->SetString(kPasswordEncryptionKey, |
517 managed_user.password_encryption_key()); | 524 supervised_user.password_encryption_key()); |
518 dict->SetWithoutPathExpansion(managed_user.id(), value); | 525 dict->SetWithoutPathExpansion(supervised_user.id(), value); |
519 | 526 |
520 NotifyManagedUsersChanged(); | 527 NotifySupervisedUsersChanged(); |
521 break; | 528 break; |
522 } | 529 } |
523 case SyncChange::ACTION_DELETE: { | 530 case SyncChange::ACTION_DELETE: { |
524 DCHECK(dict->HasKey(managed_user.id())) << managed_user.id(); | 531 DCHECK(dict->HasKey(supervised_user.id())) << supervised_user.id(); |
525 dict->RemoveWithoutPathExpansion(managed_user.id(), NULL); | 532 dict->RemoveWithoutPathExpansion(supervised_user.id(), NULL); |
526 break; | 533 break; |
527 } | 534 } |
528 case SyncChange::ACTION_INVALID: { | 535 case SyncChange::ACTION_INVALID: { |
529 NOTREACHED(); | 536 NOTREACHED(); |
530 break; | 537 break; |
531 } | 538 } |
532 } | 539 } |
533 } | 540 } |
534 return error; | 541 return error; |
535 } | 542 } |
536 | 543 |
537 void ManagedUserSyncService::OnLastSignedInUsernameChange() { | 544 void SupervisedUserSyncService::OnLastSignedInUsernameChange() { |
538 DCHECK(!sync_processor_); | 545 DCHECK(!sync_processor_); |
539 | 546 |
540 // If the last signed in user changes, we clear all data, to avoid managed | 547 // If the last signed in user changes, we clear all data, to avoid supervised |
541 // users from one custodian appearing in another one's profile. | 548 // users from one custodian appearing in another one's profile. |
542 prefs_->ClearPref(prefs::kSupervisedUsers); | 549 prefs_->ClearPref(prefs::kSupervisedUsers); |
543 } | 550 } |
544 | 551 |
545 void ManagedUserSyncService::NotifyManagedUserAcknowledged( | 552 void SupervisedUserSyncService::NotifySupervisedUserAcknowledged( |
546 const std::string& managed_user_id) { | 553 const std::string& supervised_user_id) { |
547 FOR_EACH_OBSERVER(ManagedUserSyncServiceObserver, observers_, | 554 FOR_EACH_OBSERVER(SupervisedUserSyncServiceObserver, observers_, |
548 OnManagedUserAcknowledged(managed_user_id)); | 555 OnSupervisedUserAcknowledged(supervised_user_id)); |
549 } | 556 } |
550 | 557 |
551 void ManagedUserSyncService::NotifyManagedUsersSyncingStopped() { | 558 void SupervisedUserSyncService::NotifySupervisedUsersSyncingStopped() { |
552 FOR_EACH_OBSERVER(ManagedUserSyncServiceObserver, observers_, | 559 FOR_EACH_OBSERVER(SupervisedUserSyncServiceObserver, observers_, |
553 OnManagedUsersSyncingStopped()); | 560 OnSupervisedUsersSyncingStopped()); |
554 } | 561 } |
555 | 562 |
556 void ManagedUserSyncService::NotifyManagedUsersChanged() { | 563 void SupervisedUserSyncService::NotifySupervisedUsersChanged() { |
557 FOR_EACH_OBSERVER(ManagedUserSyncServiceObserver, | 564 FOR_EACH_OBSERVER(SupervisedUserSyncServiceObserver, |
558 observers_, | 565 observers_, |
559 OnManagedUsersChanged()); | 566 OnSupervisedUsersChanged()); |
560 } | 567 } |
561 | 568 |
562 void ManagedUserSyncService::DispatchCallbacks() { | 569 void SupervisedUserSyncService::DispatchCallbacks() { |
563 const base::DictionaryValue* managed_users = | 570 const base::DictionaryValue* supervised_users = |
564 prefs_->GetDictionary(prefs::kSupervisedUsers); | 571 prefs_->GetDictionary(prefs::kSupervisedUsers); |
565 for (std::vector<ManagedUsersCallback>::iterator it = callbacks_.begin(); | 572 for (std::vector<SupervisedUsersCallback>::iterator it = callbacks_.begin(); |
566 it != callbacks_.end(); ++it) { | 573 it != callbacks_.end(); ++it) { |
567 it->Run(managed_users); | 574 it->Run(supervised_users); |
568 } | 575 } |
569 callbacks_.clear(); | 576 callbacks_.clear(); |
570 } | 577 } |
OLD | NEW |