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

Side by Side Diff: chrome/browser/chromeos/login/users/avatar/user_image_manager_impl.cc

Issue 398753004: [cros] Move User class to user_manager component. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rebase Created 6 years, 5 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 | Annotate | Revision Log
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/chromeos/login/users/avatar/user_image_manager_impl.h" 5 #include "chrome/browser/chromeos/login/users/avatar/user_image_manager_impl.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/debug/trace_event.h" 8 #include "base/debug/trace_event.h"
9 #include "base/file_util.h" 9 #include "base/file_util.h"
10 #include "base/files/file_path.h" 10 #include "base/files/file_path.h"
(...skipping 17 matching lines...) Expand all
28 #include "chrome/browser/chromeos/login/users/user_manager.h" 28 #include "chrome/browser/chromeos/login/users/user_manager.h"
29 #include "chrome/browser/chromeos/profiles/profile_helper.h" 29 #include "chrome/browser/chromeos/profiles/profile_helper.h"
30 #include "chrome/browser/profiles/profile_downloader.h" 30 #include "chrome/browser/profiles/profile_downloader.h"
31 #include "chrome/browser/profiles/profile_manager.h" 31 #include "chrome/browser/profiles/profile_manager.h"
32 #include "chrome/common/chrome_paths.h" 32 #include "chrome/common/chrome_paths.h"
33 #include "components/user_manager/user_image/default_user_images.h" 33 #include "components/user_manager/user_image/default_user_images.h"
34 #include "components/user_manager/user_image/user_image.h" 34 #include "components/user_manager/user_image/user_image.h"
35 #include "components/user_manager/user_type.h" 35 #include "components/user_manager/user_type.h"
36 #include "content/public/browser/browser_thread.h" 36 #include "content/public/browser/browser_thread.h"
37 #include "content/public/browser/notification_service.h" 37 #include "content/public/browser/notification_service.h"
38 #include "grit/theme_resources.h"
38 #include "policy/policy_constants.h" 39 #include "policy/policy_constants.h"
40 #include "ui/base/resource/resource_bundle.h"
39 #include "ui/gfx/image/image_skia.h" 41 #include "ui/gfx/image/image_skia.h"
40 42
41 namespace chromeos { 43 namespace chromeos {
42 44
43 namespace { 45 namespace {
44 46
45 // A dictionary that maps user_ids to old user image data with images stored in 47 // A dictionary that maps user_ids to old user image data with images stored in
46 // PNG format. Deprecated. 48 // PNG format. Deprecated.
47 // TODO(ivankr): remove this const char after migration is gone. 49 // TODO(ivankr): remove this const char after migration is gone.
48 const char kUserImages[] = "UserImages"; 50 const char kUserImages[] = "UserImages";
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after
138 histogram_name, min_time, max_time, bucket_count, 140 histogram_name, min_time, max_time, bucket_count,
139 base::HistogramBase::kUmaTargetedHistogramFlag); 141 base::HistogramBase::kUmaTargetedHistogramFlag);
140 counter->AddTime(time_delta); 142 counter->AddTime(time_delta);
141 143
142 DVLOG(1) << "Profile image download time: " << time_delta.InSecondsF(); 144 DVLOG(1) << "Profile image download time: " << time_delta.InSecondsF();
143 } 145 }
144 146
145 // Converts |image_index| to UMA histogram value. 147 // Converts |image_index| to UMA histogram value.
146 int ImageIndexToHistogramIndex(int image_index) { 148 int ImageIndexToHistogramIndex(int image_index) {
147 switch (image_index) { 149 switch (image_index) {
148 case User::kExternalImageIndex: 150 case user_manager::User::USER_IMAGE_EXTERNAL:
149 // TODO(ivankr): Distinguish this from selected from file. 151 // TODO(ivankr): Distinguish this from selected from file.
150 return user_manager::kHistogramImageFromCamera; 152 return user_manager::kHistogramImageFromCamera;
151 case User::kProfileImageIndex: 153 case user_manager::User::USER_IMAGE_PROFILE:
152 return user_manager::kHistogramImageFromProfile; 154 return user_manager::kHistogramImageFromProfile;
153 default: 155 default:
154 return image_index; 156 return image_index;
155 } 157 }
156 } 158 }
157 159
158 bool SaveImage(const user_manager::UserImage& user_image, 160 bool SaveImage(const user_manager::UserImage& user_image,
159 const base::FilePath& image_path) { 161 const base::FilePath& image_path) {
160 user_manager::UserImage safe_image; 162 user_manager::UserImage safe_image;
161 const user_manager::UserImage::RawImage* encoded_image = NULL; 163 const user_manager::UserImage::RawImage* encoded_image = NULL;
(...skipping 136 matching lines...) Expand 10 before | Expand all | Expand 10 after
298 image_index_ = image_index; 300 image_index_ = image_index;
299 image_url_ = image_url; 301 image_url_ = image_url;
300 image_path_ = image_path; 302 image_path_ = image_path;
301 303
302 if (image_index_ >= 0 && image_index_ < user_manager::kDefaultImagesCount) { 304 if (image_index_ >= 0 && image_index_ < user_manager::kDefaultImagesCount) {
303 // Load one of the default images. This happens synchronously. 305 // Load one of the default images. This happens synchronously.
304 user_image_ = 306 user_image_ =
305 user_manager::UserImage(user_manager::GetDefaultImage(image_index_)); 307 user_manager::UserImage(user_manager::GetDefaultImage(image_index_));
306 UpdateUser(); 308 UpdateUser();
307 NotifyJobDone(); 309 NotifyJobDone();
308 } else if (image_index_ == User::kExternalImageIndex || 310 } else if (image_index_ == user_manager::User::USER_IMAGE_EXTERNAL ||
309 image_index_ == User::kProfileImageIndex) { 311 image_index_ == user_manager::User::USER_IMAGE_PROFILE) {
310 // Load the user image from a file referenced by |image_path|. This happens 312 // Load the user image from a file referenced by |image_path|. This happens
311 // asynchronously. The JPEG image loader can be used here because 313 // asynchronously. The JPEG image loader can be used here because
312 // LoadImage() is called only for users whose user image has previously 314 // LoadImage() is called only for users whose user image has previously
313 // been set by one of the Set*() methods, which transcode to JPEG format. 315 // been set by one of the Set*() methods, which transcode to JPEG format.
314 DCHECK(!image_path_.empty()); 316 DCHECK(!image_path_.empty());
315 parent_->image_loader_->Start(image_path_.value(), 317 parent_->image_loader_->Start(image_path_.value(),
316 0, 318 0,
317 base::Bind(&Job::OnLoadImageDone, 319 base::Bind(&Job::OnLoadImageDone,
318 weak_factory_.GetWeakPtr(), 320 weak_factory_.GetWeakPtr(),
319 false)); 321 false));
(...skipping 18 matching lines...) Expand all
338 UpdateLocalState(); 340 UpdateLocalState();
339 NotifyJobDone(); 341 NotifyJobDone();
340 } 342 }
341 343
342 void UserImageManagerImpl::Job::SetToImage( 344 void UserImageManagerImpl::Job::SetToImage(
343 int image_index, 345 int image_index,
344 const user_manager::UserImage& user_image) { 346 const user_manager::UserImage& user_image) {
345 DCHECK(!run_); 347 DCHECK(!run_);
346 run_ = true; 348 run_ = true;
347 349
348 DCHECK(image_index == User::kExternalImageIndex || 350 DCHECK(image_index == user_manager::User::USER_IMAGE_EXTERNAL ||
349 image_index == User::kProfileImageIndex); 351 image_index == user_manager::User::USER_IMAGE_PROFILE);
350 352
351 image_index_ = image_index; 353 image_index_ = image_index;
352 user_image_ = user_image; 354 user_image_ = user_image;
353 355
354 UpdateUser(); 356 UpdateUser();
355 SaveImageAndUpdateLocalState(); 357 SaveImageAndUpdateLocalState();
356 } 358 }
357 359
358 void UserImageManagerImpl::Job::SetToImageData(scoped_ptr<std::string> data) { 360 void UserImageManagerImpl::Job::SetToImageData(scoped_ptr<std::string> data) {
359 DCHECK(!run_); 361 DCHECK(!run_);
360 run_ = true; 362 run_ = true;
361 363
362 image_index_ = User::kExternalImageIndex; 364 image_index_ = user_manager::User::USER_IMAGE_EXTERNAL;
363 365
364 // This method uses the image_loader_, not the unsafe_image_loader_: 366 // This method uses the image_loader_, not the unsafe_image_loader_:
365 // * This is necessary because the method is used to update the user image 367 // * This is necessary because the method is used to update the user image
366 // whenever the policy for a user is set. In the case of device-local 368 // whenever the policy for a user is set. In the case of device-local
367 // accounts, policy may change at any time, even if the user is not 369 // accounts, policy may change at any time, even if the user is not
368 // currently logged in (and thus, the unsafe_image_loader_ may not be used). 370 // currently logged in (and thus, the unsafe_image_loader_ may not be used).
369 // * This is possible because only JPEG |data| is accepted. No support for 371 // * This is possible because only JPEG |data| is accepted. No support for
370 // other image file formats is needed. 372 // other image file formats is needed.
371 // * This is safe because the image_loader_ employs a hardened JPEG decoder 373 // * This is safe because the image_loader_ employs a hardened JPEG decoder
372 // that protects against malicious invalid image data being used to attack 374 // that protects against malicious invalid image data being used to attack
(...skipping 28 matching lines...) Expand all
401 const user_manager::UserImage& user_image) { 403 const user_manager::UserImage& user_image) {
402 user_image_ = user_image; 404 user_image_ = user_image;
403 UpdateUser(); 405 UpdateUser();
404 if (save) 406 if (save)
405 SaveImageAndUpdateLocalState(); 407 SaveImageAndUpdateLocalState();
406 else 408 else
407 NotifyJobDone(); 409 NotifyJobDone();
408 } 410 }
409 411
410 void UserImageManagerImpl::Job::UpdateUser() { 412 void UserImageManagerImpl::Job::UpdateUser() {
411 User* user = parent_->user_manager_->FindUserAndModify(user_id()); 413 user_manager::User* user =
414 parent_->user_manager_->FindUserAndModify(user_id());
412 if (!user) 415 if (!user)
413 return; 416 return;
414 417
415 if (!user_image_.image().isNull()) 418 if (!user_image_.image().isNull()) {
416 user->SetImage(user_image_, image_index_); 419 user->SetImage(user_image_, image_index_);
417 else 420 } else {
418 user->SetStubImage(image_index_, false); 421 user->SetStubImage(
422 user_manager::UserImage(
423 *ResourceBundle::GetSharedInstance().GetImageSkiaNamed(
424 IDR_PROFILE_PICTURE_LOADING)),
425 image_index_,
426 false);
427 }
419 user->SetImageURL(image_url_); 428 user->SetImageURL(image_url_);
420 429
421 parent_->OnJobChangedUserImage(); 430 parent_->OnJobChangedUserImage();
422 } 431 }
423 432
424 void UserImageManagerImpl::Job::SaveImageAndUpdateLocalState() { 433 void UserImageManagerImpl::Job::SaveImageAndUpdateLocalState() {
425 base::FilePath user_data_dir; 434 base::FilePath user_data_dir;
426 PathService::Get(chrome::DIR_USER_DATA, &user_data_dir); 435 PathService::Get(chrome::DIR_USER_DATA, &user_data_dir);
427 image_path_ = user_data_dir.Append(user_id() + kSafeImagePathExtension); 436 image_path_ = user_data_dir.Append(user_id() + kSafeImagePathExtension);
428 437
429 base::PostTaskAndReplyWithResult( 438 base::PostTaskAndReplyWithResult(
430 parent_->background_task_runner_, 439 parent_->background_task_runner_,
431 FROM_HERE, 440 FROM_HERE,
432 base::Bind(&SaveImage, user_image_, image_path_), 441 base::Bind(&SaveImage, user_image_, image_path_),
433 base::Bind(&Job::OnSaveImageDone, weak_factory_.GetWeakPtr())); 442 base::Bind(&Job::OnSaveImageDone, weak_factory_.GetWeakPtr()));
434 } 443 }
435 444
436 void UserImageManagerImpl::Job::OnSaveImageDone(bool success) { 445 void UserImageManagerImpl::Job::OnSaveImageDone(bool success) {
437 if (success || image_index_ == User::kProfileImageIndex) 446 if (success || image_index_ == user_manager::User::USER_IMAGE_PROFILE)
438 UpdateLocalState(); 447 UpdateLocalState();
439 NotifyJobDone(); 448 NotifyJobDone();
440 } 449 }
441 450
442 void UserImageManagerImpl::Job::UpdateLocalState() { 451 void UserImageManagerImpl::Job::UpdateLocalState() {
443 // Ignore if data stored or cached outside the user's cryptohome is to be 452 // Ignore if data stored or cached outside the user's cryptohome is to be
444 // treated as ephemeral. 453 // treated as ephemeral.
445 if (parent_->user_manager_->IsUserNonCryptohomeDataEphemeral(user_id())) 454 if (parent_->user_manager_->IsUserNonCryptohomeDataEphemeral(user_id()))
446 return; 455 return;
447 456
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
485 UserImageManagerImpl::~UserImageManagerImpl() {} 494 UserImageManagerImpl::~UserImageManagerImpl() {}
486 495
487 void UserImageManagerImpl::LoadUserImage() { 496 void UserImageManagerImpl::LoadUserImage() {
488 PrefService* local_state = g_browser_process->local_state(); 497 PrefService* local_state = g_browser_process->local_state();
489 const base::DictionaryValue* prefs_images_unsafe = 498 const base::DictionaryValue* prefs_images_unsafe =
490 local_state->GetDictionary(kUserImages); 499 local_state->GetDictionary(kUserImages);
491 const base::DictionaryValue* prefs_images = 500 const base::DictionaryValue* prefs_images =
492 local_state->GetDictionary(kUserImageProperties); 501 local_state->GetDictionary(kUserImageProperties);
493 if (!prefs_images && !prefs_images_unsafe) 502 if (!prefs_images && !prefs_images_unsafe)
494 return; 503 return;
495 User* user = GetUserAndModify(); 504 user_manager::User* user = GetUserAndModify();
496 bool needs_migration = false; 505 bool needs_migration = false;
497 506
498 // If entries are found in both |prefs_images_unsafe| and |prefs_images|, 507 // If entries are found in both |prefs_images_unsafe| and |prefs_images|,
499 // |prefs_images| is honored for now but |prefs_images_unsafe| will be 508 // |prefs_images| is honored for now but |prefs_images_unsafe| will be
500 // migrated, overwriting the |prefs_images| entry, when the user logs in. 509 // migrated, overwriting the |prefs_images| entry, when the user logs in.
501 const base::DictionaryValue* image_properties = NULL; 510 const base::DictionaryValue* image_properties = NULL;
502 if (prefs_images_unsafe) { 511 if (prefs_images_unsafe) {
503 needs_migration = prefs_images_unsafe->GetDictionaryWithoutPathExpansion( 512 needs_migration = prefs_images_unsafe->GetDictionaryWithoutPathExpansion(
504 user_id(), &image_properties); 513 user_id(), &image_properties);
505 if (needs_migration) 514 if (needs_migration)
506 user_needs_migration_ = true; 515 user_needs_migration_ = true;
507 } 516 }
508 if (prefs_images) { 517 if (prefs_images) {
509 prefs_images->GetDictionaryWithoutPathExpansion(user_id(), 518 prefs_images->GetDictionaryWithoutPathExpansion(user_id(),
510 &image_properties); 519 &image_properties);
511 } 520 }
512 521
513 // If the user image for |user_id| is managed by policy and the policy-set 522 // If the user image for |user_id| is managed by policy and the policy-set
514 // image is being loaded and persisted right now, let that job continue. It 523 // image is being loaded and persisted right now, let that job continue. It
515 // will update the user image when done. 524 // will update the user image when done.
516 if (IsUserImageManaged() && job_.get()) 525 if (IsUserImageManaged() && job_.get())
517 return; 526 return;
518 527
519 if (!image_properties) { 528 if (!image_properties) {
520 SetInitialUserImage(); 529 SetInitialUserImage();
521 return; 530 return;
522 } 531 }
523 532
524 int image_index = User::kInvalidImageIndex; 533 int image_index = user_manager::User::USER_IMAGE_INVALID;
525 image_properties->GetInteger(kImageIndexNodeName, &image_index); 534 image_properties->GetInteger(kImageIndexNodeName, &image_index);
526 if (image_index >= 0 && image_index < user_manager::kDefaultImagesCount) { 535 if (image_index >= 0 && image_index < user_manager::kDefaultImagesCount) {
527 user->SetImage( 536 user->SetImage(
528 user_manager::UserImage(user_manager::GetDefaultImage(image_index)), 537 user_manager::UserImage(user_manager::GetDefaultImage(image_index)),
529 image_index); 538 image_index);
530 return; 539 return;
531 } 540 }
532 541
533 if (image_index != User::kExternalImageIndex && 542 if (image_index != user_manager::User::USER_IMAGE_EXTERNAL &&
534 image_index != User::kProfileImageIndex) { 543 image_index != user_manager::User::USER_IMAGE_PROFILE) {
535 NOTREACHED(); 544 NOTREACHED();
536 return; 545 return;
537 } 546 }
538 547
539 std::string image_url_string; 548 std::string image_url_string;
540 image_properties->GetString(kImageURLNodeName, &image_url_string); 549 image_properties->GetString(kImageURLNodeName, &image_url_string);
541 GURL image_url(image_url_string); 550 GURL image_url(image_url_string);
542 std::string image_path; 551 std::string image_path;
543 image_properties->GetString(kImagePathNodeName, &image_path); 552 image_properties->GetString(kImagePathNodeName, &image_path);
544 553
545 user->SetImageURL(image_url); 554 user->SetImageURL(image_url);
546 user->SetStubImage(image_index, true); 555 user->SetStubImage(user_manager::UserImage(
547 DCHECK(!image_path.empty() || image_index == User::kProfileImageIndex); 556 *ResourceBundle::GetSharedInstance().GetImageSkiaNamed(
557 IDR_PROFILE_PICTURE_LOADING)),
558 image_index,
559 true);
560 DCHECK(!image_path.empty() ||
561 image_index == user_manager::User::USER_IMAGE_PROFILE);
548 if (image_path.empty() || needs_migration) { 562 if (image_path.empty() || needs_migration) {
549 // Return if either of the following is true: 563 // Return if either of the following is true:
550 // * The profile image is to be used but has not been downloaded yet. The 564 // * The profile image is to be used but has not been downloaded yet. The
551 // profile image will be downloaded after login. 565 // profile image will be downloaded after login.
552 // * The image needs migration. Migration will be performed after login. 566 // * The image needs migration. Migration will be performed after login.
553 return; 567 return;
554 } 568 }
555 569
556 job_.reset(new Job(this)); 570 job_.reset(new Job(this));
557 job_->LoadImage(base::FilePath(image_path), image_index, image_url); 571 job_->LoadImage(base::FilePath(image_path), image_index, image_url);
558 } 572 }
559 573
560 void UserImageManagerImpl::UserLoggedIn(bool user_is_new, 574 void UserImageManagerImpl::UserLoggedIn(bool user_is_new,
561 bool user_is_local) { 575 bool user_is_local) {
562 const User* user = GetUser(); 576 const user_manager::User* user = GetUser();
563 if (user_is_new) { 577 if (user_is_new) {
564 if (!user_is_local) 578 if (!user_is_local)
565 SetInitialUserImage(); 579 SetInitialUserImage();
566 } else { 580 } else {
567 UMA_HISTOGRAM_ENUMERATION("UserImage.LoggedIn", 581 UMA_HISTOGRAM_ENUMERATION("UserImage.LoggedIn",
568 ImageIndexToHistogramIndex(user->image_index()), 582 ImageIndexToHistogramIndex(user->image_index()),
569 user_manager::kHistogramImagesCount); 583 user_manager::kHistogramImagesCount);
570 584
571 if (!IsUserImageManaged() && user_needs_migration_) { 585 if (!IsUserImageManaged() && user_needs_migration_) {
572 const base::DictionaryValue* prefs_images_unsafe = 586 const base::DictionaryValue* prefs_images_unsafe =
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
629 return; 643 return;
630 job_.reset(new Job(this)); 644 job_.reset(new Job(this));
631 job_->SetToDefaultImage(default_image_index); 645 job_->SetToDefaultImage(default_image_index);
632 } 646 }
633 647
634 void UserImageManagerImpl::SaveUserImage( 648 void UserImageManagerImpl::SaveUserImage(
635 const user_manager::UserImage& user_image) { 649 const user_manager::UserImage& user_image) {
636 if (IsUserImageManaged()) 650 if (IsUserImageManaged())
637 return; 651 return;
638 job_.reset(new Job(this)); 652 job_.reset(new Job(this));
639 job_->SetToImage(User::kExternalImageIndex, user_image); 653 job_->SetToImage(user_manager::User::USER_IMAGE_EXTERNAL, user_image);
640 } 654 }
641 655
642 void UserImageManagerImpl::SaveUserImageFromFile(const base::FilePath& path) { 656 void UserImageManagerImpl::SaveUserImageFromFile(const base::FilePath& path) {
643 if (IsUserImageManaged()) 657 if (IsUserImageManaged())
644 return; 658 return;
645 job_.reset(new Job(this)); 659 job_.reset(new Job(this));
646 job_->SetToPath(path, User::kExternalImageIndex, GURL(), true); 660 job_->SetToPath(path, user_manager::User::USER_IMAGE_EXTERNAL, GURL(), true);
647 } 661 }
648 662
649 void UserImageManagerImpl::SaveUserImageFromProfileImage() { 663 void UserImageManagerImpl::SaveUserImageFromProfileImage() {
650 if (IsUserImageManaged()) 664 if (IsUserImageManaged())
651 return; 665 return;
652 // Use the profile image if it has been downloaded already. Otherwise, use a 666 // Use the profile image if it has been downloaded already. Otherwise, use a
653 // stub image (gray avatar). 667 // stub image (gray avatar).
654 job_.reset(new Job(this)); 668 job_.reset(new Job(this));
655 job_->SetToImage(User::kProfileImageIndex, 669 job_->SetToImage(user_manager::User::USER_IMAGE_PROFILE,
656 downloaded_profile_image_.isNull() 670 downloaded_profile_image_.isNull()
657 ? user_manager::UserImage() 671 ? user_manager::UserImage()
658 : user_manager::UserImage::CreateAndEncode( 672 : user_manager::UserImage::CreateAndEncode(
659 downloaded_profile_image_)); 673 downloaded_profile_image_));
660 // If no profile image has been downloaded yet, ensure that a download is 674 // If no profile image has been downloaded yet, ensure that a download is
661 // started. 675 // started.
662 if (downloaded_profile_image_.isNull()) 676 if (downloaded_profile_image_.isNull())
663 DownloadProfileData(kProfileDownloadReasonProfileImageChosen); 677 DownloadProfileData(kProfileDownloadReasonProfileImageChosen);
664 } 678 }
665 679
(...skipping 22 matching lines...) Expand all
688 } 702 }
689 703
690 void UserImageManagerImpl::OnExternalDataSet(const std::string& policy) { 704 void UserImageManagerImpl::OnExternalDataSet(const std::string& policy) {
691 DCHECK_EQ(policy::key::kUserAvatarImage, policy); 705 DCHECK_EQ(policy::key::kUserAvatarImage, policy);
692 if (IsUserImageManaged()) 706 if (IsUserImageManaged())
693 return; 707 return;
694 708
695 has_managed_image_ = true; 709 has_managed_image_ = true;
696 job_.reset(); 710 job_.reset();
697 711
698 const User* user = GetUser(); 712 const user_manager::User* user = GetUser();
699 // If the user image for the currently logged-in user became managed, stop the 713 // If the user image for the currently logged-in user became managed, stop the
700 // sync observer so that the policy-set image does not get synced out. 714 // sync observer so that the policy-set image does not get synced out.
701 if (user && user->is_logged_in()) 715 if (user && user->is_logged_in())
702 user_image_sync_observer_.reset(); 716 user_image_sync_observer_.reset();
703 } 717 }
704 718
705 void UserImageManagerImpl::OnExternalDataCleared(const std::string& policy) { 719 void UserImageManagerImpl::OnExternalDataCleared(const std::string& policy) {
706 DCHECK_EQ(policy::key::kUserAvatarImage, policy); 720 DCHECK_EQ(policy::key::kUserAvatarImage, policy);
707 has_managed_image_ = false; 721 has_managed_image_ = false;
708 SetInitialUserImage(); 722 SetInitialUserImage();
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after
793 } 807 }
794 808
795 // Nothing to do if the picture is cached or is the default avatar. 809 // Nothing to do if the picture is cached or is the default avatar.
796 if (result != kDownloadSuccess) 810 if (result != kDownloadSuccess)
797 return; 811 return;
798 812
799 downloaded_profile_image_ = gfx::ImageSkia::CreateFrom1xBitmap( 813 downloaded_profile_image_ = gfx::ImageSkia::CreateFrom1xBitmap(
800 downloader->GetProfilePicture()); 814 downloader->GetProfilePicture());
801 profile_image_url_ = GURL(downloader->GetProfilePictureURL()); 815 profile_image_url_ = GURL(downloader->GetProfilePictureURL());
802 816
803 const User* user = GetUser(); 817 const user_manager::User* user = GetUser();
804 if (user->image_index() == User::kProfileImageIndex) { 818 if (user->image_index() == user_manager::User::USER_IMAGE_PROFILE) {
805 VLOG(1) << "Updating profile image for logged-in user."; 819 VLOG(1) << "Updating profile image for logged-in user.";
806 UMA_HISTOGRAM_ENUMERATION("UserImage.ProfileDownloadResult", 820 UMA_HISTOGRAM_ENUMERATION("UserImage.ProfileDownloadResult",
807 kDownloadSuccessChanged, 821 kDownloadSuccessChanged,
808 kDownloadResultsCount); 822 kDownloadResultsCount);
809 // This will persist |downloaded_profile_image_| to disk. 823 // This will persist |downloaded_profile_image_| to disk.
810 SaveUserImageFromProfileImage(); 824 SaveUserImageFromProfileImage();
811 } 825 }
812 826
813 content::NotificationService::current()->Notify( 827 content::NotificationService::current()->Notify(
814 chrome::NOTIFICATION_PROFILE_IMAGE_UPDATED, 828 chrome::NOTIFICATION_PROFILE_IMAGE_UPDATED,
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
854 } 868 }
855 869
856 void UserImageManagerImpl::SetInitialUserImage() { 870 void UserImageManagerImpl::SetInitialUserImage() {
857 // Choose a random default image. 871 // Choose a random default image.
858 SaveUserDefaultImageIndex( 872 SaveUserDefaultImageIndex(
859 base::RandInt(user_manager::kFirstDefaultImageIndex, 873 base::RandInt(user_manager::kFirstDefaultImageIndex,
860 user_manager::kDefaultImagesCount - 1)); 874 user_manager::kDefaultImagesCount - 1));
861 } 875 }
862 876
863 void UserImageManagerImpl::TryToInitDownloadedProfileImage() { 877 void UserImageManagerImpl::TryToInitDownloadedProfileImage() {
864 const User* user = GetUser(); 878 const user_manager::User* user = GetUser();
865 if (user->image_index() == User::kProfileImageIndex && 879 if (user->image_index() == user_manager::User::USER_IMAGE_PROFILE &&
866 downloaded_profile_image_.isNull() && 880 downloaded_profile_image_.isNull() && !user->image_is_stub()) {
867 !user->image_is_stub()) {
868 // Initialize the |downloaded_profile_image_| for the currently logged-in 881 // Initialize the |downloaded_profile_image_| for the currently logged-in
869 // user if it has not been initialized already, the user image is the 882 // user if it has not been initialized already, the user image is the
870 // profile image and the user image has been loaded successfully. 883 // profile image and the user image has been loaded successfully.
871 VLOG(1) << "Profile image initialized from disk."; 884 VLOG(1) << "Profile image initialized from disk.";
872 downloaded_profile_image_ = user->GetImage(); 885 downloaded_profile_image_ = user->GetImage();
873 profile_image_url_ = user->image_url(); 886 profile_image_url_ = user->image_url();
874 } 887 }
875 } 888 }
876 889
877 bool UserImageManagerImpl::NeedProfileImage() const { 890 bool UserImageManagerImpl::NeedProfileImage() const {
878 const User* user = GetUser(); 891 const user_manager::User* user = GetUser();
879 return IsUserLoggedInAndRegular() && 892 return IsUserLoggedInAndRegular() &&
880 (user->image_index() == User::kProfileImageIndex || 893 (user->image_index() == user_manager::User::USER_IMAGE_PROFILE ||
881 profile_image_requested_); 894 profile_image_requested_);
882 } 895 }
883 896
884 void UserImageManagerImpl::DownloadProfileData(const std::string& reason) { 897 void UserImageManagerImpl::DownloadProfileData(const std::string& reason) {
885 // GAIA profiles exist for regular users only. 898 // GAIA profiles exist for regular users only.
886 if (!IsUserLoggedInAndRegular()) 899 if (!IsUserLoggedInAndRegular())
887 return; 900 return;
888 901
889 // If a download is already in progress, allow it to continue, with one 902 // If a download is already in progress, allow it to continue, with one
890 // exception: If the current download does not include the profile image but 903 // exception: If the current download does not include the profile image but
891 // the image has since become necessary, start a new download that includes 904 // the image has since become necessary, start a new download that includes
(...skipping 30 matching lines...) Expand all
922 update->RemoveWithoutPathExpansion(user_id(), NULL); 935 update->RemoveWithoutPathExpansion(user_id(), NULL);
923 } 936 }
924 937
925 void UserImageManagerImpl::OnJobChangedUserImage() { 938 void UserImageManagerImpl::OnJobChangedUserImage() {
926 if (GetUser()->is_logged_in()) 939 if (GetUser()->is_logged_in())
927 TryToInitDownloadedProfileImage(); 940 TryToInitDownloadedProfileImage();
928 941
929 content::NotificationService::current()->Notify( 942 content::NotificationService::current()->Notify(
930 chrome::NOTIFICATION_LOGIN_USER_IMAGE_CHANGED, 943 chrome::NOTIFICATION_LOGIN_USER_IMAGE_CHANGED,
931 content::Source<UserImageManagerImpl>(this), 944 content::Source<UserImageManagerImpl>(this),
932 content::Details<const User>(GetUser())); 945 content::Details<const user_manager::User>(GetUser()));
933 } 946 }
934 947
935 void UserImageManagerImpl::OnJobDone() { 948 void UserImageManagerImpl::OnJobDone() {
936 if (job_.get()) 949 if (job_.get())
937 base::MessageLoopProxy::current()->DeleteSoon(FROM_HERE, job_.release()); 950 base::MessageLoopProxy::current()->DeleteSoon(FROM_HERE, job_.release());
938 else 951 else
939 NOTREACHED(); 952 NOTREACHED();
940 953
941 if (!user_needs_migration_) 954 if (!user_needs_migration_)
942 return; 955 return;
943 // Migration completed for |user_id|. 956 // Migration completed for |user_id|.
944 user_needs_migration_ = false; 957 user_needs_migration_ = false;
945 958
946 const base::DictionaryValue* prefs_images_unsafe = 959 const base::DictionaryValue* prefs_images_unsafe =
947 g_browser_process->local_state()->GetDictionary(kUserImages); 960 g_browser_process->local_state()->GetDictionary(kUserImages);
948 const base::DictionaryValue* image_properties = NULL; 961 const base::DictionaryValue* image_properties = NULL;
949 if (!prefs_images_unsafe->GetDictionaryWithoutPathExpansion( 962 if (!prefs_images_unsafe->GetDictionaryWithoutPathExpansion(
950 user_id(), &image_properties)) { 963 user_id(), &image_properties)) {
951 NOTREACHED(); 964 NOTREACHED();
952 return; 965 return;
953 } 966 }
954 967
955 int image_index = User::kInvalidImageIndex; 968 int image_index = user_manager::User::USER_IMAGE_INVALID;
956 image_properties->GetInteger(kImageIndexNodeName, &image_index); 969 image_properties->GetInteger(kImageIndexNodeName, &image_index);
957 UMA_HISTOGRAM_ENUMERATION("UserImage.Migration", 970 UMA_HISTOGRAM_ENUMERATION("UserImage.Migration",
958 ImageIndexToHistogramIndex(image_index), 971 ImageIndexToHistogramIndex(image_index),
959 user_manager::kHistogramImagesCount); 972 user_manager::kHistogramImagesCount);
960 973
961 std::string image_path; 974 std::string image_path;
962 image_properties->GetString(kImagePathNodeName, &image_path); 975 image_properties->GetString(kImagePathNodeName, &image_path);
963 if (!image_path.empty()) { 976 if (!image_path.empty()) {
964 // If an old image exists, delete it and remove |user_id| from the old prefs 977 // If an old image exists, delete it and remove |user_id| from the old prefs
965 // dictionary only after the deletion has completed. This ensures that no 978 // dictionary only after the deletion has completed. This ensures that no
(...skipping 13 matching lines...) Expand all
979 } 992 }
980 } 993 }
981 994
982 void UserImageManagerImpl::UpdateLocalStateAfterMigration() { 995 void UserImageManagerImpl::UpdateLocalStateAfterMigration() {
983 DictionaryPrefUpdate update(g_browser_process->local_state(), 996 DictionaryPrefUpdate update(g_browser_process->local_state(),
984 kUserImages); 997 kUserImages);
985 update->RemoveWithoutPathExpansion(user_id(), NULL); 998 update->RemoveWithoutPathExpansion(user_id(), NULL);
986 } 999 }
987 1000
988 void UserImageManagerImpl::TryToCreateImageSyncObserver() { 1001 void UserImageManagerImpl::TryToCreateImageSyncObserver() {
989 const User* user = GetUser(); 1002 const user_manager::User* user = GetUser();
990 // If the currently logged-in user's user image is managed, the sync observer 1003 // If the currently logged-in user's user image is managed, the sync observer
991 // must not be started so that the policy-set image does not get synced out. 1004 // must not be started so that the policy-set image does not get synced out.
992 if (!user_image_sync_observer_ && 1005 if (!user_image_sync_observer_ &&
993 user && user->CanSyncImage() && 1006 user && user->CanSyncImage() &&
994 !IsUserImageManaged()) { 1007 !IsUserImageManaged()) {
995 user_image_sync_observer_.reset(new UserImageSyncObserver(user)); 1008 user_image_sync_observer_.reset(new UserImageSyncObserver(user));
996 } 1009 }
997 } 1010 }
998 1011
999 const User* UserImageManagerImpl::GetUser() const { 1012 const user_manager::User* UserImageManagerImpl::GetUser() const {
1000 return user_manager_->FindUser(user_id()); 1013 return user_manager_->FindUser(user_id());
1001 } 1014 }
1002 1015
1003 User* UserImageManagerImpl::GetUserAndModify() const { 1016 user_manager::User* UserImageManagerImpl::GetUserAndModify() const {
1004 return user_manager_->FindUserAndModify(user_id()); 1017 return user_manager_->FindUserAndModify(user_id());
1005 } 1018 }
1006 1019
1007 bool UserImageManagerImpl::IsUserLoggedInAndRegular() const { 1020 bool UserImageManagerImpl::IsUserLoggedInAndRegular() const {
1008 const User* user = GetUser(); 1021 const user_manager::User* user = GetUser();
1009 if (!user) 1022 if (!user)
1010 return false; 1023 return false;
1011 return user->is_logged_in() && 1024 return user->is_logged_in() &&
1012 user->GetType() == user_manager::USER_TYPE_REGULAR; 1025 user->GetType() == user_manager::USER_TYPE_REGULAR;
1013 } 1026 }
1014 1027
1015 } // namespace chromeos 1028 } // namespace chromeos
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698