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

Side by Side Diff: chrome/browser/chromeos/login/wallpaper_manager.cc

Issue 10829381: Remove call to UserManager::Get when initializing UserManager (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Ivan's review Created 8 years, 4 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
« no previous file with comments | « chrome/browser/chromeos/login/wallpaper_manager.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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/wallpaper_manager.h" 5 #include "chrome/browser/chromeos/login/wallpaper_manager.h"
6 6
7 #include "ash/desktop_background/desktop_background_controller.h" 7 #include "ash/desktop_background/desktop_background_controller.h"
8 #include "ash/shell.h" 8 #include "ash/shell.h"
9 #include "base/command_line.h" 9 #include "base/command_line.h"
10 #include "base/logging.h" 10 #include "base/logging.h"
(...skipping 301 matching lines...) Expand 10 before | Expand all | Expand 10 after
312 BatchUpdateWallpaper(); 312 BatchUpdateWallpaper();
313 } else { 313 } else {
314 // Set up a one shot timer which will batch update wallpaper at midnight. 314 // Set up a one shot timer which will batch update wallpaper at midnight.
315 timer_.Start(FROM_HERE, 315 timer_.Start(FROM_HERE,
316 base::TimeDelta::FromSeconds(remaining_seconds), 316 base::TimeDelta::FromSeconds(remaining_seconds),
317 this, 317 this,
318 &WallpaperManager::BatchUpdateWallpaper); 318 &WallpaperManager::BatchUpdateWallpaper);
319 } 319 }
320 } 320 }
321 321
322 void WallpaperManager::SaveUserWallpaperProperties(const std::string& email, 322 void WallpaperManager::SetUserWallpaperProperties(const std::string& email,
323 User::WallpaperType type, 323 User::WallpaperType type,
324 int index) { 324 int index,
325 bool is_persistent) {
325 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 326 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
326 327
327 current_user_wallpaper_type_ = type; 328 current_user_wallpaper_type_ = type;
328 current_user_wallpaper_index_ = index; 329 current_user_wallpaper_index_ = index;
329 // Ephemeral users can not save data to local state. We just cache the index 330 if (!is_persistent)
330 // in memory for them.
331 if (UserManager::Get()->IsCurrentUserEphemeral())
332 return; 331 return;
333 332
334 PrefService* local_state = g_browser_process->local_state(); 333 PrefService* local_state = g_browser_process->local_state();
335 DictionaryPrefUpdate wallpaper_update(local_state, 334 DictionaryPrefUpdate wallpaper_update(local_state,
336 UserManager::kUserWallpapersProperties); 335 UserManager::kUserWallpapersProperties);
337 336
338 base::DictionaryValue* wallpaper_properties = new base::DictionaryValue(); 337 base::DictionaryValue* wallpaper_properties = new base::DictionaryValue();
339 wallpaper_properties->Set(kWallpaperTypeNodeName, 338 wallpaper_properties->Set(kWallpaperTypeNodeName,
340 new base::FundamentalValue(type)); 339 new base::FundamentalValue(type));
341 wallpaper_properties->Set(kWallpaperIndexNodeName, 340 wallpaper_properties->Set(kWallpaperIndexNodeName,
(...skipping 11 matching lines...) Expand all
353 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 352 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
354 353
355 // For wallpapers, save the image without resizing. 354 // For wallpapers, save the image without resizing.
356 wallpaper_loader_->Start( 355 wallpaper_loader_->Start(
357 path.value(), 0, 356 path.value(), 0,
358 base::Bind(&WallpaperManager::SetWallpaper, 357 base::Bind(&WallpaperManager::SetWallpaper,
359 base::Unretained(this), username, layout, User::CUSTOMIZED, 358 base::Unretained(this), username, layout, User::CUSTOMIZED,
360 delegate)); 359 delegate));
361 } 360 }
362 361
363 void WallpaperManager::SetInitialUserWallpaper(const std::string& username) { 362 void WallpaperManager::SetInitialUserWallpaper(const std::string& username,
363 bool is_persistent) {
364 current_user_wallpaper_type_ = User::DEFAULT; 364 current_user_wallpaper_type_ = User::DEFAULT;
365 if (username == kGuestUser) 365 if (username == kGuestUser)
366 current_user_wallpaper_index_ = ash::GetGuestWallpaperIndex(); 366 current_user_wallpaper_index_ = ash::GetGuestWallpaperIndex();
367 else 367 else
368 current_user_wallpaper_index_ = ash::GetDefaultWallpaperIndex(); 368 current_user_wallpaper_index_ = ash::GetDefaultWallpaperIndex();
369 SaveUserWallpaperProperties(username, 369 SetUserWallpaperProperties(username,
370 current_user_wallpaper_type_, 370 current_user_wallpaper_type_,
371 current_user_wallpaper_index_); 371 current_user_wallpaper_index_,
372 is_persistent);
372 373
373 // Some browser tests do not have shell instance. And it is not necessary to 374 // Some browser tests do not have shell instance. And it is not necessary to
374 // create a wallpaper for these tests. Add HasInstance check to prevent tests 375 // create a wallpaper for these tests. Add HasInstance check to prevent tests
375 // crash and speed up the tests by avoid loading wallpaper. 376 // crash and speed up the tests by avoid loading wallpaper.
376 if (ash::Shell::HasInstance()) { 377 if (ash::Shell::HasInstance()) {
377 ash::Shell::GetInstance()->desktop_background_controller()-> 378 ash::Shell::GetInstance()->desktop_background_controller()->
378 SetDefaultWallpaper(current_user_wallpaper_index_, false); 379 SetDefaultWallpaper(current_user_wallpaper_index_, false);
379 } 380 }
380 } 381 }
381 382
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
417 418
418 if (!UserManager::Get()->IsKnownUser(email)) 419 if (!UserManager::Get()->IsKnownUser(email))
419 return; 420 return;
420 421
421 User::WallpaperType type; 422 User::WallpaperType type;
422 int index; 423 int index;
423 base::Time date; 424 base::Time date;
424 GetUserWallpaperProperties(email, &type, &index, &date); 425 GetUserWallpaperProperties(email, &type, &index, &date);
425 if (type == User::DAILY && date != base::Time::Now().LocalMidnight()) { 426 if (type == User::DAILY && date != base::Time::Now().LocalMidnight()) {
426 index = ash::GetNextWallpaperIndex(index); 427 index = ash::GetNextWallpaperIndex(index);
427 SaveUserWallpaperProperties(email, User::DAILY, index); 428 SetUserWallpaperProperties(email, User::DAILY, index,
429 ShouldPersistDataForUser(email));
428 } else if (type == User::CUSTOMIZED) { 430 } else if (type == User::CUSTOMIZED) {
429 // For security reason, use default wallpaper instead of custom wallpaper 431 // For security reason, use default wallpaper instead of custom wallpaper
430 // at login screen. The security issue is tracked in issue 143198. Once it 432 // at login screen. The security issue is tracked in issue 143198. Once it
431 // fixed, we should then only use custom wallpaper. 433 // fixed, we should then only use custom wallpaper.
432 if (!UserManager::Get()->IsUserLoggedIn()) { 434 if (!UserManager::Get()->IsUserLoggedIn()) {
433 index = ash::GetDefaultWallpaperIndex(); 435 index = ash::GetDefaultWallpaperIndex();
434 } else { 436 } else {
435 FetchCustomWallpaper(email); 437 FetchCustomWallpaper(email);
436 return; 438 return;
437 } 439 }
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
470 int index = 0; 472 int index = 0;
471 base::Time last_modification_date; 473 base::Time last_modification_date;
472 const UserList& users = user_manager->GetUsers(); 474 const UserList& users = user_manager->GetUsers();
473 for (UserList::const_iterator it = users.begin(); 475 for (UserList::const_iterator it = users.begin();
474 it != users.end(); ++it) { 476 it != users.end(); ++it) {
475 std::string email = (*it)->email(); 477 std::string email = (*it)->email();
476 GetUserWallpaperProperties(email, &type, &index, &last_modification_date); 478 GetUserWallpaperProperties(email, &type, &index, &last_modification_date);
477 base::Time current_date = base::Time::Now().LocalMidnight(); 479 base::Time current_date = base::Time::Now().LocalMidnight();
478 if (type == User::DAILY && current_date != last_modification_date) { 480 if (type == User::DAILY && current_date != last_modification_date) {
479 index = ash::GetNextWallpaperIndex(index); 481 index = ash::GetNextWallpaperIndex(index);
480 SaveUserWallpaperProperties(email, type, index); 482 SetUserWallpaperProperties(email, type, index, true);
481 } 483 }
482 // Force a wallpaper update for logged in / last selected user. 484 // Force a wallpaper update for logged in / last selected user.
483 // TODO(bshe): Notify lock screen, wallpaper picker UI to update wallpaper 485 // TODO(bshe): Notify lock screen, wallpaper picker UI to update wallpaper
484 // as well. 486 // as well.
485 if (user_manager->IsUserLoggedIn() && 487 if (user_manager->IsUserLoggedIn() &&
486 email == user_manager->GetLoggedInUser().email()) { 488 email == user_manager->GetLoggedInUser().email()) {
487 SetUserWallpaper(email); 489 SetUserWallpaper(email);
488 } else if (show_users && 490 } else if (show_users &&
489 email == last_selected_user_) { 491 email == last_selected_user_) {
490 SetUserWallpaper(email); 492 SetUserWallpaper(email);
(...skipping 139 matching lines...) Expand 10 before | Expand all | Expand 10 after
630 void WallpaperManager::SetWallpaper(const std::string& username, 632 void WallpaperManager::SetWallpaper(const std::string& username,
631 ash::WallpaperLayout layout, 633 ash::WallpaperLayout layout,
632 User::WallpaperType type, 634 User::WallpaperType type,
633 base::WeakPtr<WallpaperDelegate> delegate, 635 base::WeakPtr<WallpaperDelegate> delegate,
634 const UserImage& wallpaper) { 636 const UserImage& wallpaper) {
635 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 637 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
636 638
637 std::string wallpaper_path = 639 std::string wallpaper_path =
638 GetWallpaperPathForUser(username, false).value(); 640 GetWallpaperPathForUser(username, false).value();
639 641
640 // TODO(bshe): Ephemeral user should not save custom wallpaper to disk. 642 bool is_persistent = ShouldPersistDataForUser(username);
641 BrowserThread::PostTask( 643
642 BrowserThread::FILE, 644 if (is_persistent) {
643 FROM_HERE, 645 BrowserThread::PostTask(
644 base::Bind(&WallpaperManager::SaveWallpaper, 646 BrowserThread::FILE,
645 base::Unretained(this), wallpaper_path, wallpaper)); 647 FROM_HERE,
648 base::Bind(&WallpaperManager::SaveWallpaper,
649 base::Unretained(this), wallpaper_path, wallpaper));
650 }
646 651
647 BrowserThread::PostTask( 652 BrowserThread::PostTask(
648 BrowserThread::FILE, 653 BrowserThread::FILE,
649 FROM_HERE, 654 FROM_HERE,
650 base::Bind(&WallpaperManager::GenerateUserWallpaperThumbnail, 655 base::Bind(&WallpaperManager::GenerateUserWallpaperThumbnail,
651 base::Unretained(this), username, type, delegate, 656 base::Unretained(this), username, type, delegate,
652 wallpaper.image())); 657 wallpaper.image()));
653 658
654 ash::Shell::GetInstance()->desktop_background_controller()-> 659 ash::Shell::GetInstance()->desktop_background_controller()->
655 SetCustomWallpaper(wallpaper.image(), layout); 660 SetCustomWallpaper(wallpaper.image(), layout);
656 SaveUserWallpaperProperties(username, type, layout); 661 SetUserWallpaperProperties(username, type, layout, is_persistent);
662 }
663
664 bool WallpaperManager::ShouldPersistDataForUser(const std::string& email) {
665 UserManager* user_manager = UserManager::Get();
666 return !(email == user_manager->GetLoggedInUser().email() &&
667 user_manager->IsCurrentUserEphemeral());
657 } 668 }
658 669
659 void WallpaperManager::OnWallpaperLoaded(ash::WallpaperLayout layout, 670 void WallpaperManager::OnWallpaperLoaded(ash::WallpaperLayout layout,
660 const UserImage& user_image) { 671 const UserImage& user_image) {
661 SetWallpaperFromImageSkia(user_image.image(), layout); 672 SetWallpaperFromImageSkia(user_image.image(), layout);
662 } 673 }
663 674
664 void WallpaperManager::SystemResumed() { 675 void WallpaperManager::SystemResumed() {
665 BatchUpdateWallpaper(); 676 BatchUpdateWallpaper();
666 } 677 }
667 678
668 void WallpaperManager::TimezoneChanged(const icu::TimeZone& timezone) { 679 void WallpaperManager::TimezoneChanged(const icu::TimeZone& timezone) {
669 RestartTimer(); 680 RestartTimer();
670 } 681 }
671 682
672 } // chromeos 683 } // chromeos
OLDNEW
« no previous file with comments | « chrome/browser/chromeos/login/wallpaper_manager.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698