Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(76)

Side by Side Diff: chrome/browser/managed_mode/managed_user_sync_service.cc

Issue 23691045: Update managed user registration to allow updating the avatar (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: bauerb@+ Created 7 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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
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
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
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
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 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698