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/managed_mode/managed_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/strings/string_number_conversions.h" | 9 #include "base/strings/string_number_conversions.h" |
10 #include "base/strings/stringprintf.h" | 10 #include "base/strings/stringprintf.h" |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
42 const std::string& name, | 42 const std::string& name, |
43 bool acknowledged, | 43 bool acknowledged, |
44 const std::string& master_key, | 44 const std::string& master_key, |
45 const std::string& chrome_avatar, | 45 const std::string& chrome_avatar, |
46 const std::string& chromeos_avatar) { | 46 const std::string& chromeos_avatar) { |
47 ::sync_pb::EntitySpecifics specifics; | 47 ::sync_pb::EntitySpecifics specifics; |
48 specifics.mutable_managed_user()->set_id(id); | 48 specifics.mutable_managed_user()->set_id(id); |
49 specifics.mutable_managed_user()->set_name(name); | 49 specifics.mutable_managed_user()->set_name(name); |
50 if (!chrome_avatar.empty()) | 50 if (!chrome_avatar.empty()) |
51 specifics.mutable_managed_user()->set_chrome_avatar(chrome_avatar); | 51 specifics.mutable_managed_user()->set_chrome_avatar(chrome_avatar); |
| 52 else |
| 53 specifics.mutable_managed_user()->clear_chrome_avatar(); |
52 if (!chromeos_avatar.empty()) | 54 if (!chromeos_avatar.empty()) |
53 specifics.mutable_managed_user()->set_chromeos_avatar(chromeos_avatar); | 55 specifics.mutable_managed_user()->set_chromeos_avatar(chromeos_avatar); |
54 if (!master_key.empty()) | 56 if (!master_key.empty()) |
55 specifics.mutable_managed_user()->set_master_key(master_key); | 57 specifics.mutable_managed_user()->set_master_key(master_key); |
56 if (acknowledged) | 58 if (acknowledged) |
57 specifics.mutable_managed_user()->set_acknowledged(true); | 59 specifics.mutable_managed_user()->set_acknowledged(true); |
58 return SyncData::CreateLocalData(id, name, specifics); | 60 return SyncData::CreateLocalData(id, name, specifics); |
59 } | 61 } |
60 | 62 |
61 SyncData CreateSyncDataFromDictionaryEntry( | 63 SyncData CreateSyncDataFromDictionaryEntry( |
(...skipping 15 matching lines...) Expand all Loading... |
77 | 79 |
78 return CreateLocalSyncData(it.key(), name, acknowledged, master_key, | 80 return CreateLocalSyncData(it.key(), name, acknowledged, master_key, |
79 chrome_avatar, chromeos_avatar); | 81 chrome_avatar, chromeos_avatar); |
80 } | 82 } |
81 | 83 |
82 } // namespace | 84 } // namespace |
83 | 85 |
84 const char ManagedUserSyncService::kAcknowledged[] = "acknowledged"; | 86 const char ManagedUserSyncService::kAcknowledged[] = "acknowledged"; |
85 const char ManagedUserSyncService::kChromeAvatar[] = "chromeAvatar"; | 87 const char ManagedUserSyncService::kChromeAvatar[] = "chromeAvatar"; |
86 const char ManagedUserSyncService::kChromeOsAvatar[] = "chromeOsAvatar"; | 88 const char ManagedUserSyncService::kChromeOsAvatar[] = "chromeOsAvatar"; |
| 89 const char ManagedUserSyncService::kMasterKey[] = "masterKey"; |
87 const char ManagedUserSyncService::kName[] = "name"; | 90 const char ManagedUserSyncService::kName[] = "name"; |
88 const char ManagedUserSyncService::kMasterKey[] = "masterKey"; | 91 const int ManagedUserSyncService::kNoAvatar = -100; |
89 | 92 |
90 ManagedUserSyncService::ManagedUserSyncService(PrefService* prefs) | 93 ManagedUserSyncService::ManagedUserSyncService(PrefService* prefs) |
91 : prefs_(prefs) { | 94 : prefs_(prefs) { |
92 pref_change_registrar_.Init(prefs_); | 95 pref_change_registrar_.Init(prefs_); |
93 pref_change_registrar_.Add( | 96 pref_change_registrar_.Add( |
94 prefs::kGoogleServicesLastUsername, | 97 prefs::kGoogleServicesLastUsername, |
95 base::Bind(&ManagedUserSyncService::OnLastSignedInUsernameChange, | 98 base::Bind(&ManagedUserSyncService::OnLastSignedInUsernameChange, |
96 base::Unretained(this))); | 99 base::Unretained(this))); |
97 } | 100 } |
98 | 101 |
99 ManagedUserSyncService::~ManagedUserSyncService() { | 102 ManagedUserSyncService::~ManagedUserSyncService() { |
100 } | 103 } |
101 | 104 |
102 // static | 105 // static |
103 void ManagedUserSyncService::RegisterProfilePrefs( | 106 void ManagedUserSyncService::RegisterProfilePrefs( |
104 PrefRegistrySyncable* registry) { | 107 PrefRegistrySyncable* registry) { |
105 registry->RegisterDictionaryPref(prefs::kManagedUsers, | 108 registry->RegisterDictionaryPref(prefs::kManagedUsers, |
106 PrefRegistrySyncable::UNSYNCABLE_PREF); | 109 PrefRegistrySyncable::UNSYNCABLE_PREF); |
107 } | 110 } |
108 | 111 |
109 // static | 112 // static |
110 bool ManagedUserSyncService::GetAvatarIndex(const std::string& avatar_str, | 113 bool ManagedUserSyncService::GetAvatarIndex(const std::string& avatar_str, |
111 int* avatar_index) { | 114 int* avatar_index) { |
112 // TODO(ibraaaa): when chrome OS supports supervised users avatar syncing | 115 // TODO(ibraaaa): when chrome OS supports supervised users avatar syncing |
113 // then update this method to support extracting the avatar index | 116 // then update this method to support extracting the avatar index |
114 // for chrome OS as well. | 117 // for chrome OS as well. |
115 DCHECK(avatar_index); | 118 DCHECK(avatar_index); |
116 if (avatar_str.empty()) { | 119 if (avatar_str.empty()) { |
117 *avatar_index = -1; | 120 *avatar_index = kNoAvatar; |
118 return true; | 121 return true; |
119 } | 122 } |
120 | 123 |
121 size_t prefix_len = strlen(kChromeAvatarPrefix); | 124 size_t prefix_len = strlen(kChromeAvatarPrefix); |
122 if (avatar_str.size() <= prefix_len || | 125 if (avatar_str.size() <= prefix_len || |
123 avatar_str.substr(0, prefix_len) != kChromeAvatarPrefix) { | 126 avatar_str.substr(0, prefix_len) != kChromeAvatarPrefix) { |
124 return false; | 127 return false; |
125 } | 128 } |
126 | 129 |
127 return base::StringToInt(avatar_str.substr(prefix_len), avatar_index); | 130 return base::StringToInt(avatar_str.substr(prefix_len), avatar_index); |
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
177 FROM_HERE, | 180 FROM_HERE, |
178 SyncChange::ACTION_ADD, | 181 SyncChange::ACTION_ADD, |
179 CreateLocalSyncData(id, name, false, master_key, | 182 CreateLocalSyncData(id, name, false, master_key, |
180 chrome_avatar, std::string()))); | 183 chrome_avatar, std::string()))); |
181 SyncError error = | 184 SyncError error = |
182 sync_processor_->ProcessSyncChanges(FROM_HERE, change_list); | 185 sync_processor_->ProcessSyncChanges(FROM_HERE, change_list); |
183 DCHECK(!error.IsSet()) << error.ToString(); | 186 DCHECK(!error.IsSet()) << error.ToString(); |
184 } | 187 } |
185 | 188 |
186 void ManagedUserSyncService::DeleteManagedUser(const std::string& id) { | 189 void ManagedUserSyncService::DeleteManagedUser(const std::string& id) { |
| 190 DictionaryPrefUpdate update(prefs_, prefs::kManagedUsers); |
| 191 bool success = update->RemoveWithoutPathExpansion(id, NULL); |
| 192 DCHECK(success); |
| 193 |
187 if (!sync_processor_) | 194 if (!sync_processor_) |
188 return; | 195 return; |
189 | 196 |
190 SyncChangeList change_list; | 197 SyncChangeList change_list; |
191 change_list.push_back(SyncChange( | 198 change_list.push_back(SyncChange( |
192 FROM_HERE, | 199 FROM_HERE, |
193 SyncChange::ACTION_DELETE, | 200 SyncChange::ACTION_DELETE, |
194 SyncData::CreateLocalDelete(id, MANAGED_USERS))); | 201 SyncData::CreateLocalDelete(id, MANAGED_USERS))); |
195 SyncError sync_error = | 202 SyncError sync_error = |
196 sync_processor_->ProcessSyncChanges(FROM_HERE, change_list); | 203 sync_processor_->ProcessSyncChanges(FROM_HERE, change_list); |
197 DCHECK(!sync_error.IsSet()); | 204 DCHECK(!sync_error.IsSet()); |
198 } | 205 } |
199 | 206 |
200 const DictionaryValue* ManagedUserSyncService::GetManagedUsers() { | 207 const DictionaryValue* ManagedUserSyncService::GetManagedUsers() { |
201 DCHECK(sync_processor_); | 208 DCHECK(sync_processor_); |
202 return prefs_->GetDictionary(prefs::kManagedUsers); | 209 return prefs_->GetDictionary(prefs::kManagedUsers); |
203 } | 210 } |
204 | 211 |
| 212 bool ManagedUserSyncService::UpdateManagedUserAvatarIfNeeded( |
| 213 const std::string& id, |
| 214 int avatar_index) { |
| 215 DictionaryPrefUpdate update(prefs_, prefs::kManagedUsers); |
| 216 DictionaryValue* dict = update.Get(); |
| 217 DCHECK(dict->HasKey(id)); |
| 218 DictionaryValue* value = NULL; |
| 219 bool success = dict->GetDictionaryWithoutPathExpansion(id, &value); |
| 220 DCHECK(success); |
| 221 |
| 222 bool acknowledged = false; |
| 223 value->GetBoolean(ManagedUserSyncService::kAcknowledged, &acknowledged); |
| 224 std::string name; |
| 225 value->GetString(ManagedUserSyncService::kName, &name); |
| 226 std::string master_key; |
| 227 value->GetString(ManagedUserSyncService::kMasterKey, &master_key); |
| 228 // TODO(ibraaaa): this should be updated when avatar syncing for |
| 229 // supervised users is implemented on Chrome OS. |
| 230 std::string chromeos_avatar; |
| 231 value->GetString(ManagedUserSyncService::kChromeOsAvatar, &chromeos_avatar); |
| 232 std::string chrome_avatar; |
| 233 value->GetString(ManagedUserSyncService::kChromeAvatar, &chrome_avatar); |
| 234 if (!chrome_avatar.empty() && avatar_index != kNoAvatar) |
| 235 return false; |
| 236 |
| 237 chrome_avatar = avatar_index == kNoAvatar ? |
| 238 std::string() : BuildAvatarString(avatar_index); |
| 239 value->SetString(kChromeAvatar, chrome_avatar); |
| 240 |
| 241 if (!sync_processor_) |
| 242 return true; |
| 243 |
| 244 SyncChangeList change_list; |
| 245 change_list.push_back(SyncChange( |
| 246 FROM_HERE, |
| 247 SyncChange::ACTION_UPDATE, |
| 248 CreateLocalSyncData(id, name, acknowledged, master_key, |
| 249 chrome_avatar, chromeos_avatar))); |
| 250 SyncError error = |
| 251 sync_processor_->ProcessSyncChanges(FROM_HERE, change_list); |
| 252 DCHECK(!error.IsSet()) << error.ToString(); |
| 253 return true; |
| 254 } |
| 255 |
| 256 void ManagedUserSyncService::ClearManagedUserAvatar(const std::string& id) { |
| 257 bool cleared = UpdateManagedUserAvatarIfNeeded(id, kNoAvatar); |
| 258 DCHECK(cleared); |
| 259 } |
| 260 |
205 void ManagedUserSyncService::GetManagedUsersAsync( | 261 void ManagedUserSyncService::GetManagedUsersAsync( |
206 const ManagedUsersCallback& callback) { | 262 const ManagedUsersCallback& callback) { |
207 // If we are already syncing, just run the callback. | 263 // If we are already syncing, just run the callback. |
208 if (sync_processor_) { | 264 if (sync_processor_) { |
209 callback.Run(GetManagedUsers()); | 265 callback.Run(GetManagedUsers()); |
210 return; | 266 return; |
211 } | 267 } |
212 | 268 |
213 // Otherwise queue it up until we start syncing. | 269 // Otherwise queue it up until we start syncing. |
214 callbacks_.push_back(callback); | 270 callbacks_.push_back(callback); |
(...skipping 153 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
368 | 424 |
369 void ManagedUserSyncService::DispatchCallbacks() { | 425 void ManagedUserSyncService::DispatchCallbacks() { |
370 const DictionaryValue* managed_users = | 426 const DictionaryValue* managed_users = |
371 prefs_->GetDictionary(prefs::kManagedUsers); | 427 prefs_->GetDictionary(prefs::kManagedUsers); |
372 for (std::vector<ManagedUsersCallback>::iterator it = callbacks_.begin(); | 428 for (std::vector<ManagedUsersCallback>::iterator it = callbacks_.begin(); |
373 it != callbacks_.end(); ++it) { | 429 it != callbacks_.end(); ++it) { |
374 it->Run(managed_users); | 430 it->Run(managed_users); |
375 } | 431 } |
376 callbacks_.clear(); | 432 callbacks_.clear(); |
377 } | 433 } |
OLD | NEW |