Index: chrome/browser/managed_mode/managed_user_sync_service.cc |
diff --git a/chrome/browser/managed_mode/managed_user_sync_service.cc b/chrome/browser/managed_mode/managed_user_sync_service.cc |
index 177e2b79133b4d332f864ce96d92b90f3b9d4997..5ce6b4d608b8f3fd047af2ec235e3adcf474db9b 100644 |
--- a/chrome/browser/managed_mode/managed_user_sync_service.cc |
+++ b/chrome/browser/managed_mode/managed_user_sync_service.cc |
@@ -49,6 +49,8 @@ SyncData CreateLocalSyncData(const std::string& id, |
specifics.mutable_managed_user()->set_name(name); |
if (!chrome_avatar.empty()) |
specifics.mutable_managed_user()->set_chrome_avatar(chrome_avatar); |
+ else |
+ specifics.mutable_managed_user()->clear_chrome_avatar(); |
if (!chromeos_avatar.empty()) |
specifics.mutable_managed_user()->set_chromeos_avatar(chromeos_avatar); |
if (!master_key.empty()) |
@@ -84,8 +86,9 @@ SyncData CreateSyncDataFromDictionaryEntry( |
const char ManagedUserSyncService::kAcknowledged[] = "acknowledged"; |
const char ManagedUserSyncService::kChromeAvatar[] = "chromeAvatar"; |
const char ManagedUserSyncService::kChromeOsAvatar[] = "chromeOsAvatar"; |
-const char ManagedUserSyncService::kName[] = "name"; |
const char ManagedUserSyncService::kMasterKey[] = "masterKey"; |
+const char ManagedUserSyncService::kName[] = "name"; |
+const int ManagedUserSyncService::kNoAvatar = -100; |
ManagedUserSyncService::ManagedUserSyncService(PrefService* prefs) |
: prefs_(prefs) { |
@@ -114,7 +117,7 @@ bool ManagedUserSyncService::GetAvatarIndex(const std::string& avatar_str, |
// for chrome OS as well. |
DCHECK(avatar_index); |
if (avatar_str.empty()) { |
- *avatar_index = -1; |
+ *avatar_index = kNoAvatar; |
return true; |
} |
@@ -184,6 +187,10 @@ void ManagedUserSyncService::AddManagedUser(const std::string& id, |
} |
void ManagedUserSyncService::DeleteManagedUser(const std::string& id) { |
+ DictionaryPrefUpdate update(prefs_, prefs::kManagedUsers); |
+ bool success = update->RemoveWithoutPathExpansion(id, NULL); |
+ DCHECK(success); |
+ |
if (!sync_processor_) |
return; |
@@ -202,6 +209,55 @@ const DictionaryValue* ManagedUserSyncService::GetManagedUsers() { |
return prefs_->GetDictionary(prefs::kManagedUsers); |
} |
+bool ManagedUserSyncService::UpdateManagedUserAvatarIfNeeded( |
+ const std::string& id, |
+ int avatar_index) { |
+ DictionaryPrefUpdate update(prefs_, prefs::kManagedUsers); |
+ DictionaryValue* dict = update.Get(); |
+ DCHECK(dict->HasKey(id)); |
+ DictionaryValue* value = NULL; |
+ bool success = dict->GetDictionaryWithoutPathExpansion(id, &value); |
+ DCHECK(success); |
+ |
+ bool acknowledged = false; |
+ value->GetBoolean(ManagedUserSyncService::kAcknowledged, &acknowledged); |
+ std::string name; |
+ value->GetString(ManagedUserSyncService::kName, &name); |
+ std::string master_key; |
+ value->GetString(ManagedUserSyncService::kMasterKey, &master_key); |
+ // TODO(ibraaaa): this should be updated when avatar syncing for |
+ // supervised users is implemented on Chrome OS. |
+ std::string chromeos_avatar; |
+ value->GetString(ManagedUserSyncService::kChromeOsAvatar, &chromeos_avatar); |
+ std::string chrome_avatar; |
+ value->GetString(ManagedUserSyncService::kChromeAvatar, &chrome_avatar); |
+ if (!chrome_avatar.empty() && avatar_index != kNoAvatar) |
+ return false; |
+ |
+ chrome_avatar = avatar_index == kNoAvatar ? |
+ std::string() : BuildAvatarString(avatar_index); |
+ value->SetString(kChromeAvatar, chrome_avatar); |
+ |
+ if (!sync_processor_) |
+ return true; |
+ |
+ SyncChangeList change_list; |
+ change_list.push_back(SyncChange( |
+ FROM_HERE, |
+ SyncChange::ACTION_UPDATE, |
+ CreateLocalSyncData(id, name, acknowledged, master_key, |
+ chrome_avatar, chromeos_avatar))); |
+ SyncError error = |
+ sync_processor_->ProcessSyncChanges(FROM_HERE, change_list); |
+ DCHECK(!error.IsSet()) << error.ToString(); |
+ return true; |
+} |
+ |
+void ManagedUserSyncService::ClearManagedUserAvatar(const std::string& id) { |
+ bool cleared = UpdateManagedUserAvatarIfNeeded(id, kNoAvatar); |
+ DCHECK(cleared); |
+} |
+ |
void ManagedUserSyncService::GetManagedUsersAsync( |
const ManagedUsersCallback& callback) { |
// If we are already syncing, just run the callback. |