OLD | NEW |
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 #include "chrome/browser/supervised_user/legacy/supervised_user_sync_service.h" | 5 #include "chrome/browser/supervised_user/legacy/supervised_user_sync_service.h" |
6 | 6 |
7 #include <set> | 7 #include <set> |
8 | 8 |
9 #include "base/bind.h" | 9 #include "base/bind.h" |
10 #include "base/callback.h" | 10 #include "base/callback.h" |
11 #include "base/prefs/scoped_user_pref_update.h" | 11 #include "base/prefs/scoped_user_pref_update.h" |
12 #include "base/strings/string_number_conversions.h" | 12 #include "base/strings/string_number_conversions.h" |
13 #include "base/strings/stringprintf.h" | 13 #include "base/strings/stringprintf.h" |
14 #include "base/values.h" | 14 #include "base/values.h" |
15 #include "chrome/browser/profiles/profile.h" | 15 #include "chrome/browser/profiles/profile.h" |
16 #include "chrome/browser/profiles/profile_avatar_icon_util.h" | 16 #include "chrome/browser/profiles/profile_avatar_icon_util.h" |
17 #include "chrome/browser/signin/signin_manager_factory.h" | 17 #include "chrome/browser/signin/signin_manager_factory.h" |
18 #include "chrome/common/pref_names.h" | 18 #include "chrome/common/pref_names.h" |
19 #include "components/pref_registry/pref_registry_syncable.h" | 19 #include "components/pref_registry/pref_registry_syncable.h" |
20 #include "components/signin/core/browser/signin_manager.h" | 20 #include "components/signin/core/browser/signin_manager.h" |
| 21 #include "components/user_manager/user_id.h" |
21 #include "sync/api/sync_change.h" | 22 #include "sync/api/sync_change.h" |
22 #include "sync/api/sync_data.h" | 23 #include "sync/api/sync_data.h" |
23 #include "sync/api/sync_error.h" | 24 #include "sync/api/sync_error.h" |
24 #include "sync/api/sync_error_factory.h" | 25 #include "sync/api/sync_error_factory.h" |
25 #include "sync/api/sync_merge_result.h" | 26 #include "sync/api/sync_merge_result.h" |
26 #include "sync/protocol/sync.pb.h" | 27 #include "sync/protocol/sync.pb.h" |
27 | 28 |
28 #if defined(OS_CHROMEOS) | 29 #if defined(OS_CHROMEOS) |
29 #include "components/user_manager/user_image/default_user_images.h" | 30 #include "components/user_manager/user_image/default_user_images.h" |
30 #endif | 31 #endif |
(...skipping 13 matching lines...) Expand all Loading... |
44 using sync_pb::ManagedUserSpecifics; | 45 using sync_pb::ManagedUserSpecifics; |
45 | 46 |
46 namespace { | 47 namespace { |
47 | 48 |
48 #if defined(OS_CHROMEOS) | 49 #if defined(OS_CHROMEOS) |
49 const char kChromeOSAvatarPrefix[] = "chromeos-avatar-index:"; | 50 const char kChromeOSAvatarPrefix[] = "chromeos-avatar-index:"; |
50 #else | 51 #else |
51 const char kChromeAvatarPrefix[] = "chrome-avatar-index:"; | 52 const char kChromeAvatarPrefix[] = "chrome-avatar-index:"; |
52 #endif | 53 #endif |
53 | 54 |
54 SyncData CreateLocalSyncData(const std::string& id, | 55 SyncData CreateLocalSyncData(const user_manager::UserID& id, |
55 const std::string& name, | 56 const std::string& name, |
56 bool acknowledged, | 57 bool acknowledged, |
57 const std::string& master_key, | 58 const std::string& master_key, |
58 const std::string& chrome_avatar, | 59 const std::string& chrome_avatar, |
59 const std::string& chromeos_avatar, | 60 const std::string& chromeos_avatar, |
60 const std::string& password_signature_key, | 61 const std::string& password_signature_key, |
61 const std::string& password_encryption_key) { | 62 const std::string& password_encryption_key) { |
62 ::sync_pb::EntitySpecifics specifics; | 63 ::sync_pb::EntitySpecifics specifics; |
63 specifics.mutable_managed_user()->set_id(id); | 64 specifics.mutable_managed_user()->set_id(id.GetUserEmail()); |
64 specifics.mutable_managed_user()->set_name(name); | 65 specifics.mutable_managed_user()->set_name(name); |
65 if (!chrome_avatar.empty()) | 66 if (!chrome_avatar.empty()) |
66 specifics.mutable_managed_user()->set_chrome_avatar(chrome_avatar); | 67 specifics.mutable_managed_user()->set_chrome_avatar(chrome_avatar); |
67 if (!chromeos_avatar.empty()) | 68 if (!chromeos_avatar.empty()) |
68 specifics.mutable_managed_user()->set_chromeos_avatar(chromeos_avatar); | 69 specifics.mutable_managed_user()->set_chromeos_avatar(chromeos_avatar); |
69 if (!master_key.empty()) | 70 if (!master_key.empty()) |
70 specifics.mutable_managed_user()->set_master_key(master_key); | 71 specifics.mutable_managed_user()->set_master_key(master_key); |
71 if (acknowledged) | 72 if (acknowledged) |
72 specifics.mutable_managed_user()->set_acknowledged(true); | 73 specifics.mutable_managed_user()->set_acknowledged(true); |
73 if (!password_signature_key.empty()) { | 74 if (!password_signature_key.empty()) { |
74 specifics.mutable_managed_user()-> | 75 specifics.mutable_managed_user()-> |
75 set_password_signature_key(password_signature_key); | 76 set_password_signature_key(password_signature_key); |
76 } | 77 } |
77 if (!password_encryption_key.empty()) { | 78 if (!password_encryption_key.empty()) { |
78 specifics.mutable_managed_user()-> | 79 specifics.mutable_managed_user()-> |
79 set_password_encryption_key(password_encryption_key); | 80 set_password_encryption_key(password_encryption_key); |
80 } | 81 } |
81 return SyncData::CreateLocalData(id, name, specifics); | 82 return SyncData::CreateLocalData(id.GetUserEmail(), name, specifics); |
82 } | 83 } |
83 | 84 |
84 SyncData CreateSyncDataFromDictionaryEntry(const std::string& id, | 85 SyncData CreateSyncDataFromDictionaryEntry(const user_manager::UserID& id, |
85 const base::Value& value) { | 86 const base::Value& value) { |
86 const base::DictionaryValue* dict = NULL; | 87 const base::DictionaryValue* dict = NULL; |
87 bool success = value.GetAsDictionary(&dict); | 88 bool success = value.GetAsDictionary(&dict); |
88 DCHECK(success); | 89 DCHECK(success); |
89 bool acknowledged = false; | 90 bool acknowledged = false; |
90 dict->GetBoolean(SupervisedUserSyncService::kAcknowledged, &acknowledged); | 91 dict->GetBoolean(SupervisedUserSyncService::kAcknowledged, &acknowledged); |
91 std::string name; | 92 std::string name; |
92 dict->GetString(SupervisedUserSyncService::kName, &name); | 93 dict->GetString(SupervisedUserSyncService::kName, &name); |
93 DCHECK(!name.empty()); | 94 DCHECK(!name.empty()); |
94 std::string master_key; | 95 std::string master_key; |
(...skipping 127 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
222 chromeos_avatar = BuildAvatarString(avatar_index); | 223 chromeos_avatar = BuildAvatarString(avatar_index); |
223 #else | 224 #else |
224 chrome_avatar = BuildAvatarString(avatar_index); | 225 chrome_avatar = BuildAvatarString(avatar_index); |
225 #endif | 226 #endif |
226 result->SetString(kChromeAvatar, chrome_avatar); | 227 result->SetString(kChromeAvatar, chrome_avatar); |
227 result->SetString(kChromeOsAvatar, chromeos_avatar); | 228 result->SetString(kChromeOsAvatar, chromeos_avatar); |
228 return result.Pass(); | 229 return result.Pass(); |
229 } | 230 } |
230 | 231 |
231 void SupervisedUserSyncService::AddSupervisedUser( | 232 void SupervisedUserSyncService::AddSupervisedUser( |
232 const std::string& id, | 233 const user_manager::UserID& id, |
233 const std::string& name, | 234 const std::string& name, |
234 const std::string& master_key, | 235 const std::string& master_key, |
235 const std::string& signature_key, | 236 const std::string& signature_key, |
236 const std::string& encryption_key, | 237 const std::string& encryption_key, |
237 int avatar_index) { | 238 int avatar_index) { |
238 UpdateSupervisedUserImpl(id, | 239 UpdateSupervisedUserImpl(id, |
239 name, | 240 name, |
240 master_key, | 241 master_key, |
241 signature_key, | 242 signature_key, |
242 encryption_key, | 243 encryption_key, |
243 avatar_index, | 244 avatar_index, |
244 true /* add */); | 245 true /* add */); |
245 } | 246 } |
246 | 247 |
247 void SupervisedUserSyncService::UpdateSupervisedUser( | 248 void SupervisedUserSyncService::UpdateSupervisedUser( |
248 const std::string& id, | 249 const user_manager::UserID& id, |
249 const std::string& name, | 250 const std::string& name, |
250 const std::string& master_key, | 251 const std::string& master_key, |
251 const std::string& signature_key, | 252 const std::string& signature_key, |
252 const std::string& encryption_key, | 253 const std::string& encryption_key, |
253 int avatar_index) { | 254 int avatar_index) { |
254 UpdateSupervisedUserImpl(id, | 255 UpdateSupervisedUserImpl(id, |
255 name, | 256 name, |
256 master_key, | 257 master_key, |
257 signature_key, | 258 signature_key, |
258 encryption_key, | 259 encryption_key, |
259 avatar_index, | 260 avatar_index, |
260 false /* update */); | 261 false /* update */); |
261 } | 262 } |
262 | 263 |
263 void SupervisedUserSyncService::UpdateSupervisedUserImpl( | 264 void SupervisedUserSyncService::UpdateSupervisedUserImpl( |
264 const std::string& id, | 265 const user_manager::UserID& id, |
265 const std::string& name, | 266 const std::string& name, |
266 const std::string& master_key, | 267 const std::string& master_key, |
267 const std::string& signature_key, | 268 const std::string& signature_key, |
268 const std::string& encryption_key, | 269 const std::string& encryption_key, |
269 int avatar_index, | 270 int avatar_index, |
270 bool add_user) { | 271 bool add_user) { |
271 DictionaryPrefUpdate update(prefs_, prefs::kSupervisedUsers); | 272 DictionaryPrefUpdate update(prefs_, prefs::kSupervisedUsers); |
272 base::DictionaryValue* dict = update.Get(); | 273 base::DictionaryValue* dict = update.Get(); |
273 scoped_ptr<base::DictionaryValue> value = CreateDictionary( | 274 scoped_ptr<base::DictionaryValue> value = CreateDictionary( |
274 name, master_key, signature_key, encryption_key, avatar_index); | 275 name, master_key, signature_key, encryption_key, avatar_index); |
275 | 276 |
276 DCHECK_EQ(add_user, !dict->HasKey(id)); | 277 DCHECK_EQ(add_user, !dict->HasKey(id.GetUserEmail())); |
277 base::DictionaryValue* entry = value.get(); | 278 base::DictionaryValue* entry = value.get(); |
278 dict->SetWithoutPathExpansion(id, value.release()); | 279 dict->SetWithoutPathExpansion(id.GetUserEmail(), value.release()); |
279 | 280 |
280 if (!sync_processor_) | 281 if (!sync_processor_) |
281 return; | 282 return; |
282 | 283 |
283 // If we're already syncing, create a new change and upload it. | 284 // If we're already syncing, create a new change and upload it. |
284 SyncChangeList change_list; | 285 SyncChangeList change_list; |
285 change_list.push_back( | 286 change_list.push_back( |
286 SyncChange(FROM_HERE, | 287 SyncChange(FROM_HERE, |
287 add_user ? SyncChange::ACTION_ADD : SyncChange::ACTION_UPDATE, | 288 add_user ? SyncChange::ACTION_ADD : SyncChange::ACTION_UPDATE, |
288 CreateSyncDataFromDictionaryEntry(id, *entry))); | 289 CreateSyncDataFromDictionaryEntry(id, *entry))); |
289 SyncError error = | 290 SyncError error = |
290 sync_processor_->ProcessSyncChanges(FROM_HERE, change_list); | 291 sync_processor_->ProcessSyncChanges(FROM_HERE, change_list); |
291 DCHECK(!error.IsSet()) << error.ToString(); | 292 DCHECK(!error.IsSet()) << error.ToString(); |
292 } | 293 } |
293 | 294 |
294 void SupervisedUserSyncService::DeleteSupervisedUser(const std::string& id) { | 295 void SupervisedUserSyncService::DeleteSupervisedUser(const user_manager::UserID&
id) { |
295 DictionaryPrefUpdate update(prefs_, prefs::kSupervisedUsers); | 296 DictionaryPrefUpdate update(prefs_, prefs::kSupervisedUsers); |
296 bool success = update->RemoveWithoutPathExpansion(id, NULL); | 297 bool success = update->RemoveWithoutPathExpansion(id.GetUserEmail(), NULL); |
297 DCHECK(success); | 298 DCHECK(success); |
298 | 299 |
299 if (!sync_processor_) | 300 if (!sync_processor_) |
300 return; | 301 return; |
301 | 302 |
302 SyncChangeList change_list; | 303 SyncChangeList change_list; |
303 change_list.push_back(SyncChange( | 304 change_list.push_back(SyncChange( |
304 FROM_HERE, | 305 FROM_HERE, |
305 SyncChange::ACTION_DELETE, | 306 SyncChange::ACTION_DELETE, |
306 SyncData::CreateLocalDelete(id, SUPERVISED_USERS))); | 307 SyncData::CreateLocalDelete(id.GetUserEmail(), SUPERVISED_USERS))); |
307 SyncError sync_error = | 308 SyncError sync_error = |
308 sync_processor_->ProcessSyncChanges(FROM_HERE, change_list); | 309 sync_processor_->ProcessSyncChanges(FROM_HERE, change_list); |
309 DCHECK(!sync_error.IsSet()); | 310 DCHECK(!sync_error.IsSet()); |
310 } | 311 } |
311 | 312 |
312 const base::DictionaryValue* SupervisedUserSyncService::GetSupervisedUsers() { | 313 const base::DictionaryValue* SupervisedUserSyncService::GetSupervisedUsers() { |
313 DCHECK(sync_processor_); | 314 DCHECK(sync_processor_); |
314 return prefs_->GetDictionary(prefs::kSupervisedUsers); | 315 return prefs_->GetDictionary(prefs::kSupervisedUsers); |
315 } | 316 } |
316 | 317 |
317 bool SupervisedUserSyncService::UpdateSupervisedUserAvatarIfNeeded( | 318 bool SupervisedUserSyncService::UpdateSupervisedUserAvatarIfNeeded( |
318 const std::string& id, | 319 const user_manager::UserID& id, |
319 int avatar_index) { | 320 int avatar_index) { |
320 DictionaryPrefUpdate update(prefs_, prefs::kSupervisedUsers); | 321 DictionaryPrefUpdate update(prefs_, prefs::kSupervisedUsers); |
321 base::DictionaryValue* dict = update.Get(); | 322 base::DictionaryValue* dict = update.Get(); |
322 DCHECK(dict->HasKey(id)); | 323 DCHECK(dict->HasKey(id.GetUserEmail())); |
323 base::DictionaryValue* value = NULL; | 324 base::DictionaryValue* value = NULL; |
324 bool success = dict->GetDictionaryWithoutPathExpansion(id, &value); | 325 bool success = dict->GetDictionaryWithoutPathExpansion(id.GetUserEmail(), &val
ue); |
325 DCHECK(success); | 326 DCHECK(success); |
326 | 327 |
327 bool acknowledged = false; | 328 bool acknowledged = false; |
328 value->GetBoolean(SupervisedUserSyncService::kAcknowledged, &acknowledged); | 329 value->GetBoolean(SupervisedUserSyncService::kAcknowledged, &acknowledged); |
329 std::string name; | 330 std::string name; |
330 value->GetString(SupervisedUserSyncService::kName, &name); | 331 value->GetString(SupervisedUserSyncService::kName, &name); |
331 std::string master_key; | 332 std::string master_key; |
332 value->GetString(SupervisedUserSyncService::kMasterKey, &master_key); | 333 value->GetString(SupervisedUserSyncService::kMasterKey, &master_key); |
333 std::string signature; | 334 std::string signature; |
334 value->GetString(SupervisedUserSyncService::kPasswordSignatureKey, | 335 value->GetString(SupervisedUserSyncService::kPasswordSignatureKey, |
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
371 CreateLocalSyncData(id, name, acknowledged, master_key, | 372 CreateLocalSyncData(id, name, acknowledged, master_key, |
372 chrome_avatar, chromeos_avatar, | 373 chrome_avatar, chromeos_avatar, |
373 signature, encryption))); | 374 signature, encryption))); |
374 SyncError error = | 375 SyncError error = |
375 sync_processor_->ProcessSyncChanges(FROM_HERE, change_list); | 376 sync_processor_->ProcessSyncChanges(FROM_HERE, change_list); |
376 DCHECK(!error.IsSet()) << error.ToString(); | 377 DCHECK(!error.IsSet()) << error.ToString(); |
377 return true; | 378 return true; |
378 } | 379 } |
379 | 380 |
380 void SupervisedUserSyncService::ClearSupervisedUserAvatar( | 381 void SupervisedUserSyncService::ClearSupervisedUserAvatar( |
381 const std::string& id) { | 382 const user_manager::UserID& id) { |
382 bool cleared = UpdateSupervisedUserAvatarIfNeeded(id, kNoAvatar); | 383 bool cleared = UpdateSupervisedUserAvatarIfNeeded(id, kNoAvatar); |
383 DCHECK(cleared); | 384 DCHECK(cleared); |
384 } | 385 } |
385 | 386 |
386 void SupervisedUserSyncService::GetSupervisedUsersAsync( | 387 void SupervisedUserSyncService::GetSupervisedUsersAsync( |
387 const SupervisedUsersCallback& callback) { | 388 const SupervisedUsersCallback& callback) { |
388 // If we are already syncing, just run the callback. | 389 // If we are already syncing, just run the callback. |
389 if (sync_processor_) { | 390 if (sync_processor_) { |
390 callback.Run(GetSupervisedUsers()); | 391 callback.Run(GetSupervisedUsers()); |
391 return; | 392 return; |
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
440 seen_ids.insert(supervised_user.id()); | 441 seen_ids.insert(supervised_user.id()); |
441 } | 442 } |
442 | 443 |
443 for (base::DictionaryValue::Iterator it(*dict); !it.IsAtEnd(); it.Advance()) { | 444 for (base::DictionaryValue::Iterator it(*dict); !it.IsAtEnd(); it.Advance()) { |
444 if (seen_ids.find(it.key()) != seen_ids.end()) | 445 if (seen_ids.find(it.key()) != seen_ids.end()) |
445 continue; | 446 continue; |
446 | 447 |
447 change_list.push_back( | 448 change_list.push_back( |
448 SyncChange(FROM_HERE, | 449 SyncChange(FROM_HERE, |
449 SyncChange::ACTION_ADD, | 450 SyncChange::ACTION_ADD, |
450 CreateSyncDataFromDictionaryEntry(it.key(), it.value()))); | 451 CreateSyncDataFromDictionaryEntry(user_manager::UserID::FromU
serEmail(it.key()), it.value()))); |
451 } | 452 } |
452 result.set_error(sync_processor_->ProcessSyncChanges(FROM_HERE, change_list)); | 453 result.set_error(sync_processor_->ProcessSyncChanges(FROM_HERE, change_list)); |
453 | 454 |
454 result.set_num_items_modified(num_items_modified); | 455 result.set_num_items_modified(num_items_modified); |
455 result.set_num_items_added(num_items_added); | 456 result.set_num_items_added(num_items_added); |
456 result.set_num_items_after_association(dict->size()); | 457 result.set_num_items_after_association(dict->size()); |
457 | 458 |
458 DispatchCallbacks(); | 459 DispatchCallbacks(); |
459 | 460 |
460 return result; | 461 return result; |
461 } | 462 } |
462 | 463 |
463 void SupervisedUserSyncService::StopSyncing(ModelType type) { | 464 void SupervisedUserSyncService::StopSyncing(ModelType type) { |
464 DCHECK_EQ(SUPERVISED_USERS, type); | 465 DCHECK_EQ(SUPERVISED_USERS, type); |
465 // The observers may want to change the Sync data, so notify them before | 466 // The observers may want to change the Sync data, so notify them before |
466 // resetting the |sync_processor_|. | 467 // resetting the |sync_processor_|. |
467 NotifySupervisedUsersSyncingStopped(); | 468 NotifySupervisedUsersSyncingStopped(); |
468 sync_processor_.reset(); | 469 sync_processor_.reset(); |
469 error_handler_.reset(); | 470 error_handler_.reset(); |
470 } | 471 } |
471 | 472 |
472 SyncDataList SupervisedUserSyncService::GetAllSyncData( | 473 SyncDataList SupervisedUserSyncService::GetAllSyncData( |
473 ModelType type) const { | 474 ModelType type) const { |
474 SyncDataList data; | 475 SyncDataList data; |
475 DictionaryPrefUpdate update(prefs_, prefs::kSupervisedUsers); | 476 DictionaryPrefUpdate update(prefs_, prefs::kSupervisedUsers); |
476 base::DictionaryValue* dict = update.Get(); | 477 base::DictionaryValue* dict = update.Get(); |
477 for (base::DictionaryValue::Iterator it(*dict); !it.IsAtEnd(); it.Advance()) | 478 for (base::DictionaryValue::Iterator it(*dict); !it.IsAtEnd(); it.Advance()) |
478 data.push_back(CreateSyncDataFromDictionaryEntry(it.key(), it.value())); | 479 data.push_back(CreateSyncDataFromDictionaryEntry(user_manager::UserID::FromU
serEmail(it.key()), it.value())); |
479 | 480 |
480 return data; | 481 return data; |
481 } | 482 } |
482 | 483 |
483 SyncError SupervisedUserSyncService::ProcessSyncChanges( | 484 SyncError SupervisedUserSyncService::ProcessSyncChanges( |
484 const tracked_objects::Location& from_here, | 485 const tracked_objects::Location& from_here, |
485 const SyncChangeList& change_list) { | 486 const SyncChangeList& change_list) { |
486 SyncError error; | 487 SyncError error; |
487 DictionaryPrefUpdate update(prefs_, prefs::kSupervisedUsers); | 488 DictionaryPrefUpdate update(prefs_, prefs::kSupervisedUsers); |
488 base::DictionaryValue* dict = update.Get(); | 489 base::DictionaryValue* dict = update.Get(); |
(...skipping 13 matching lines...) Expand all Loading... |
502 | 503 |
503 // For an update action, the supervised user should already exist, for | 504 // For an update action, the supervised user should already exist, for |
504 // an add action, it should not. | 505 // an add action, it should not. |
505 DCHECK_EQ( | 506 DCHECK_EQ( |
506 old_value ? SyncChange::ACTION_UPDATE : SyncChange::ACTION_ADD, | 507 old_value ? SyncChange::ACTION_UPDATE : SyncChange::ACTION_ADD, |
507 sync_change.change_type()); | 508 sync_change.change_type()); |
508 | 509 |
509 // If the supervised user switched from unacknowledged to acknowledged, | 510 // If the supervised user switched from unacknowledged to acknowledged, |
510 // we might need to continue with a registration. | 511 // we might need to continue with a registration. |
511 if (old_value && !old_value->HasKey(kAcknowledged)) | 512 if (old_value && !old_value->HasKey(kAcknowledged)) |
512 NotifySupervisedUserAcknowledged(supervised_user.id()); | 513 NotifySupervisedUserAcknowledged(user_manager::UserID::FromUserEmail(s
upervised_user.id())); |
513 | 514 |
514 base::DictionaryValue* value = new base::DictionaryValue; | 515 base::DictionaryValue* value = new base::DictionaryValue; |
515 value->SetString(kName, supervised_user.name()); | 516 value->SetString(kName, supervised_user.name()); |
516 value->SetBoolean(kAcknowledged, supervised_user.acknowledged()); | 517 value->SetBoolean(kAcknowledged, supervised_user.acknowledged()); |
517 value->SetString(kMasterKey, supervised_user.master_key()); | 518 value->SetString(kMasterKey, supervised_user.master_key()); |
518 value->SetString(kChromeAvatar, supervised_user.chrome_avatar()); | 519 value->SetString(kChromeAvatar, supervised_user.chrome_avatar()); |
519 value->SetString(kChromeOsAvatar, supervised_user.chromeos_avatar()); | 520 value->SetString(kChromeOsAvatar, supervised_user.chromeos_avatar()); |
520 value->SetString(kPasswordSignatureKey, | 521 value->SetString(kPasswordSignatureKey, |
521 supervised_user.password_signature_key()); | 522 supervised_user.password_signature_key()); |
522 value->SetString(kPasswordEncryptionKey, | 523 value->SetString(kPasswordEncryptionKey, |
(...skipping 21 matching lines...) Expand all Loading... |
544 const std::string& account_id, | 545 const std::string& account_id, |
545 const std::string& username) { | 546 const std::string& username) { |
546 DCHECK(!sync_processor_); | 547 DCHECK(!sync_processor_); |
547 | 548 |
548 // Clear all data on signout, to avoid supervised users from one custodian | 549 // Clear all data on signout, to avoid supervised users from one custodian |
549 // appearing in another one's profile. | 550 // appearing in another one's profile. |
550 prefs_->ClearPref(prefs::kSupervisedUsers); | 551 prefs_->ClearPref(prefs::kSupervisedUsers); |
551 } | 552 } |
552 | 553 |
553 void SupervisedUserSyncService::NotifySupervisedUserAcknowledged( | 554 void SupervisedUserSyncService::NotifySupervisedUserAcknowledged( |
554 const std::string& supervised_user_id) { | 555 const user_manager::UserID& supervised_user_id) { |
555 FOR_EACH_OBSERVER(SupervisedUserSyncServiceObserver, observers_, | 556 FOR_EACH_OBSERVER(SupervisedUserSyncServiceObserver, observers_, |
556 OnSupervisedUserAcknowledged(supervised_user_id)); | 557 OnSupervisedUserAcknowledged(supervised_user_id)); |
557 } | 558 } |
558 | 559 |
559 void SupervisedUserSyncService::NotifySupervisedUsersSyncingStopped() { | 560 void SupervisedUserSyncService::NotifySupervisedUsersSyncingStopped() { |
560 FOR_EACH_OBSERVER(SupervisedUserSyncServiceObserver, observers_, | 561 FOR_EACH_OBSERVER(SupervisedUserSyncServiceObserver, observers_, |
561 OnSupervisedUsersSyncingStopped()); | 562 OnSupervisedUsersSyncingStopped()); |
562 } | 563 } |
563 | 564 |
564 void SupervisedUserSyncService::NotifySupervisedUsersChanged() { | 565 void SupervisedUserSyncService::NotifySupervisedUsersChanged() { |
565 FOR_EACH_OBSERVER(SupervisedUserSyncServiceObserver, | 566 FOR_EACH_OBSERVER(SupervisedUserSyncServiceObserver, |
566 observers_, | 567 observers_, |
567 OnSupervisedUsersChanged()); | 568 OnSupervisedUsersChanged()); |
568 } | 569 } |
569 | 570 |
570 void SupervisedUserSyncService::DispatchCallbacks() { | 571 void SupervisedUserSyncService::DispatchCallbacks() { |
571 const base::DictionaryValue* supervised_users = | 572 const base::DictionaryValue* supervised_users = |
572 prefs_->GetDictionary(prefs::kSupervisedUsers); | 573 prefs_->GetDictionary(prefs::kSupervisedUsers); |
573 for (const auto& callback : callbacks_) | 574 for (const auto& callback : callbacks_) |
574 callback.Run(supervised_users); | 575 callback.Run(supervised_users); |
575 callbacks_.clear(); | 576 callbacks_.clear(); |
576 } | 577 } |
OLD | NEW |