| 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 |