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

Side by Side Diff: chrome/browser/chromeos/login/users/wallpaper/wallpaper_manager.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/chromeos/login/users/wallpaper/wallpaper_manager.h" 5 #include "chrome/browser/chromeos/login/users/wallpaper/wallpaper_manager.h"
6 6
7 #include <numeric> 7 #include <numeric>
8 #include <vector> 8 #include <vector>
9 9
10 #include "ash/ash_constants.h" 10 #include "ash/ash_constants.h"
(...skipping 117 matching lines...) Expand 10 before | Expand all | Expand 10 after
128 // 128 //
129 // PendingWallpaper is owned by WallpaperManager, but reference to this object 129 // PendingWallpaper is owned by WallpaperManager, but reference to this object
130 // is passed to other threads by PostTask() calls, therefore it is 130 // is passed to other threads by PostTask() calls, therefore it is
131 // RefCountedThreadSafe. 131 // RefCountedThreadSafe.
132 class WallpaperManager::PendingWallpaper : 132 class WallpaperManager::PendingWallpaper :
133 public base::RefCountedThreadSafe<PendingWallpaper> { 133 public base::RefCountedThreadSafe<PendingWallpaper> {
134 public: 134 public:
135 // Do LoadWallpaper() - image not found in cache. 135 // Do LoadWallpaper() - image not found in cache.
136 PendingWallpaper( 136 PendingWallpaper(
137 const base::TimeDelta delay, 137 const base::TimeDelta delay,
138 const std::string& user_id) 138 const user_manager::UserID& user_id)
139 : user_id_(user_id), 139 : user_id_(user_id),
140 default_(false), 140 default_(false),
141 on_finish_(new MovableOnDestroyCallback( 141 on_finish_(new MovableOnDestroyCallback(
142 base::Bind(&WallpaperManager::PendingWallpaper::OnWallpaperSet, 142 base::Bind(&WallpaperManager::PendingWallpaper::OnWallpaperSet,
143 this))) { 143 this))) {
144 timer.Start( 144 timer.Start(
145 FROM_HERE, 145 FROM_HERE,
146 delay, 146 delay,
147 base::Bind(&WallpaperManager::PendingWallpaper::ProcessRequest, this)); 147 base::Bind(&WallpaperManager::PendingWallpaper::ProcessRequest, this));
148 } 148 }
(...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after
247 } 247 }
248 if (manager->pending_inactive_ == this) { 248 if (manager->pending_inactive_ == this) {
249 // ProcessRequest() was never executed. 249 // ProcessRequest() was never executed.
250 manager->pending_inactive_ = NULL; 250 manager->pending_inactive_ = NULL;
251 } 251 }
252 252
253 // Destroy self. 253 // Destroy self.
254 manager->RemovePendingWallpaperFromList(this); 254 manager->RemovePendingWallpaperFromList(this);
255 } 255 }
256 256
257 std::string user_id_; 257 const user_manager::UserID user_id_;
258 wallpaper::WallpaperInfo info_; 258 wallpaper::WallpaperInfo info_;
259 gfx::ImageSkia user_wallpaper_; 259 gfx::ImageSkia user_wallpaper_;
260 base::FilePath wallpaper_path_; 260 base::FilePath wallpaper_path_;
261 261
262 // Load default wallpaper instead of user image. 262 // Load default wallpaper instead of user image.
263 bool default_; 263 bool default_;
264 264
265 // This is "on destroy" callback that will call OnWallpaperSet() when 265 // This is "on destroy" callback that will call OnWallpaperSet() when
266 // image will be loaded. 266 // image will be loaded.
267 wallpaper::MovableOnDestroyCallbackHolder on_finish_; 267 wallpaper::MovableOnDestroyCallbackHolder on_finish_;
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
327 return; 327 return;
328 328
329 WallpaperInfo info; 329 WallpaperInfo info;
330 if (GetLoggedInUserWallpaperInfo(&info)) { 330 if (GetLoggedInUserWallpaperInfo(&info)) {
331 UMA_HISTOGRAM_ENUMERATION("Ash.Wallpaper.Type", info.type, 331 UMA_HISTOGRAM_ENUMERATION("Ash.Wallpaper.Type", info.type,
332 user_manager::User::WALLPAPER_TYPE_COUNT); 332 user_manager::User::WALLPAPER_TYPE_COUNT);
333 if (info == current_user_wallpaper_info_) 333 if (info == current_user_wallpaper_info_)
334 return; 334 return;
335 } 335 }
336 SetUserWallpaperNow( 336 SetUserWallpaperNow(
337 user_manager::UserManager::Get()->GetLoggedInUser()->email()); 337 user_manager::UserManager::Get()->GetLoggedInUser()->GetUserID());
338 } 338 }
339 339
340 void WallpaperManager::InitializeWallpaper() { 340 void WallpaperManager::InitializeWallpaper() {
341 DCHECK_CURRENTLY_ON(BrowserThread::UI); 341 DCHECK_CURRENTLY_ON(BrowserThread::UI);
342 user_manager::UserManager* user_manager = user_manager::UserManager::Get(); 342 user_manager::UserManager* user_manager = user_manager::UserManager::Get();
343 343
344 // Apply device customization. 344 // Apply device customization.
345 if (ShouldUseCustomizedDefaultWallpaper()) { 345 if (ShouldUseCustomizedDefaultWallpaper()) {
346 SetDefaultWallpaperPath(GetCustomizedWallpaperDefaultRescaledFileName( 346 SetDefaultWallpaperPath(GetCustomizedWallpaperDefaultRescaledFileName(
347 wallpaper::kSmallWallpaperSuffix), 347 wallpaper::kSmallWallpaperSuffix),
(...skipping 17 matching lines...) Expand all
365 // Zero delays is also set in autotests. 365 // Zero delays is also set in autotests.
366 if (WizardController::IsZeroDelayEnabled()) { 366 if (WizardController::IsZeroDelayEnabled()) {
367 // Ensure tests have some sort of wallpaper. 367 // Ensure tests have some sort of wallpaper.
368 ash::Shell::GetInstance()->desktop_background_controller()-> 368 ash::Shell::GetInstance()->desktop_background_controller()->
369 CreateEmptyWallpaper(); 369 CreateEmptyWallpaper();
370 return; 370 return;
371 } 371 }
372 372
373 if (!user_manager->IsUserLoggedIn()) { 373 if (!user_manager->IsUserLoggedIn()) {
374 if (!StartupUtils::IsDeviceRegistered()) 374 if (!StartupUtils::IsDeviceRegistered())
375 SetDefaultWallpaperDelayed(chromeos::login::kSignInUser); 375 SetDefaultWallpaperDelayed(chromeos::login::GetSignInUserID());
376 else 376 else
377 InitializeRegisteredDeviceWallpaper(); 377 InitializeRegisteredDeviceWallpaper();
378 return; 378 return;
379 } 379 }
380 SetUserWallpaperDelayed(user_manager->GetLoggedInUser()->email()); 380 SetUserWallpaperDelayed(user_manager->GetLoggedInUser()->GetUserID());
381 } 381 }
382 382
383 void WallpaperManager::Observe(int type, 383 void WallpaperManager::Observe(int type,
384 const content::NotificationSource& source, 384 const content::NotificationSource& source,
385 const content::NotificationDetails& details) { 385 const content::NotificationDetails& details) {
386 DCHECK_CURRENTLY_ON(BrowserThread::UI); 386 DCHECK_CURRENTLY_ON(BrowserThread::UI);
387 switch (type) { 387 switch (type) {
388 case chrome::NOTIFICATION_LOGIN_USER_CHANGED: { 388 case chrome::NOTIFICATION_LOGIN_USER_CHANGED: {
389 ClearDisposableWallpaperCache(); 389 ClearDisposableWallpaperCache();
390 BrowserThread::PostDelayedTask( 390 BrowserThread::PostDelayedTask(
(...skipping 26 matching lines...) Expand all
417 base::TimeDelta::FromMilliseconds(kCacheWallpaperDelayMs)); 417 base::TimeDelta::FromMilliseconds(kCacheWallpaperDelayMs));
418 should_cache_wallpaper_ = false; 418 should_cache_wallpaper_ = false;
419 } 419 }
420 break; 420 break;
421 } 421 }
422 default: 422 default:
423 NOTREACHED() << "Unexpected notification " << type; 423 NOTREACHED() << "Unexpected notification " << type;
424 } 424 }
425 } 425 }
426 426
427 void WallpaperManager::RemoveUserWallpaperInfo(const std::string& user_id) { 427 void WallpaperManager::RemoveUserWallpaperInfo(const user_manager::UserID& user_ id) {
428 WallpaperInfo info; 428 WallpaperInfo info;
429 GetUserWallpaperInfo(user_id, &info); 429 GetUserWallpaperInfo(user_id, &info);
430 PrefService* prefs = g_browser_process->local_state(); 430 PrefService* prefs = g_browser_process->local_state();
431 DictionaryPrefUpdate prefs_wallpapers_info_update( 431 DictionaryPrefUpdate prefs_wallpapers_info_update(
432 prefs, wallpaper::kUsersWallpaperInfo); 432 prefs, wallpaper::kUsersWallpaperInfo);
433 prefs_wallpapers_info_update->RemoveWithoutPathExpansion(user_id, NULL); 433 prefs_wallpapers_info_update->RemoveWithoutPathExpansion(user_id.GetUserEmail( ), NULL);
434 DeleteUserWallpapers(user_id, info.location); 434 DeleteUserWallpapers(user_id, info.location);
435 } 435 }
436 436
437 void WallpaperManager::OnPolicyFetched(const std::string& policy, 437 void WallpaperManager::OnPolicyFetched(const std::string& policy,
438 const std::string& user_id, 438 const user_manager::UserID& user_id,
439 scoped_ptr<std::string> data) { 439 scoped_ptr<std::string> data) {
440 if (!data) 440 if (!data)
441 return; 441 return;
442 442
443 wallpaper_loader_->Start( 443 wallpaper_loader_->Start(
444 data.Pass(), 444 data.Pass(),
445 0, // Do not crop. 445 0, // Do not crop.
446 base::Bind(&WallpaperManager::SetPolicyControlledWallpaper, 446 base::Bind(&WallpaperManager::SetPolicyControlledWallpaper,
447 weak_factory_.GetWeakPtr(), 447 weak_factory_.GetWeakPtr(),
448 user_id)); 448 user_id));
449 } 449 }
450 450
451 void WallpaperManager::SetCustomWallpaper( 451 void WallpaperManager::SetCustomWallpaper(
452 const std::string& user_id, 452 const user_manager::UserID& user_id,
453 const std::string& user_id_hash, 453 const std::string& user_id_hash,
454 const std::string& file, 454 const std::string& file,
455 wallpaper::WallpaperLayout layout, 455 wallpaper::WallpaperLayout layout,
456 user_manager::User::WallpaperType type, 456 user_manager::User::WallpaperType type,
457 const gfx::ImageSkia& image, 457 const gfx::ImageSkia& image,
458 bool update_wallpaper) { 458 bool update_wallpaper) {
459 DCHECK_CURRENTLY_ON(BrowserThread::UI); 459 DCHECK_CURRENTLY_ON(BrowserThread::UI);
460 460
461 // There is no visible background in kiosk mode. 461 // There is no visible background in kiosk mode.
462 if (user_manager::UserManager::Get()->IsLoggedInAsKioskApp()) 462 if (user_manager::UserManager::Get()->IsLoggedInAsKioskApp())
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after
521 base::Time::Now().LocalMidnight() 521 base::Time::Now().LocalMidnight()
522 }; 522 };
523 SetUserWallpaperInfo(user_id, info, is_persistent); 523 SetUserWallpaperInfo(user_id, info, is_persistent);
524 if (update_wallpaper) { 524 if (update_wallpaper) {
525 GetPendingWallpaper(user_id, false)->ResetSetWallpaperImage(image, info); 525 GetPendingWallpaper(user_id, false)->ResetSetWallpaperImage(image, info);
526 } 526 }
527 527
528 wallpaper_cache_[user_id] = CustomWallpaperElement(wallpaper_path, image); 528 wallpaper_cache_[user_id] = CustomWallpaperElement(wallpaper_path, image);
529 } 529 }
530 530
531 void WallpaperManager::SetDefaultWallpaperNow(const std::string& user_id) { 531 void WallpaperManager::SetDefaultWallpaperNow(const user_manager::UserID& user_i d) {
532 GetPendingWallpaper(user_id, false)->ResetSetDefaultWallpaper(); 532 GetPendingWallpaper(user_id, false)->ResetSetDefaultWallpaper();
533 } 533 }
534 534
535 void WallpaperManager::SetDefaultWallpaperDelayed(const std::string& user_id) { 535 void WallpaperManager::SetDefaultWallpaperDelayed(const user_manager::UserID& us er_id) {
536 GetPendingWallpaper(user_id, true)->ResetSetDefaultWallpaper(); 536 GetPendingWallpaper(user_id, true)->ResetSetDefaultWallpaper();
537 } 537 }
538 538
539 void WallpaperManager::DoSetDefaultWallpaper( 539 void WallpaperManager::DoSetDefaultWallpaper(
540 const std::string& user_id, 540 const user_manager::UserID& user_id,
541 MovableOnDestroyCallbackHolder on_finish) { 541 MovableOnDestroyCallbackHolder on_finish) {
542 // There is no visible background in kiosk mode. 542 // There is no visible background in kiosk mode.
543 if (user_manager::UserManager::Get()->IsLoggedInAsKioskApp()) 543 if (user_manager::UserManager::Get()->IsLoggedInAsKioskApp())
544 return; 544 return;
545 wallpaper_cache_.erase(user_id); 545 wallpaper_cache_.erase(user_id);
546 // Some browser tests do not have a shell instance. As no wallpaper is needed 546 // Some browser tests do not have a shell instance. As no wallpaper is needed
547 // in these tests anyway, avoid loading one, preventing crashes and speeding 547 // in these tests anyway, avoid loading one, preventing crashes and speeding
548 // up the tests. 548 // up the tests.
549 if (!ash::Shell::HasInstance()) 549 if (!ash::Shell::HasInstance())
550 return; 550 return;
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
585 } 585 }
586 // 1x1 wallpaper is actually solid color, so it should be stretched. 586 // 1x1 wallpaper is actually solid color, so it should be stretched.
587 if (default_wallpaper_image_->image().width() == 1 && 587 if (default_wallpaper_image_->image().width() == 1 &&
588 default_wallpaper_image_->image().height() == 1) 588 default_wallpaper_image_->image().height() == 1)
589 layout = wallpaper::WALLPAPER_LAYOUT_STRETCH; 589 layout = wallpaper::WALLPAPER_LAYOUT_STRETCH;
590 590
591 ash::Shell::GetInstance()->desktop_background_controller()->SetWallpaperImage( 591 ash::Shell::GetInstance()->desktop_background_controller()->SetWallpaperImage(
592 default_wallpaper_image_->image(), layout); 592 default_wallpaper_image_->image(), layout);
593 } 593 }
594 594
595 void WallpaperManager::SetUserWallpaperInfo(const std::string& user_id, 595 void WallpaperManager::SetUserWallpaperInfo(const user_manager::UserID& user_id,
596 const WallpaperInfo& info, 596 const WallpaperInfo& info,
597 bool is_persistent) { 597 bool is_persistent) {
598 DCHECK_CURRENTLY_ON(BrowserThread::UI); 598 DCHECK_CURRENTLY_ON(BrowserThread::UI);
599 current_user_wallpaper_info_ = info; 599 current_user_wallpaper_info_ = info;
600 if (!is_persistent) 600 if (!is_persistent)
601 return; 601 return;
602 602
603 PrefService* local_state = g_browser_process->local_state(); 603 PrefService* local_state = g_browser_process->local_state();
604 DictionaryPrefUpdate wallpaper_update(local_state, 604 DictionaryPrefUpdate wallpaper_update(local_state,
605 wallpaper::kUsersWallpaperInfo); 605 wallpaper::kUsersWallpaperInfo);
606 606
607 base::DictionaryValue* wallpaper_info_dict = new base::DictionaryValue(); 607 base::DictionaryValue* wallpaper_info_dict = new base::DictionaryValue();
608 wallpaper_info_dict->SetString(kNewWallpaperDateNodeName, 608 wallpaper_info_dict->SetString(kNewWallpaperDateNodeName,
609 base::Int64ToString(info.date.ToInternalValue())); 609 base::Int64ToString(info.date.ToInternalValue()));
610 wallpaper_info_dict->SetString(kNewWallpaperLocationNodeName, info.location); 610 wallpaper_info_dict->SetString(kNewWallpaperLocationNodeName, info.location);
611 wallpaper_info_dict->SetInteger(kNewWallpaperLayoutNodeName, info.layout); 611 wallpaper_info_dict->SetInteger(kNewWallpaperLayoutNodeName, info.layout);
612 wallpaper_info_dict->SetInteger(kNewWallpaperTypeNodeName, info.type); 612 wallpaper_info_dict->SetInteger(kNewWallpaperTypeNodeName, info.type);
613 wallpaper_update->SetWithoutPathExpansion(user_id, wallpaper_info_dict); 613 wallpaper_update->SetWithoutPathExpansion(user_id.GetUserEmail(), wallpaper_in fo_dict);
614 } 614 }
615 615
616 void WallpaperManager::ScheduleSetUserWallpaper(const std::string& user_id, 616 void WallpaperManager::ScheduleSetUserWallpaper(const user_manager::UserID& user _id,
617 bool delayed) { 617 bool delayed) {
618 DCHECK_CURRENTLY_ON(BrowserThread::UI); 618 DCHECK_CURRENTLY_ON(BrowserThread::UI);
619 // Some unit tests come here without a UserManager or without a pref system.q 619 // Some unit tests come here without a UserManager or without a pref system.q
620 if (!user_manager::UserManager::IsInitialized() || 620 if (!user_manager::UserManager::IsInitialized() ||
621 !g_browser_process->local_state()) { 621 !g_browser_process->local_state()) {
622 return; 622 return;
623 } 623 }
624 624
625 // There is no visible background in kiosk mode. 625 // There is no visible background in kiosk mode.
626 if (user_manager::UserManager::Get()->IsLoggedInAsKioskApp()) 626 if (user_manager::UserManager::Get()->IsLoggedInAsKioskApp())
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after
688 ->ResetSetCustomWallpaper(info, wallpaper_path); 688 ->ResetSetCustomWallpaper(info, wallpaper_path);
689 return; 689 return;
690 } 690 }
691 691
692 // Load downloaded ONLINE or converted DEFAULT wallpapers. 692 // Load downloaded ONLINE or converted DEFAULT wallpapers.
693 GetPendingWallpaper(user_id, delayed)->ResetLoadWallpaper(info); 693 GetPendingWallpaper(user_id, delayed)->ResetLoadWallpaper(info);
694 } 694 }
695 } 695 }
696 696
697 void WallpaperManager::SetWallpaperFromImageSkia( 697 void WallpaperManager::SetWallpaperFromImageSkia(
698 const std::string& user_id, 698 const user_manager::UserID& user_id,
699 const gfx::ImageSkia& image, 699 const gfx::ImageSkia& image,
700 wallpaper::WallpaperLayout layout, 700 wallpaper::WallpaperLayout layout,
701 bool update_wallpaper) { 701 bool update_wallpaper) {
702 DCHECK(user_manager::UserManager::Get()->IsUserLoggedIn()); 702 DCHECK(user_manager::UserManager::Get()->IsUserLoggedIn());
703 703
704 // There is no visible background in kiosk mode. 704 // There is no visible background in kiosk mode.
705 if (user_manager::UserManager::Get()->IsLoggedInAsKioskApp()) 705 if (user_manager::UserManager::Get()->IsLoggedInAsKioskApp())
706 return; 706 return;
707 WallpaperInfo info; 707 WallpaperInfo info;
708 info.layout = layout; 708 info.layout = layout;
(...skipping 30 matching lines...) Expand all
739 BrowserThread::GetBlockingPool() 739 BrowserThread::GetBlockingPool()
740 ->GetSequencedTaskRunnerWithShutdownBehavior( 740 ->GetSequencedTaskRunnerWithShutdownBehavior(
741 sequence_token_, base::SequencedWorkerPool::CONTINUE_ON_SHUTDOWN); 741 sequence_token_, base::SequencedWorkerPool::CONTINUE_ON_SHUTDOWN);
742 wallpaper_loader_ = 742 wallpaper_loader_ =
743 new UserImageLoader(ImageDecoder::ROBUST_JPEG_CODEC, task_runner_); 743 new UserImageLoader(ImageDecoder::ROBUST_JPEG_CODEC, task_runner_);
744 744
745 user_manager::UserManager::Get()->AddSessionStateObserver(this); 745 user_manager::UserManager::Get()->AddSessionStateObserver(this);
746 } 746 }
747 747
748 WallpaperManager::PendingWallpaper* WallpaperManager::GetPendingWallpaper( 748 WallpaperManager::PendingWallpaper* WallpaperManager::GetPendingWallpaper(
749 const std::string& user_id, 749 const user_manager::UserID& user_id,
750 bool delayed) { 750 bool delayed) {
751 if (!pending_inactive_) { 751 if (!pending_inactive_) {
752 loading_.push_back(new WallpaperManager::PendingWallpaper( 752 loading_.push_back(new WallpaperManager::PendingWallpaper(
753 (delayed ? GetWallpaperLoadDelay() 753 (delayed ? GetWallpaperLoadDelay()
754 : base::TimeDelta::FromMilliseconds(0)), 754 : base::TimeDelta::FromMilliseconds(0)),
755 user_id)); 755 user_id));
756 pending_inactive_ = loading_.back().get(); 756 pending_inactive_ = loading_.back().get();
757 } 757 }
758 return pending_inactive_; 758 return pending_inactive_;
759 } 759 }
(...skipping 23 matching lines...) Expand all
783 bool show_users = true; 783 bool show_users = true;
784 bool result = CrosSettings::Get()->GetBoolean( 784 bool result = CrosSettings::Get()->GetBoolean(
785 kAccountsPrefShowUserNamesOnSignIn, &show_users); 785 kAccountsPrefShowUserNamesOnSignIn, &show_users);
786 DCHECK(result) << "Unable to fetch setting " 786 DCHECK(result) << "Unable to fetch setting "
787 << kAccountsPrefShowUserNamesOnSignIn; 787 << kAccountsPrefShowUserNamesOnSignIn;
788 const user_manager::UserList& users = 788 const user_manager::UserList& users =
789 user_manager::UserManager::Get()->GetUsers(); 789 user_manager::UserManager::Get()->GetUsers();
790 int public_session_user_index = FindPublicSession(users); 790 int public_session_user_index = FindPublicSession(users);
791 if ((!show_users && public_session_user_index == -1) || users.empty()) { 791 if ((!show_users && public_session_user_index == -1) || users.empty()) {
792 // Boot into sign in form, preload default wallpaper. 792 // Boot into sign in form, preload default wallpaper.
793 SetDefaultWallpaperDelayed(chromeos::login::kSignInUser); 793 SetDefaultWallpaperDelayed(chromeos::login::GetSignInUserID());
794 return; 794 return;
795 } 795 }
796 796
797 if (!disable_boot_animation) { 797 if (!disable_boot_animation) {
798 int index = public_session_user_index != -1 ? public_session_user_index : 0; 798 int index = public_session_user_index != -1 ? public_session_user_index : 0;
799 // Normal boot, load user wallpaper. 799 // Normal boot, load user wallpaper.
800 // If normal boot animation is disabled wallpaper would be set 800 // If normal boot animation is disabled wallpaper would be set
801 // asynchronously once user pods are loaded. 801 // asynchronously once user pods are loaded.
802 SetUserWallpaperDelayed(users[index]->email()); 802 SetUserWallpaperDelayed(users[index]->GetUserID());
803 } 803 }
804 } 804 }
805 805
806 bool WallpaperManager::GetUserWallpaperInfo(const std::string& user_id, 806 bool WallpaperManager::GetUserWallpaperInfo(const user_manager::UserID& user_id,
807 WallpaperInfo* info) const { 807 WallpaperInfo* info) const {
808 DCHECK_CURRENTLY_ON(BrowserThread::UI); 808 DCHECK_CURRENTLY_ON(BrowserThread::UI);
809 809
810 if (user_manager::UserManager::Get()->IsUserNonCryptohomeDataEphemeral( 810 if (user_manager::UserManager::Get()->IsUserNonCryptohomeDataEphemeral(
811 user_id)) { 811 user_id)) {
812 // Default to the values cached in memory. 812 // Default to the values cached in memory.
813 *info = current_user_wallpaper_info_; 813 *info = current_user_wallpaper_info_;
814 814
815 // Ephemeral users do not save anything to local state. But we have got 815 // Ephemeral users do not save anything to local state. But we have got
816 // wallpaper info from memory. Returns true. 816 // wallpaper info from memory. Returns true.
817 return true; 817 return true;
818 } 818 }
819 819
820 const base::DictionaryValue* info_dict; 820 const base::DictionaryValue* info_dict;
821 if (!g_browser_process->local_state() 821 if (!g_browser_process->local_state()
822 ->GetDictionary(wallpaper::kUsersWallpaperInfo) 822 ->GetDictionary(wallpaper::kUsersWallpaperInfo)
823 ->GetDictionaryWithoutPathExpansion(user_id, &info_dict)) { 823 ->GetDictionaryWithoutPathExpansion(user_id.GetUserEmail(), &info_dic t)) {
824 return false; 824 return false;
825 } 825 }
826 826
827 // Use temporary variables to keep |info| untouched in the error case. 827 // Use temporary variables to keep |info| untouched in the error case.
828 std::string location; 828 std::string location;
829 if (!info_dict->GetString(kNewWallpaperLocationNodeName, &location)) 829 if (!info_dict->GetString(kNewWallpaperLocationNodeName, &location))
830 return false; 830 return false;
831 int layout; 831 int layout;
832 if (!info_dict->GetInteger(kNewWallpaperLayoutNodeName, &layout)) 832 if (!info_dict->GetInteger(kNewWallpaperLayoutNodeName, &layout))
833 return false; 833 return false;
834 int type; 834 int type;
835 if (!info_dict->GetInteger(kNewWallpaperTypeNodeName, &type)) 835 if (!info_dict->GetInteger(kNewWallpaperTypeNodeName, &type))
836 return false; 836 return false;
837 std::string date_string; 837 std::string date_string;
838 if (!info_dict->GetString(kNewWallpaperDateNodeName, &date_string)) 838 if (!info_dict->GetString(kNewWallpaperDateNodeName, &date_string))
839 return false; 839 return false;
840 int64 date_val; 840 int64 date_val;
841 if (!base::StringToInt64(date_string, &date_val)) 841 if (!base::StringToInt64(date_string, &date_val))
842 return false; 842 return false;
843 843
844 info->location = location; 844 info->location = location;
845 info->layout = static_cast<wallpaper::WallpaperLayout>(layout); 845 info->layout = static_cast<wallpaper::WallpaperLayout>(layout);
846 info->type = static_cast<user_manager::User::WallpaperType>(type); 846 info->type = static_cast<user_manager::User::WallpaperType>(type);
847 info->date = base::Time::FromInternalValue(date_val); 847 info->date = base::Time::FromInternalValue(date_val);
848 return true; 848 return true;
849 } 849 }
850 850
851 void WallpaperManager::OnWallpaperDecoded( 851 void WallpaperManager::OnWallpaperDecoded(
852 const std::string& user_id, 852 const user_manager::UserID& user_id,
853 wallpaper::WallpaperLayout layout, 853 wallpaper::WallpaperLayout layout,
854 bool update_wallpaper, 854 bool update_wallpaper,
855 MovableOnDestroyCallbackHolder on_finish, 855 MovableOnDestroyCallbackHolder on_finish,
856 const user_manager::UserImage& user_image) { 856 const user_manager::UserImage& user_image) {
857 DCHECK_CURRENTLY_ON(BrowserThread::UI); 857 DCHECK_CURRENTLY_ON(BrowserThread::UI);
858 TRACE_EVENT_ASYNC_END0("ui", "LoadAndDecodeWallpaper", this); 858 TRACE_EVENT_ASYNC_END0("ui", "LoadAndDecodeWallpaper", this);
859 859
860 // If decoded wallpaper is empty, we have probably failed to decode the file. 860 // If decoded wallpaper is empty, we have probably failed to decode the file.
861 // Use default wallpaper in this case. 861 // Use default wallpaper in this case.
862 if (user_image.image().isNull()) { 862 if (user_image.image().isNull()) {
(...skipping 12 matching lines...) Expand all
875 // Update the image, but keep the path which was set earlier. 875 // Update the image, but keep the path which was set earlier.
876 wallpaper_cache_[user_id].second = user_image.image(); 876 wallpaper_cache_[user_id].second = user_image.image();
877 877
878 if (update_wallpaper) { 878 if (update_wallpaper) {
879 ash::Shell::GetInstance() 879 ash::Shell::GetInstance()
880 ->desktop_background_controller() 880 ->desktop_background_controller()
881 ->SetWallpaperImage(user_image.image(), layout); 881 ->SetWallpaperImage(user_image.image(), layout);
882 } 882 }
883 } 883 }
884 884
885 void WallpaperManager::StartLoad(const std::string& user_id, 885 void WallpaperManager::StartLoad(const user_manager::UserID& user_id,
886 const WallpaperInfo& info, 886 const WallpaperInfo& info,
887 bool update_wallpaper, 887 bool update_wallpaper,
888 const base::FilePath& wallpaper_path, 888 const base::FilePath& wallpaper_path,
889 MovableOnDestroyCallbackHolder on_finish) { 889 MovableOnDestroyCallbackHolder on_finish) {
890 DCHECK_CURRENTLY_ON(BrowserThread::UI); 890 DCHECK_CURRENTLY_ON(BrowserThread::UI);
891 TRACE_EVENT_ASYNC_BEGIN0("ui", "LoadAndDecodeWallpaper", this); 891 TRACE_EVENT_ASYNC_BEGIN0("ui", "LoadAndDecodeWallpaper", this);
892 if (update_wallpaper) { 892 if (update_wallpaper) {
893 // We are now about to change the wallpaper, so update the path and remove 893 // We are now about to change the wallpaper, so update the path and remove
894 // the existing image. 894 // the existing image.
895 wallpaper_cache_[user_id] = CustomWallpaperElement(wallpaper_path, 895 wallpaper_cache_[user_id] = CustomWallpaperElement(wallpaper_path,
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after
954 rescaled_files->path_rescaled_large(), 954 rescaled_files->path_rescaled_large(),
955 large_wallpaper_image.Pass()); 955 large_wallpaper_image.Pass());
956 VLOG(1) << "Customized default wallpaper applied."; 956 VLOG(1) << "Customized default wallpaper applied.";
957 } 957 }
958 958
959 size_t WallpaperManager::GetPendingListSizeForTesting() const { 959 size_t WallpaperManager::GetPendingListSizeForTesting() const {
960 return loading_.size(); 960 return loading_.size();
961 } 961 }
962 962
963 void WallpaperManager::UserChangedChildStatus(user_manager::User* user) { 963 void WallpaperManager::UserChangedChildStatus(user_manager::User* user) {
964 SetUserWallpaperNow(user->email()); 964 SetUserWallpaperNow(user->GetUserID());
965 } 965 }
966 966
967 void WallpaperManager::OnDefaultWallpaperDecoded( 967 void WallpaperManager::OnDefaultWallpaperDecoded(
968 const base::FilePath& path, 968 const base::FilePath& path,
969 const wallpaper::WallpaperLayout layout, 969 const wallpaper::WallpaperLayout layout,
970 scoped_ptr<user_manager::UserImage>* result_out, 970 scoped_ptr<user_manager::UserImage>* result_out,
971 MovableOnDestroyCallbackHolder on_finish, 971 MovableOnDestroyCallbackHolder on_finish,
972 const user_manager::UserImage& user_image) { 972 const user_manager::UserImage& user_image) {
973 result_out->reset(new user_manager::UserImage(user_image)); 973 result_out->reset(new user_manager::UserImage(user_image));
974 ash::Shell::GetInstance()->desktop_background_controller()->SetWallpaperImage( 974 ash::Shell::GetInstance()->desktop_background_controller()->SetWallpaperImage(
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
1024 } else { 1024 } else {
1025 if (large_wallpaper_image) { 1025 if (large_wallpaper_image) {
1026 default_wallpaper_image_.reset( 1026 default_wallpaper_image_.reset(
1027 new user_manager::UserImage(*large_wallpaper_image)); 1027 new user_manager::UserImage(*large_wallpaper_image));
1028 default_wallpaper_image_->set_file_path( 1028 default_wallpaper_image_->set_file_path(
1029 default_large_wallpaper_file.value()); 1029 default_large_wallpaper_file.value());
1030 } 1030 }
1031 } 1031 }
1032 1032
1033 if (need_update_screen) { 1033 if (need_update_screen) {
1034 DoSetDefaultWallpaper(std::string(), 1034 DoSetDefaultWallpaper(user_manager::UserID(std::string(), std::string()),
1035 MovableOnDestroyCallbackHolder().Pass()); 1035 MovableOnDestroyCallbackHolder().Pass());
1036 } 1036 }
1037 } 1037 }
1038 1038
1039 } // namespace chromeos 1039 } // namespace chromeos
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698