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

Side by Side Diff: chrome/browser/supervised_user/legacy/supervised_user_registration_utility.cc

Issue 1165323004: We should use UserID object to identify users instead of username. Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 6 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 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_registration_uti lity.h" 5 #include "chrome/browser/supervised_user/legacy/supervised_user_registration_uti lity.h"
6 6
7 #include "base/base64.h" 7 #include "base/base64.h"
8 #include "base/bind.h" 8 #include "base/bind.h"
9 #include "base/command_line.h" 9 #include "base/command_line.h"
10 #include "base/memory/scoped_ptr.h" 10 #include "base/memory/scoped_ptr.h"
11 #include "base/prefs/pref_service.h" 11 #include "base/prefs/pref_service.h"
12 #include "base/rand_util.h" 12 #include "base/rand_util.h"
13 #include "base/strings/utf_string_conversions.h" 13 #include "base/strings/utf_string_conversions.h"
14 #include "chrome/browser/profiles/profile.h" 14 #include "chrome/browser/profiles/profile.h"
15 #include "chrome/browser/signin/chrome_signin_client_factory.h" 15 #include "chrome/browser/signin/chrome_signin_client_factory.h"
16 #include "chrome/browser/signin/profile_oauth2_token_service_factory.h" 16 #include "chrome/browser/signin/profile_oauth2_token_service_factory.h"
17 #include "chrome/browser/signin/signin_manager_factory.h" 17 #include "chrome/browser/signin/signin_manager_factory.h"
18 #include "chrome/browser/supervised_user/legacy/supervised_user_refresh_token_fe tcher.h" 18 #include "chrome/browser/supervised_user/legacy/supervised_user_refresh_token_fe tcher.h"
19 #include "chrome/browser/supervised_user/legacy/supervised_user_shared_settings_ service.h" 19 #include "chrome/browser/supervised_user/legacy/supervised_user_shared_settings_ service.h"
20 #include "chrome/browser/supervised_user/legacy/supervised_user_shared_settings_ service_factory.h" 20 #include "chrome/browser/supervised_user/legacy/supervised_user_shared_settings_ service_factory.h"
21 #include "chrome/browser/supervised_user/legacy/supervised_user_shared_settings_ update.h" 21 #include "chrome/browser/supervised_user/legacy/supervised_user_shared_settings_ update.h"
22 #include "chrome/browser/supervised_user/legacy/supervised_user_sync_service.h" 22 #include "chrome/browser/supervised_user/legacy/supervised_user_sync_service.h"
23 #include "chrome/browser/supervised_user/legacy/supervised_user_sync_service_fac tory.h" 23 #include "chrome/browser/supervised_user/legacy/supervised_user_sync_service_fac tory.h"
24 #include "chrome/browser/supervised_user/supervised_user_constants.h" 24 #include "chrome/browser/supervised_user/supervised_user_constants.h"
25 #include "chrome/common/chrome_switches.h" 25 #include "chrome/common/chrome_switches.h"
26 #include "chrome/common/pref_names.h" 26 #include "chrome/common/pref_names.h"
27 #include "components/signin/core/browser/profile_oauth2_token_service.h" 27 #include "components/signin/core/browser/profile_oauth2_token_service.h"
28 #include "components/signin/core/browser/signin_client.h" 28 #include "components/signin/core/browser/signin_client.h"
29 #include "components/signin/core/browser/signin_manager.h" 29 #include "components/signin/core/browser/signin_manager.h"
30 #include "components/user_manager/user_id.h"
30 #include "content/public/browser/browser_thread.h" 31 #include "content/public/browser/browser_thread.h"
31 #include "google_apis/gaia/gaia_urls.h" 32 #include "google_apis/gaia/gaia_urls.h"
32 #include "google_apis/gaia/google_service_auth_error.h" 33 #include "google_apis/gaia/google_service_auth_error.h"
33 #include "sync/util/get_session_name.h" 34 #include "sync/util/get_session_name.h"
34 35
35 using base::DictionaryValue; 36 using base::DictionaryValue;
36 37
37 namespace { 38 namespace {
38 39
39 SupervisedUserRegistrationUtility* g_instance_for_tests = NULL; 40 SupervisedUserRegistrationUtility* g_instance_for_tests = NULL;
(...skipping 12 matching lines...) Expand all
52 ~SupervisedUserRegistrationUtilityImpl() override; 53 ~SupervisedUserRegistrationUtilityImpl() override;
53 54
54 // Registers a new supervised user with the server. |supervised_user_id| is a 55 // Registers a new supervised user with the server. |supervised_user_id| is a
55 // new unique ID for the new supervised user. If its value is the same as that 56 // new unique ID for the new supervised user. If its value is the same as that
56 // of one of the existing supervised users, then the same user will be created 57 // of one of the existing supervised users, then the same user will be created
57 // on this machine (and if he has no avatar in sync, his avatar will be 58 // on this machine (and if he has no avatar in sync, his avatar will be
58 // updated). |info| contains necessary information like the display name of 59 // updated). |info| contains necessary information like the display name of
59 // the user and his avatar. |callback| is called with the result of the 60 // the user and his avatar. |callback| is called with the result of the
60 // registration. We use the info here and not the profile, because on Chrome 61 // registration. We use the info here and not the profile, because on Chrome
61 // OS the profile of the supervised user does not yet exist. 62 // OS the profile of the supervised user does not yet exist.
62 void Register(const std::string& supervised_user_id, 63 void Register(const user_manager::UserID& supervised_user_id,
63 const SupervisedUserRegistrationInfo& info, 64 const SupervisedUserRegistrationInfo& info,
64 const RegistrationCallback& callback) override; 65 const RegistrationCallback& callback) override;
65 66
66 // SupervisedUserSyncServiceObserver: 67 // SupervisedUserSyncServiceObserver:
67 void OnSupervisedUserAcknowledged( 68 void OnSupervisedUserAcknowledged(
68 const std::string& supervised_user_id) override; 69 const user_manager::UserID& supervised_user_id) override;
69 void OnSupervisedUsersSyncingStopped() override; 70 void OnSupervisedUsersSyncingStopped() override;
70 void OnSupervisedUsersChanged() override; 71 void OnSupervisedUsersChanged() override;
71 72
72 private: 73 private:
73 // Fetches the supervised user token when we have the device name. 74 // Fetches the supervised user token when we have the device name.
74 void FetchToken(const std::string& client_name); 75 void FetchToken(const std::string& client_name);
75 76
76 // Called when we have received a token for the supervised user. 77 // Called when we have received a token for the supervised user.
77 void OnReceivedToken(const GoogleServiceAuthError& error, 78 void OnReceivedToken(const GoogleServiceAuthError& error,
78 const std::string& token); 79 const std::string& token);
(...skipping 22 matching lines...) Expand all
101 102
102 PrefService* prefs_; 103 PrefService* prefs_;
103 scoped_ptr<SupervisedUserRefreshTokenFetcher> token_fetcher_; 104 scoped_ptr<SupervisedUserRefreshTokenFetcher> token_fetcher_;
104 105
105 // A |KeyedService| owned by the custodian profile. 106 // A |KeyedService| owned by the custodian profile.
106 SupervisedUserSyncService* supervised_user_sync_service_; 107 SupervisedUserSyncService* supervised_user_sync_service_;
107 108
108 // A |KeyedService| owned by the custodian profile. 109 // A |KeyedService| owned by the custodian profile.
109 SupervisedUserSharedSettingsService* supervised_user_shared_settings_service_; 110 SupervisedUserSharedSettingsService* supervised_user_shared_settings_service_;
110 111
111 std::string pending_supervised_user_id_; 112 user_manager::UserID pending_supervised_user_id_;
112 std::string pending_supervised_user_token_; 113 std::string pending_supervised_user_token_;
113 bool pending_supervised_user_acknowledged_; 114 bool pending_supervised_user_acknowledged_;
114 bool is_existing_supervised_user_; 115 bool is_existing_supervised_user_;
115 bool avatar_updated_; 116 bool avatar_updated_;
116 RegistrationCallback callback_; 117 RegistrationCallback callback_;
117 scoped_ptr<SupervisedUserSharedSettingsUpdate> password_update_; 118 scoped_ptr<SupervisedUserSharedSettingsUpdate> password_update_;
118 119
119 base::WeakPtrFactory<SupervisedUserRegistrationUtilityImpl> weak_ptr_factory_; 120 base::WeakPtrFactory<SupervisedUserRegistrationUtilityImpl> weak_ptr_factory_;
120 121
121 DISALLOW_COPY_AND_ASSIGN(SupervisedUserRegistrationUtilityImpl); 122 DISALLOW_COPY_AND_ASSIGN(SupervisedUserRegistrationUtilityImpl);
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
171 SupervisedUserSharedSettingsService* supervised_user_shared_settings_service = 172 SupervisedUserSharedSettingsService* supervised_user_shared_settings_service =
172 SupervisedUserSharedSettingsServiceFactory::GetForBrowserContext(profile); 173 SupervisedUserSharedSettingsServiceFactory::GetForBrowserContext(profile);
173 return make_scoped_ptr(SupervisedUserRegistrationUtility::CreateImpl( 174 return make_scoped_ptr(SupervisedUserRegistrationUtility::CreateImpl(
174 profile->GetPrefs(), 175 profile->GetPrefs(),
175 token_fetcher.Pass(), 176 token_fetcher.Pass(),
176 supervised_user_sync_service, 177 supervised_user_sync_service,
177 supervised_user_shared_settings_service)); 178 supervised_user_shared_settings_service));
178 } 179 }
179 180
180 // static 181 // static
181 std::string SupervisedUserRegistrationUtility::GenerateNewSupervisedUserId() { 182 user_manager::UserID SupervisedUserRegistrationUtility::GenerateNewSupervisedUse rId() {
182 std::string new_supervised_user_id; 183 std::string new_supervised_user_id_str;
183 base::Base64Encode(base::RandBytesAsString(8), &new_supervised_user_id); 184 base::Base64Encode(base::RandBytesAsString(8), &new_supervised_user_id_str);
184 return new_supervised_user_id; 185 return user_manager::UserID::FromUserEmail(new_supervised_user_id_str);
185 } 186 }
186 187
187 // static 188 // static
188 void SupervisedUserRegistrationUtility::SetUtilityForTests( 189 void SupervisedUserRegistrationUtility::SetUtilityForTests(
189 SupervisedUserRegistrationUtility* utility) { 190 SupervisedUserRegistrationUtility* utility) {
190 if (g_instance_for_tests) 191 if (g_instance_for_tests)
191 delete g_instance_for_tests; 192 delete g_instance_for_tests;
192 g_instance_for_tests = utility; 193 g_instance_for_tests = utility;
193 } 194 }
194 195
(...skipping 14 matching lines...) Expand all
209 210
210 SupervisedUserRegistrationUtilityImpl::SupervisedUserRegistrationUtilityImpl( 211 SupervisedUserRegistrationUtilityImpl::SupervisedUserRegistrationUtilityImpl(
211 PrefService* prefs, 212 PrefService* prefs,
212 scoped_ptr<SupervisedUserRefreshTokenFetcher> token_fetcher, 213 scoped_ptr<SupervisedUserRefreshTokenFetcher> token_fetcher,
213 SupervisedUserSyncService* service, 214 SupervisedUserSyncService* service,
214 SupervisedUserSharedSettingsService* shared_settings_service) 215 SupervisedUserSharedSettingsService* shared_settings_service)
215 : prefs_(prefs), 216 : prefs_(prefs),
216 token_fetcher_(token_fetcher.Pass()), 217 token_fetcher_(token_fetcher.Pass()),
217 supervised_user_sync_service_(service), 218 supervised_user_sync_service_(service),
218 supervised_user_shared_settings_service_(shared_settings_service), 219 supervised_user_shared_settings_service_(shared_settings_service),
220 pending_supervised_user_id_(std::string(), std::string()),
219 pending_supervised_user_acknowledged_(false), 221 pending_supervised_user_acknowledged_(false),
220 is_existing_supervised_user_(false), 222 is_existing_supervised_user_(false),
221 avatar_updated_(false), 223 avatar_updated_(false),
222 weak_ptr_factory_(this) { 224 weak_ptr_factory_(this) {
223 supervised_user_sync_service_->AddObserver(this); 225 supervised_user_sync_service_->AddObserver(this);
224 } 226 }
225 227
226 SupervisedUserRegistrationUtilityImpl:: 228 SupervisedUserRegistrationUtilityImpl::
227 ~SupervisedUserRegistrationUtilityImpl() { 229 ~SupervisedUserRegistrationUtilityImpl() {
228 supervised_user_sync_service_->RemoveObserver(this); 230 supervised_user_sync_service_->RemoveObserver(this);
229 CancelPendingRegistration(); 231 CancelPendingRegistration();
230 } 232 }
231 233
232 void SupervisedUserRegistrationUtilityImpl::Register( 234 void SupervisedUserRegistrationUtilityImpl::Register(
233 const std::string& supervised_user_id, 235 const user_manager::UserID& supervised_user_id,
234 const SupervisedUserRegistrationInfo& info, 236 const SupervisedUserRegistrationInfo& info,
235 const RegistrationCallback& callback) { 237 const RegistrationCallback& callback) {
236 DCHECK(pending_supervised_user_id_.empty()); 238 DCHECK(pending_supervised_user_id_.empty());
237 callback_ = callback; 239 callback_ = callback;
238 pending_supervised_user_id_ = supervised_user_id; 240 pending_supervised_user_id_ = supervised_user_id;
239 241
240 bool need_password_update = !info.password_data.empty(); 242 bool need_password_update = !info.password_data.empty();
241 const base::DictionaryValue* dict = 243 const base::DictionaryValue* dict =
242 prefs_->GetDictionary(prefs::kSupervisedUsers); 244 prefs_->GetDictionary(prefs::kSupervisedUsers);
243 is_existing_supervised_user_ = dict->HasKey(supervised_user_id); 245 is_existing_supervised_user_ = dict->HasKey(supervised_user_id.GetUserEmail()) ;
244 if (!is_existing_supervised_user_) { 246 if (!is_existing_supervised_user_) {
245 supervised_user_sync_service_->AddSupervisedUser( 247 supervised_user_sync_service_->AddSupervisedUser(
246 pending_supervised_user_id_, 248 pending_supervised_user_id_,
247 base::UTF16ToUTF8(info.name), 249 base::UTF16ToUTF8(info.name),
248 info.master_key, 250 info.master_key,
249 info.password_signature_key, 251 info.password_signature_key,
250 info.password_encryption_key, 252 info.password_encryption_key,
251 info.avatar_index); 253 info.avatar_index);
252 } else { 254 } else {
253 const base::DictionaryValue* value = NULL; 255 const base::DictionaryValue* value = NULL;
254 bool success = 256 bool success =
255 dict->GetDictionaryWithoutPathExpansion(supervised_user_id, &value); 257 dict->GetDictionaryWithoutPathExpansion(supervised_user_id.GetUserEmail( ), &value);
256 DCHECK(success); 258 DCHECK(success);
257 std::string key; 259 std::string key;
258 bool need_keys = !info.password_signature_key.empty() || 260 bool need_keys = !info.password_signature_key.empty() ||
259 !info.password_encryption_key.empty(); 261 !info.password_encryption_key.empty();
260 bool have_keys = 262 bool have_keys =
261 value->GetString(SupervisedUserSyncService::kPasswordSignatureKey, 263 value->GetString(SupervisedUserSyncService::kPasswordSignatureKey,
262 &key) && 264 &key) &&
263 !key.empty() && 265 !key.empty() &&
264 value->GetString(SupervisedUserSyncService::kPasswordEncryptionKey, 266 value->GetString(SupervisedUserSyncService::kPasswordEncryptionKey,
265 &key) && 267 &key) &&
(...skipping 18 matching lines...) Expand all
284 supervised_user_sync_service_->UpdateSupervisedUserAvatarIfNeeded( 286 supervised_user_sync_service_->UpdateSupervisedUserAvatarIfNeeded(
285 supervised_user_id, 287 supervised_user_id,
286 info.avatar_index); 288 info.avatar_index);
287 } 289 }
288 #if defined(OS_CHROMEOS) 290 #if defined(OS_CHROMEOS)
289 const char* kAvatarKey = supervised_users::kChromeOSAvatarIndex; 291 const char* kAvatarKey = supervised_users::kChromeOSAvatarIndex;
290 #else 292 #else
291 const char* kAvatarKey = supervised_users::kChromeAvatarIndex; 293 const char* kAvatarKey = supervised_users::kChromeAvatarIndex;
292 #endif 294 #endif
293 supervised_user_shared_settings_service_->SetValue( 295 supervised_user_shared_settings_service_->SetValue(
294 pending_supervised_user_id_, kAvatarKey, 296 pending_supervised_user_id_.GetUserEmail(), kAvatarKey,
295 base::FundamentalValue(info.avatar_index)); 297 base::FundamentalValue(info.avatar_index));
296 if (need_password_update) { 298 if (need_password_update) {
297 password_update_.reset(new SupervisedUserSharedSettingsUpdate( 299 password_update_.reset(new SupervisedUserSharedSettingsUpdate(
298 supervised_user_shared_settings_service_, 300 supervised_user_shared_settings_service_,
299 pending_supervised_user_id_, 301 pending_supervised_user_id_.GetUserEmail(),
300 supervised_users::kChromeOSPasswordData, 302 supervised_users::kChromeOSPasswordData,
301 scoped_ptr<base::Value>(info.password_data.DeepCopy()), 303 scoped_ptr<base::Value>(info.password_data.DeepCopy()),
302 base::Bind( 304 base::Bind(
303 &SupervisedUserRegistrationUtilityImpl:: 305 &SupervisedUserRegistrationUtilityImpl::
304 OnPasswordChangeAcknowledged, 306 OnPasswordChangeAcknowledged,
305 weak_ptr_factory_.GetWeakPtr()))); 307 weak_ptr_factory_.GetWeakPtr())));
306 } 308 }
307 309
308 syncer::GetSessionName( 310 syncer::GetSessionName(
309 content::BrowserThread::GetBlockingPool() 311 content::BrowserThread::GetBlockingPool()
310 ->GetTaskRunnerWithShutdownBehavior( 312 ->GetTaskRunnerWithShutdownBehavior(
311 base::SequencedWorkerPool::CONTINUE_ON_SHUTDOWN).get(), 313 base::SequencedWorkerPool::CONTINUE_ON_SHUTDOWN).get(),
312 base::Bind(&SupervisedUserRegistrationUtilityImpl::FetchToken, 314 base::Bind(&SupervisedUserRegistrationUtilityImpl::FetchToken,
313 weak_ptr_factory_.GetWeakPtr())); 315 weak_ptr_factory_.GetWeakPtr()));
314 } 316 }
315 317
316 void SupervisedUserRegistrationUtilityImpl::CancelPendingRegistration() { 318 void SupervisedUserRegistrationUtilityImpl::CancelPendingRegistration() {
317 AbortPendingRegistration( 319 AbortPendingRegistration(
318 false, // Don't run the callback. The error will be ignored. 320 false, // Don't run the callback. The error will be ignored.
319 GoogleServiceAuthError(GoogleServiceAuthError::NONE)); 321 GoogleServiceAuthError(GoogleServiceAuthError::NONE));
320 } 322 }
321 323
322 void SupervisedUserRegistrationUtilityImpl::OnSupervisedUserAcknowledged( 324 void SupervisedUserRegistrationUtilityImpl::OnSupervisedUserAcknowledged(
323 const std::string& supervised_user_id) { 325 const user_manager::UserID& supervised_user_id) {
324 DCHECK_EQ(pending_supervised_user_id_, supervised_user_id); 326 DCHECK(pending_supervised_user_id_ == supervised_user_id);
325 DCHECK(!pending_supervised_user_acknowledged_); 327 DCHECK(!pending_supervised_user_acknowledged_);
326 pending_supervised_user_acknowledged_ = true; 328 pending_supervised_user_acknowledged_ = true;
327 CompleteRegistrationIfReady(); 329 CompleteRegistrationIfReady();
328 } 330 }
329 331
330 void SupervisedUserRegistrationUtilityImpl::OnPasswordChangeAcknowledged( 332 void SupervisedUserRegistrationUtilityImpl::OnPasswordChangeAcknowledged(
331 bool success) { 333 bool success) {
332 DCHECK(password_update_); 334 DCHECK(password_update_);
333 DCHECK(success); 335 DCHECK(success);
334 password_update_.reset(); 336 password_update_.reset();
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after
410 pending_supervised_user_id_); 412 pending_supervised_user_id_);
411 } 413 }
412 } 414 }
413 415
414 if (run_callback) 416 if (run_callback)
415 callback_.Run(error, pending_supervised_user_token_); 417 callback_.Run(error, pending_supervised_user_token_);
416 callback_.Reset(); 418 callback_.Reset();
417 } 419 }
418 420
419 } // namespace 421 } // namespace
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698