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

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

Issue 23523038: Display supervised users synced avatars in the import overlay (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@avatar_sync_2
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/stringprintf.h" 10 #include "base/strings/stringprintf.h"
10 #include "base/values.h" 11 #include "base/values.h"
11 #include "chrome/browser/prefs/scoped_user_pref_update.h" 12 #include "chrome/browser/prefs/scoped_user_pref_update.h"
12 #include "chrome/browser/profiles/profile.h" 13 #include "chrome/browser/profiles/profile.h"
13 #include "chrome/common/pref_names.h" 14 #include "chrome/common/pref_names.h"
14 #include "components/user_prefs/pref_registry_syncable.h" 15 #include "components/user_prefs/pref_registry_syncable.h"
15 #include "sync/api/sync_change.h" 16 #include "sync/api/sync_change.h"
16 #include "sync/api/sync_data.h" 17 #include "sync/api/sync_data.h"
17 #include "sync/api/sync_error.h" 18 #include "sync/api/sync_error.h"
18 #include "sync/api/sync_error_factory.h" 19 #include "sync/api/sync_error_factory.h"
19 #include "sync/api/sync_merge_result.h" 20 #include "sync/api/sync_merge_result.h"
20 #include "sync/protocol/sync.pb.h" 21 #include "sync/protocol/sync.pb.h"
21 22
22 using base::DictionaryValue; 23 using base::DictionaryValue;
23 using user_prefs::PrefRegistrySyncable; 24 using user_prefs::PrefRegistrySyncable;
24 using syncer::MANAGED_USERS; 25 using syncer::MANAGED_USERS;
25 using syncer::ModelType; 26 using syncer::ModelType;
26 using syncer::SyncChange; 27 using syncer::SyncChange;
27 using syncer::SyncChangeList; 28 using syncer::SyncChangeList;
28 using syncer::SyncChangeProcessor; 29 using syncer::SyncChangeProcessor;
29 using syncer::SyncData; 30 using syncer::SyncData;
30 using syncer::SyncDataList; 31 using syncer::SyncDataList;
31 using syncer::SyncError; 32 using syncer::SyncError;
32 using syncer::SyncErrorFactory; 33 using syncer::SyncErrorFactory;
33 using syncer::SyncMergeResult; 34 using syncer::SyncMergeResult;
34 using sync_pb::ManagedUserSpecifics; 35 using sync_pb::ManagedUserSpecifics;
35 36
36 namespace { 37 namespace {
37 38
38 const char kAcknowledged[] = "acknowledged"; 39 const char kChromeAvatarPrefix[] = "chrome-avatar-index:";
39 const char kChromeAvatar[] = "chromeAvatar";
40 const char kChromeOsAvatar[] = "chromeOsAvatar";
41 const char kName[] = "name";
42 const char kMasterKey[] = "masterKey";
43 40
44 SyncData CreateLocalSyncData(const std::string& id, 41 SyncData CreateLocalSyncData(const std::string& id,
45 const std::string& name, 42 const std::string& name,
46 bool acknowledged, 43 bool acknowledged,
47 const std::string& master_key, 44 const std::string& master_key,
48 const std::string& chrome_avatar, 45 const std::string& chrome_avatar,
49 const std::string& chromeos_avatar) { 46 const std::string& chromeos_avatar) {
50 ::sync_pb::EntitySpecifics specifics; 47 ::sync_pb::EntitySpecifics specifics;
51 specifics.mutable_managed_user()->set_id(id); 48 specifics.mutable_managed_user()->set_id(id);
52 specifics.mutable_managed_user()->set_name(name); 49 specifics.mutable_managed_user()->set_name(name);
53 if (!chrome_avatar.empty()) 50 if (!chrome_avatar.empty())
54 specifics.mutable_managed_user()->set_chrome_avatar(chrome_avatar); 51 specifics.mutable_managed_user()->set_chrome_avatar(chrome_avatar);
55 if (!chromeos_avatar.empty()) 52 if (!chromeos_avatar.empty())
56 specifics.mutable_managed_user()->set_chromeos_avatar(chromeos_avatar); 53 specifics.mutable_managed_user()->set_chromeos_avatar(chromeos_avatar);
57 if (!master_key.empty()) 54 if (!master_key.empty())
58 specifics.mutable_managed_user()->set_master_key(master_key); 55 specifics.mutable_managed_user()->set_master_key(master_key);
59 if (acknowledged) 56 if (acknowledged)
60 specifics.mutable_managed_user()->set_acknowledged(true); 57 specifics.mutable_managed_user()->set_acknowledged(true);
61 return SyncData::CreateLocalData(id, name, specifics); 58 return SyncData::CreateLocalData(id, name, specifics);
62 } 59 }
63 60
64 SyncData CreateSyncDataFromDictionaryEntry( 61 SyncData CreateSyncDataFromDictionaryEntry(
65 const DictionaryValue::Iterator& it) { 62 const DictionaryValue::Iterator& it) {
66 const DictionaryValue* dict = NULL; 63 const DictionaryValue* dict = NULL;
67 bool success = it.value().GetAsDictionary(&dict); 64 bool success = it.value().GetAsDictionary(&dict);
68 DCHECK(success); 65 DCHECK(success);
69 bool acknowledged = false; 66 bool acknowledged = false;
70 dict->GetBoolean(kAcknowledged, &acknowledged); 67 dict->GetBoolean(ManagedUserSyncService::kAcknowledged, &acknowledged);
71 std::string name; 68 std::string name;
72 dict->GetString(kName, &name); 69 dict->GetString(ManagedUserSyncService::kName, &name);
73 DCHECK(!name.empty()); 70 DCHECK(!name.empty());
74 std::string master_key; 71 std::string master_key;
75 dict->GetString(kMasterKey, &master_key); 72 dict->GetString(ManagedUserSyncService::kMasterKey, &master_key);
76 std::string chrome_avatar; 73 std::string chrome_avatar;
77 dict->GetString(kChromeAvatar, &chrome_avatar); 74 dict->GetString(ManagedUserSyncService::kChromeAvatar, &chrome_avatar);
78 std::string chromeos_avatar; 75 std::string chromeos_avatar;
79 dict->GetString(kChromeOsAvatar, &chromeos_avatar); 76 dict->GetString(ManagedUserSyncService::kChromeOsAvatar, &chromeos_avatar);
80 77
81 return CreateLocalSyncData(it.key(), name, acknowledged, master_key, 78 return CreateLocalSyncData(it.key(), name, acknowledged, master_key,
82 chrome_avatar, chromeos_avatar); 79 chrome_avatar, chromeos_avatar);
83 } 80 }
84 81
85 } // namespace 82 } // namespace
86 83
84 const char ManagedUserSyncService::kAcknowledged[] = "acknowledged";
85 const char ManagedUserSyncService::kChromeAvatar[] = "chromeAvatar";
86 const char ManagedUserSyncService::kChromeOsAvatar[] = "chromeOsAvatar";
87 const char ManagedUserSyncService::kName[] = "name";
88 const char ManagedUserSyncService::kMasterKey[] = "masterKey";
89
87 ManagedUserSyncService::ManagedUserSyncService(PrefService* prefs) 90 ManagedUserSyncService::ManagedUserSyncService(PrefService* prefs)
88 : prefs_(prefs) { 91 : prefs_(prefs) {
89 pref_change_registrar_.Init(prefs_); 92 pref_change_registrar_.Init(prefs_);
90 pref_change_registrar_.Add( 93 pref_change_registrar_.Add(
91 prefs::kGoogleServicesLastUsername, 94 prefs::kGoogleServicesLastUsername,
92 base::Bind(&ManagedUserSyncService::OnLastSignedInUsernameChange, 95 base::Bind(&ManagedUserSyncService::OnLastSignedInUsernameChange,
93 base::Unretained(this))); 96 base::Unretained(this)));
94 } 97 }
95 98
96 ManagedUserSyncService::~ManagedUserSyncService() { 99 ManagedUserSyncService::~ManagedUserSyncService() {
97 } 100 }
98 101
99 // static 102 // static
100 void ManagedUserSyncService::RegisterProfilePrefs( 103 void ManagedUserSyncService::RegisterProfilePrefs(
101 PrefRegistrySyncable* registry) { 104 PrefRegistrySyncable* registry) {
102 registry->RegisterDictionaryPref(prefs::kManagedUsers, 105 registry->RegisterDictionaryPref(prefs::kManagedUsers,
103 PrefRegistrySyncable::UNSYNCABLE_PREF); 106 PrefRegistrySyncable::UNSYNCABLE_PREF);
104 } 107 }
105 108
109 // static
110 bool ManagedUserSyncService::GetAvatarIndex(const std::string& avatar_str,
111 int* avatar_index) {
112 // TODO(ibraaaa): when chrome OS supports supervised users avatar syncing
113 // then update this method to support extracting the avatar index
114 // for chrome OS as well.
115 DCHECK(avatar_index);
116 if (avatar_str.empty()) {
117 *avatar_index = -1;
118 return true;
119 }
120
121 size_t prefix_len = strlen(kChromeAvatarPrefix);
122 if (avatar_str.size() <= prefix_len ||
123 avatar_str.substr(0, prefix_len) != kChromeAvatarPrefix) {
124 return false;
125 }
126
127 return base::StringToInt(avatar_str.substr(prefix_len), avatar_index);
128 }
129
130 // static
131 std::string ManagedUserSyncService::BuildAvatarString(int avatar_index) {
132 return base::StringPrintf("%s%d", kChromeAvatarPrefix, avatar_index);
133 }
134
106 void ManagedUserSyncService::AddObserver( 135 void ManagedUserSyncService::AddObserver(
107 ManagedUserSyncServiceObserver* observer) { 136 ManagedUserSyncServiceObserver* observer) {
108 observers_.AddObserver(observer); 137 observers_.AddObserver(observer);
109 } 138 }
110 139
111 void ManagedUserSyncService::RemoveObserver( 140 void ManagedUserSyncService::RemoveObserver(
112 ManagedUserSyncServiceObserver* observer) { 141 ManagedUserSyncServiceObserver* observer) {
113 observers_.RemoveObserver(observer); 142 observers_.RemoveObserver(observer);
114 } 143 }
115 144
116 void ManagedUserSyncService::AddManagedUser(const std::string& id, 145 void ManagedUserSyncService::AddManagedUser(const std::string& id,
117 const std::string& name, 146 const std::string& name,
118 const std::string& master_key, 147 const std::string& master_key,
119 int avatar_index) { 148 int avatar_index) {
120 DictionaryPrefUpdate update(prefs_, prefs::kManagedUsers); 149 DictionaryPrefUpdate update(prefs_, prefs::kManagedUsers);
121 DictionaryValue* dict = update.Get(); 150 DictionaryValue* dict = update.Get();
122 DictionaryValue* value = new DictionaryValue; 151 DictionaryValue* value = new DictionaryValue;
123 value->SetString(kName, name); 152 value->SetString(kName, name);
124 value->SetString(kMasterKey, master_key); 153 value->SetString(kMasterKey, master_key);
125 std::string chrome_avatar; 154 std::string chrome_avatar;
126 #if defined(CHROME_OS) 155 #if defined(CHROME_OS)
127 // This is a dummy value that is passed when a supervised user is created on 156 // This is a dummy value that is passed when a supervised user is created on
128 // Chrome OS. 157 // Chrome OS.
129 // TODO(ibraaaa): update this to use the correct avatar index 158 // TODO(ibraaaa): update this to use the correct avatar index
130 // once avatar syncing for supervised users is implemented on Chrome OS. 159 // once avatar syncing for supervised users is implemented on Chrome OS.
131 DCHECK_EQ(avatar_index, -111); 160 DCHECK_EQ(avatar_index, -111);
132 #else 161 #else
133 chrome_avatar = base::StringPrintf("chrome-avatar-index:%d", avatar_index); 162 chrome_avatar = BuildAvatarString(avatar_index);
134 #endif 163 #endif
135 value->SetString(kChromeAvatar, chrome_avatar); 164 value->SetString(kChromeAvatar, chrome_avatar);
136 // TODO(ibraaaa): this should be updated to allow supervised 165 // TODO(ibraaaa): this should be updated to allow supervised
137 // users avatar syncing on Chrome OS. 166 // users avatar syncing on Chrome OS.
138 value->SetString(kChromeOsAvatar, std::string()); 167 value->SetString(kChromeOsAvatar, std::string());
139 DCHECK(!dict->HasKey(id)); 168 DCHECK(!dict->HasKey(id));
140 dict->SetWithoutPathExpansion(id, value); 169 dict->SetWithoutPathExpansion(id, value);
141 170
142 if (!sync_processor_) 171 if (!sync_processor_)
143 return; 172 return;
(...skipping 195 matching lines...) Expand 10 before | Expand all | Expand 10 after
339 368
340 void ManagedUserSyncService::DispatchCallbacks() { 369 void ManagedUserSyncService::DispatchCallbacks() {
341 const DictionaryValue* managed_users = 370 const DictionaryValue* managed_users =
342 prefs_->GetDictionary(prefs::kManagedUsers); 371 prefs_->GetDictionary(prefs::kManagedUsers);
343 for (std::vector<ManagedUsersCallback>::iterator it = callbacks_.begin(); 372 for (std::vector<ManagedUsersCallback>::iterator it = callbacks_.begin();
344 it != callbacks_.end(); ++it) { 373 it != callbacks_.end(); ++it) {
345 it->Run(managed_users); 374 it->Run(managed_users);
346 } 375 }
347 callbacks_.clear(); 376 callbacks_.clear();
348 } 377 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698