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

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

Issue 215293003: Move all wallpaper file loading and decoding from DesktopBackgroundController to WallpaperManager. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix windows build. Created 6 years, 8 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 (c) 2013 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/chromeos/login/wallpaper_manager.h" 5 #include "chrome/browser/chromeos/login/wallpaper_manager.h"
6 6
7 #include <numeric> 7 #include <numeric>
8 #include <vector> 8 #include <vector>
9 9
10 #include "ash/ash_switches.h"
11 #include "ash/desktop_background/desktop_background_controller.h"
10 #include "ash/shell.h" 12 #include "ash/shell.h"
11 #include "base/command_line.h" 13 #include "base/command_line.h"
12 #include "base/debug/trace_event.h" 14 #include "base/debug/trace_event.h"
13 #include "base/file_util.h" 15 #include "base/file_util.h"
14 #include "base/files/file_enumerator.h" 16 #include "base/files/file_enumerator.h"
15 #include "base/files/file_path.h" 17 #include "base/files/file_path.h"
16 #include "base/logging.h" 18 #include "base/logging.h"
17 #include "base/metrics/histogram.h" 19 #include "base/metrics/histogram.h"
18 #include "base/path_service.h" 20 #include "base/path_service.h"
19 #include "base/prefs/pref_registry_simple.h" 21 #include "base/prefs/pref_registry_simple.h"
20 #include "base/prefs/pref_service.h" 22 #include "base/prefs/pref_service.h"
21 #include "base/prefs/scoped_user_pref_update.h" 23 #include "base/prefs/scoped_user_pref_update.h"
22 #include "base/strings/string_number_conversions.h" 24 #include "base/strings/string_number_conversions.h"
23 #include "base/strings/string_util.h" 25 #include "base/strings/string_util.h"
24 #include "base/strings/stringprintf.h" 26 #include "base/strings/stringprintf.h"
25 #include "base/threading/worker_pool.h" 27 #include "base/threading/worker_pool.h"
26 #include "base/time/time.h" 28 #include "base/time/time.h"
27 #include "base/values.h" 29 #include "base/values.h"
28 #include "chrome/browser/browser_process.h" 30 #include "chrome/browser/browser_process.h"
29 #include "chrome/browser/chrome_notification_types.h" 31 #include "chrome/browser/chrome_notification_types.h"
32 #include "chrome/browser/chromeos/customization_document.h"
Daniel Erat 2014/03/31 22:25:46 did you mean to add this include in the next chang
Alexander Alekseev 2014/04/03 19:15:44 Done.
30 #include "chrome/browser/chromeos/login/startup_utils.h" 33 #include "chrome/browser/chromeos/login/startup_utils.h"
31 #include "chrome/browser/chromeos/login/user.h" 34 #include "chrome/browser/chromeos/login/user.h"
32 #include "chrome/browser/chromeos/login/user_manager.h" 35 #include "chrome/browser/chromeos/login/user_manager.h"
33 #include "chrome/browser/chromeos/login/wizard_controller.h" 36 #include "chrome/browser/chromeos/login/wizard_controller.h"
34 #include "chrome/browser/chromeos/settings/cros_settings.h" 37 #include "chrome/browser/chromeos/settings/cros_settings.h"
35 #include "chrome/common/chrome_paths.h" 38 #include "chrome/common/chrome_paths.h"
36 #include "chrome/common/chrome_switches.h" 39 #include "chrome/common/chrome_switches.h"
37 #include "chrome/common/pref_names.h" 40 #include "chrome/common/pref_names.h"
38 #include "chromeos/chromeos_switches.h" 41 #include "chromeos/chromeos_switches.h"
39 #include "chromeos/dbus/dbus_thread_manager.h" 42 #include "chromeos/dbus/dbus_thread_manager.h"
40 #include "content/public/browser/browser_thread.h" 43 #include "content/public/browser/browser_thread.h"
41 #include "content/public/browser/notification_service.h" 44 #include "content/public/browser/notification_service.h"
42 #include "ui/base/resource/resource_bundle.h" 45 #include "ui/base/resource/resource_bundle.h"
43 #include "ui/gfx/codec/jpeg_codec.h" 46 #include "ui/gfx/codec/jpeg_codec.h"
44 #include "ui/gfx/image/image_skia_operations.h" 47 #include "ui/gfx/image/image_skia_operations.h"
45 #include "ui/gfx/skia_util.h" 48 #include "ui/gfx/skia_util.h"
46 49
47 using content::BrowserThread; 50 using content::BrowserThread;
48 51
52 namespace chromeos {
53
49 namespace { 54 namespace {
50 55
51 // The amount of delay before starts to move custom wallpapers to the new place. 56 // The amount of delay before starts to move custom wallpapers to the new place.
52 const int kMoveCustomWallpaperDelaySeconds = 30; 57 const int kMoveCustomWallpaperDelaySeconds = 30;
53 58
54 // Default quality for encoding wallpaper. 59 // Default quality for encoding wallpaper.
55 const int kDefaultEncodingQuality = 90; 60 const int kDefaultEncodingQuality = 90;
56 61
57 // A dictionary pref that maps usernames to file paths to their wallpapers. 62 // A dictionary pref that maps usernames to file paths to their wallpapers.
58 // Deprecated. Will remove this const char after done migration. 63 // Deprecated. Will remove this const char after done migration.
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
107 base::FilePath base_path = GetCustomWallpaperDir(sub_dir); 112 base::FilePath base_path = GetCustomWallpaperDir(sub_dir);
108 base::FilePath to_path = base_path.Append(user_id_hash); 113 base::FilePath to_path = base_path.Append(user_id_hash);
109 base::FilePath from_path = base_path.Append(user_id); 114 base::FilePath from_path = base_path.Append(user_id);
110 if (base::PathExists(from_path)) 115 if (base::PathExists(from_path))
111 return base::Move(from_path, to_path); 116 return base::Move(from_path, to_path);
112 return false; 117 return false;
113 } 118 }
114 119
115 } // namespace 120 } // namespace
116 121
117 namespace chromeos {
118
119 const char kWallpaperSequenceTokenName[] = "wallpaper-sequence"; 122 const char kWallpaperSequenceTokenName[] = "wallpaper-sequence";
120 123
121 const char kSmallWallpaperSuffix[] = "_small"; 124 const char kSmallWallpaperSuffix[] = "_small";
122 const char kLargeWallpaperSuffix[] = "_large"; 125 const char kLargeWallpaperSuffix[] = "_large";
123 126
124 const char kSmallWallpaperSubDir[] = "small"; 127 const char kSmallWallpaperSubDir[] = "small";
125 const char kLargeWallpaperSubDir[] = "large"; 128 const char kLargeWallpaperSubDir[] = "large";
126 const char kOriginalWallpaperSubDir[] = "original"; 129 const char kOriginalWallpaperSubDir[] = "original";
127 const char kThumbnailWallpaperSubDir[] = "thumb"; 130 const char kThumbnailWallpaperSubDir[] = "thumb";
128 131
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after
201 204
202 WallpaperManager* manager = WallpaperManager::Get(); 205 WallpaperManager* manager = WallpaperManager::Get();
203 if (manager->pending_inactive_ == this) 206 if (manager->pending_inactive_ == this)
204 manager->pending_inactive_ = NULL; 207 manager->pending_inactive_ = NULL;
205 208
206 started_load_at_ = base::Time::Now(); 209 started_load_at_ = base::Time::Now();
207 210
208 if (default_) { 211 if (default_) {
209 manager->DoSetDefaultWallpaper(user_id_, on_finish_.Pass()); 212 manager->DoSetDefaultWallpaper(user_id_, on_finish_.Pass());
210 } else if (!user_wallpaper_.isNull()) { 213 } else if (!user_wallpaper_.isNull()) {
211 ash::Shell::GetInstance()-> 214 ash::Shell::GetInstance()->desktop_background_controller()->SetWallpaper(
212 desktop_background_controller()-> 215 user_wallpaper_, info_.layout);
213 SetCustomWallpaper(user_wallpaper_, info_.layout);
214 } else if (!wallpaper_path_.empty()) { 216 } else if (!wallpaper_path_.empty()) {
215 manager->task_runner_->PostTask( 217 manager->task_runner_->PostTask(
216 FROM_HERE, 218 FROM_HERE,
217 base::Bind(&WallpaperManager::GetCustomWallpaperInternal, 219 base::Bind(&WallpaperManager::GetCustomWallpaperInternal,
218 base::Unretained(manager), 220 base::Unretained(manager),
219 user_id_, 221 user_id_,
220 info_, 222 info_,
221 wallpaper_path_, 223 wallpaper_path_,
222 true /* update wallpaper */, 224 true /* update wallpaper */,
223 base::Passed(on_finish_.Pass()))); 225 base::Passed(on_finish_.Pass())));
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after
299 g_wallpaper_manager = new WallpaperManager(); 301 g_wallpaper_manager = new WallpaperManager();
300 return g_wallpaper_manager; 302 return g_wallpaper_manager;
301 } 303 }
302 304
303 WallpaperManager::WallpaperManager() 305 WallpaperManager::WallpaperManager()
304 : loaded_wallpapers_(0), 306 : loaded_wallpapers_(0),
305 command_line_for_testing_(NULL), 307 command_line_for_testing_(NULL),
306 should_cache_wallpaper_(false), 308 should_cache_wallpaper_(false),
307 weak_factory_(this), 309 weak_factory_(this),
308 pending_inactive_(NULL) { 310 pending_inactive_(NULL) {
311 SetDefaultWallpaperPathFromCommandLine(
312 base::CommandLine::ForCurrentProcess());
309 registrar_.Add(this, 313 registrar_.Add(this,
310 chrome::NOTIFICATION_LOGIN_USER_CHANGED, 314 chrome::NOTIFICATION_LOGIN_USER_CHANGED,
311 content::NotificationService::AllSources()); 315 content::NotificationService::AllSources());
312 registrar_.Add(this, 316 registrar_.Add(this,
313 chrome::NOTIFICATION_LOGIN_OR_LOCK_WEBUI_VISIBLE, 317 chrome::NOTIFICATION_LOGIN_OR_LOCK_WEBUI_VISIBLE,
314 content::NotificationService::AllSources()); 318 content::NotificationService::AllSources());
315 registrar_.Add(this, 319 registrar_.Add(this,
316 chrome::NOTIFICATION_WALLPAPER_ANIMATION_FINISHED, 320 chrome::NOTIFICATION_WALLPAPER_ANIMATION_FINISHED,
317 content::NotificationService::AllSources()); 321 content::NotificationService::AllSources());
318 sequence_token_ = BrowserThread::GetBlockingPool()-> 322 sequence_token_ = BrowserThread::GetBlockingPool()->
(...skipping 194 matching lines...) Expand 10 before | Expand all | Expand 10 after
513 prefs::kUsersWallpaperInfo); 517 prefs::kUsersWallpaperInfo);
514 prefs_wallpapers_info_update->RemoveWithoutPathExpansion(user_id, NULL); 518 prefs_wallpapers_info_update->RemoveWithoutPathExpansion(user_id, NULL);
515 DeleteUserWallpapers(user_id, info.file); 519 DeleteUserWallpapers(user_id, info.file);
516 } 520 }
517 521
518 bool WallpaperManager::ResizeWallpaper( 522 bool WallpaperManager::ResizeWallpaper(
519 const UserImage& wallpaper, 523 const UserImage& wallpaper,
520 ash::WallpaperLayout layout, 524 ash::WallpaperLayout layout,
521 int preferred_width, 525 int preferred_width,
522 int preferred_height, 526 int preferred_height,
523 scoped_refptr<base::RefCountedBytes>* output) const { 527 scoped_refptr<base::RefCountedBytes>* output,
528 gfx::ImageSkia* output_skia) const {
524 DCHECK(BrowserThread::GetBlockingPool()-> 529 DCHECK(BrowserThread::GetBlockingPool()->
525 IsRunningSequenceOnCurrentThread(sequence_token_)); 530 IsRunningSequenceOnCurrentThread(sequence_token_));
526 int width = wallpaper.image().width(); 531 int width = wallpaper.image().width();
527 int height = wallpaper.image().height(); 532 int height = wallpaper.image().height();
528 int resized_width; 533 int resized_width;
529 int resized_height; 534 int resized_height;
530 *output = new base::RefCountedBytes(); 535 *output = new base::RefCountedBytes();
531 536
532 if (layout == ash::WALLPAPER_LAYOUT_CENTER_CROPPED) { 537 if (layout == ash::WALLPAPER_LAYOUT_CENTER_CROPPED) {
533 // Do not resize custom wallpaper if it is smaller than preferred size. 538 // Do not resize custom wallpaper if it is smaller than preferred size.
(...skipping 26 matching lines...) Expand all
560 565
561 SkBitmap image = *(resized_image.bitmap()); 566 SkBitmap image = *(resized_image.bitmap());
562 SkAutoLockPixels lock_input(image); 567 SkAutoLockPixels lock_input(image);
563 gfx::JPEGCodec::Encode( 568 gfx::JPEGCodec::Encode(
564 reinterpret_cast<unsigned char*>(image.getAddr32(0, 0)), 569 reinterpret_cast<unsigned char*>(image.getAddr32(0, 0)),
565 gfx::JPEGCodec::FORMAT_SkBitmap, 570 gfx::JPEGCodec::FORMAT_SkBitmap,
566 image.width(), 571 image.width(),
567 image.height(), 572 image.height(),
568 image.width() * image.bytesPerPixel(), 573 image.width() * image.bytesPerPixel(),
569 kDefaultEncodingQuality, &(*output)->data()); 574 kDefaultEncodingQuality, &(*output)->data());
575
576 if (output_skia) {
577 resized_image.MakeThreadSafe();
578 *output_skia = resized_image;
579 }
580
570 return true; 581 return true;
571 } 582 }
572 583
573 void WallpaperManager::ResizeAndSaveWallpaper(const UserImage& wallpaper, 584 bool WallpaperManager::ResizeAndSaveWallpaper(const UserImage& wallpaper,
574 const base::FilePath& path, 585 const base::FilePath& path,
575 ash::WallpaperLayout layout, 586 ash::WallpaperLayout layout,
576 int preferred_width, 587 int preferred_width,
577 int preferred_height) const { 588 int preferred_height,
589 gfx::ImageSkia* result) const {
578 if (layout == ash::WALLPAPER_LAYOUT_CENTER) { 590 if (layout == ash::WALLPAPER_LAYOUT_CENTER) {
579 // TODO(bshe): Generates cropped custom wallpaper for CENTER layout. 591 // TODO(bshe): Generates cropped custom wallpaper for CENTER layout.
580 if (base::PathExists(path)) 592 if (base::PathExists(path))
581 base::DeleteFile(path, false); 593 base::DeleteFile(path, false);
582 return; 594 return false;
583 } 595 }
584 scoped_refptr<base::RefCountedBytes> data; 596 scoped_refptr<base::RefCountedBytes> data;
585 if (ResizeWallpaper(wallpaper, layout, preferred_width, preferred_height, 597 if (ResizeWallpaper(wallpaper,
586 &data)) { 598 layout,
587 SaveWallpaperInternal(path, 599 preferred_width,
588 reinterpret_cast<const char*>(data->front()), 600 preferred_height,
589 data->size()); 601 &data,
602 result)) {
603 return SaveWallpaperInternal(
604 path, reinterpret_cast<const char*>(data->front()), data->size());
590 } 605 }
606 return false;
591 } 607 }
592 608
593 bool WallpaperManager::IsPolicyControlled(const std::string& user_id) const { 609 bool WallpaperManager::IsPolicyControlled(const std::string& user_id) const {
594 chromeos::WallpaperInfo info; 610 chromeos::WallpaperInfo info;
595 if (!GetUserWallpaperInfo(user_id, &info)) 611 if (!GetUserWallpaperInfo(user_id, &info))
596 return false; 612 return false;
597 return info.type == chromeos::User::POLICY; 613 return info.type == chromeos::User::POLICY;
598 } 614 }
599 615
600 void WallpaperManager::OnPolicySet(const std::string& policy, 616 void WallpaperManager::OnPolicySet(const std::string& policy,
(...skipping 121 matching lines...) Expand 10 before | Expand all | Expand 10 after
722 } 738 }
723 739
724 void WallpaperManager::SetDefaultWallpaperNow(const std::string& user_id) { 740 void WallpaperManager::SetDefaultWallpaperNow(const std::string& user_id) {
725 GetPendingWallpaper(user_id, false)->ResetSetDefaultWallpaper(); 741 GetPendingWallpaper(user_id, false)->ResetSetDefaultWallpaper();
726 } 742 }
727 743
728 void WallpaperManager::SetDefaultWallpaperDelayed(const std::string& user_id) { 744 void WallpaperManager::SetDefaultWallpaperDelayed(const std::string& user_id) {
729 GetPendingWallpaper(user_id, true)->ResetSetDefaultWallpaper(); 745 GetPendingWallpaper(user_id, true)->ResetSetDefaultWallpaper();
730 } 746 }
731 747
748 void WallpaperManager::OnDefaultWallpaperDecoded(
749 const base::FilePath& path,
750 scoped_ptr<gfx::ImageSkia>* result,
751 MovableOnDestroyCallbackHolder on_finish,
752 const UserImage& wallpaper) {
753 result->reset(new gfx::ImageSkia);
754 (**result) = wallpaper.image();
755 ash::Shell::GetInstance()->desktop_background_controller()->SetWallpaper(
756 wallpaper.image(), ash::WALLPAPER_LAYOUT_STRETCH);
757 }
758
759 void WallpaperManager::StartLoadAndSetDefaultWallpaper(
760 const base::FilePath& path,
761 scoped_ptr<gfx::ImageSkia>* result,
762 MovableOnDestroyCallbackHolder on_finish) {
bshe 2014/04/01 15:32:56 I dont see anywhere using wallpaper that packed in
Alexander Alekseev 2014/04/03 19:15:44 Done.
763 wallpaper_loader_->Start(
764 path.value(),
765 0, // Do not crop.
766 base::Bind(&WallpaperManager::OnDefaultWallpaperDecoded,
767 base::Unretained(this),
768 path,
769 base::Unretained(result),
770 base::Passed(on_finish.Pass())));
771 }
772
732 void WallpaperManager::DoSetDefaultWallpaper( 773 void WallpaperManager::DoSetDefaultWallpaper(
733 const std::string& user_id, 774 const std::string& user_id,
734 MovableOnDestroyCallbackHolder on_finish) { 775 MovableOnDestroyCallbackHolder on_finish) {
735 // There is no visible background in kiosk mode. 776 // There is no visible background in kiosk mode.
736 if (UserManager::Get()->IsLoggedInAsKioskApp()) 777 if (UserManager::Get()->IsLoggedInAsKioskApp())
737 return; 778 return;
738 current_wallpaper_path_.clear(); 779 current_wallpaper_path_.clear();
739 wallpaper_cache_.erase(user_id); 780 wallpaper_cache_.erase(user_id);
740 // Some browser tests do not have a shell instance. As no wallpaper is needed 781 // Some browser tests do not have a shell instance. As no wallpaper is needed
741 // in these tests anyway, avoid loading one, preventing crashes and speeding 782 // in these tests anyway, avoid loading one, preventing crashes and speeding
742 // up the tests. 783 // up the tests.
743 if (!ash::Shell::HasInstance()) 784 if (!ash::Shell::HasInstance())
744 return; 785 return;
745 if (ash::Shell::GetInstance()->desktop_background_controller()-> 786
746 SetDefaultWallpaper(UserManager::Get()->IsLoggedInAsGuest())) 787 const bool is_guest = UserManager::Get()->IsLoggedInAsGuest();
747 loaded_wallpapers_++; 788
789 gfx::ImageSkia image;
790
791 ash::WallpaperResolution resolution = ash::Shell::GetInstance()
792 ->desktop_background_controller()
793 ->GetAppropriateResolution();
794 const bool use_small = (resolution == ash::WALLPAPER_RESOLUTION_SMALL);
795
796 if (is_guest) {
797 if (use_small) {
798 if (guest_default_small_wallpaper_image_.get() == NULL) {
Daniel Erat 2014/03/31 22:25:46 nit: just do "if (!guest_default_small_wallpaper_i
Alexander Alekseev 2014/04/03 19:15:44 Done.
799 StartLoadAndSetDefaultWallpaper(guest_default_small_wallpaper_file_,
800 &guest_default_small_wallpaper_image_,
801 on_finish.Pass());
802 return;
803 }
804 image = *guest_default_small_wallpaper_image_;
805 } else {
806 if (guest_default_large_wallpaper_image_.get() == NULL) {
Daniel Erat 2014/03/31 22:25:46 there's a lot of duplicated code here. how about d
Alexander Alekseev 2014/04/03 19:15:44 Done.
807 StartLoadAndSetDefaultWallpaper(guest_default_large_wallpaper_file_,
808 &guest_default_large_wallpaper_image_,
809 on_finish.Pass());
810 return;
811 }
812 image = *guest_default_large_wallpaper_image_;
813 }
814 } else {
815 // not guest
816 if (use_small) {
817 if (default_small_wallpaper_image_.get() == NULL) {
818 StartLoadAndSetDefaultWallpaper(default_small_wallpaper_file_,
819 &default_small_wallpaper_image_,
820 on_finish.Pass());
821 return;
822 }
823 image = *default_small_wallpaper_image_;
824 } else {
825 if (default_large_wallpaper_image_.get() == NULL) {
826 StartLoadAndSetDefaultWallpaper(default_large_wallpaper_file_,
827 &default_large_wallpaper_image_,
828 on_finish.Pass());
829 return;
830 }
831 image = *default_large_wallpaper_image_;
832 }
833 }
834 ash::Shell::GetInstance()->desktop_background_controller()->SetWallpaper(
835 image, ash::WALLPAPER_LAYOUT_STRETCH);
748 } 836 }
749 837
750 void WallpaperManager::InitInitialUserWallpaper(const std::string& user_id, 838 void WallpaperManager::InitInitialUserWallpaper(const std::string& user_id,
751 bool is_persistent) { 839 bool is_persistent) {
752 current_user_wallpaper_info_.file = ""; 840 current_user_wallpaper_info_.file = "";
753 current_user_wallpaper_info_.layout = ash::WALLPAPER_LAYOUT_CENTER_CROPPED; 841 current_user_wallpaper_info_.layout = ash::WALLPAPER_LAYOUT_CENTER_CROPPED;
754 current_user_wallpaper_info_.type = User::DEFAULT; 842 current_user_wallpaper_info_.type = User::DEFAULT;
755 current_user_wallpaper_info_.date = base::Time::Now().LocalMidnight(); 843 current_user_wallpaper_info_.date = base::Time::Now().LocalMidnight();
756 844
757 WallpaperInfo info = current_user_wallpaper_info_; 845 WallpaperInfo info = current_user_wallpaper_info_;
(...skipping 305 matching lines...) Expand 10 before | Expand all | Expand 10 after
1063 dir = GetCustomWallpaperDir(kOriginalWallpaperSubDir); 1151 dir = GetCustomWallpaperDir(kOriginalWallpaperSubDir);
1064 dir = dir.Append(user_id_hash); 1152 dir = dir.Append(user_id_hash);
1065 if (!base::PathExists(dir)) 1153 if (!base::PathExists(dir))
1066 base::CreateDirectory(dir); 1154 base::CreateDirectory(dir);
1067 dir = GetCustomWallpaperDir(kThumbnailWallpaperSubDir); 1155 dir = GetCustomWallpaperDir(kThumbnailWallpaperSubDir);
1068 dir = dir.Append(user_id_hash); 1156 dir = dir.Append(user_id_hash);
1069 if (!base::PathExists(dir)) 1157 if (!base::PathExists(dir))
1070 base::CreateDirectory(dir); 1158 base::CreateDirectory(dir);
1071 } 1159 }
1072 1160
1161 void WallpaperManager::set_command_line_for_testing(
1162 base::CommandLine* command_line) {
1163 command_line_for_testing_ = command_line;
1164 SetDefaultWallpaperPathFromCommandLine(command_line);
1165 }
1166
1073 CommandLine* WallpaperManager::GetComandLine() { 1167 CommandLine* WallpaperManager::GetComandLine() {
Daniel Erat 2014/03/31 22:25:46 s/Comand/Command/ (please fix this typo elsewhere
Alexander Alekseev 2014/04/03 19:15:44 Done.
1074 CommandLine* command_line = command_line_for_testing_ ? 1168 CommandLine* command_line = command_line_for_testing_ ?
1075 command_line_for_testing_ : CommandLine::ForCurrentProcess(); 1169 command_line_for_testing_ : CommandLine::ForCurrentProcess();
1076 return command_line; 1170 return command_line;
1077 } 1171 }
1078 1172
1079 void WallpaperManager::InitializeRegisteredDeviceWallpaper() { 1173 void WallpaperManager::InitializeRegisteredDeviceWallpaper() {
1080 if (UserManager::Get()->IsUserLoggedIn()) 1174 if (UserManager::Get()->IsUserLoggedIn())
1081 return; 1175 return;
1082 1176
1083 bool disable_boot_animation = GetComandLine()-> 1177 bool disable_boot_animation = GetComandLine()->
(...skipping 230 matching lines...) Expand 10 before | Expand all | Expand 10 after
1314 return; 1408 return;
1315 } 1409 }
1316 1410
1317 // Only cache the user wallpaper at login screen and for multi profile users. 1411 // Only cache the user wallpaper at login screen and for multi profile users.
1318 if (!UserManager::Get()->IsUserLoggedIn() || 1412 if (!UserManager::Get()->IsUserLoggedIn() ||
1319 UserManager::IsMultipleProfilesAllowed()) { 1413 UserManager::IsMultipleProfilesAllowed()) {
1320 wallpaper_cache_[user_id] = wallpaper.image(); 1414 wallpaper_cache_[user_id] = wallpaper.image();
1321 } 1415 }
1322 1416
1323 if (update_wallpaper) { 1417 if (update_wallpaper) {
1324 ash::Shell::GetInstance()->desktop_background_controller()-> 1418 ash::Shell::GetInstance()->desktop_background_controller()->SetWallpaper(
1325 SetCustomWallpaper(wallpaper.image(), layout); 1419 wallpaper.image(), layout);
1326 } 1420 }
1327 } 1421 }
1328 1422
1329 void WallpaperManager::ProcessCustomWallpaper( 1423 void WallpaperManager::ProcessCustomWallpaper(
1330 const std::string& user_id_hash, 1424 const std::string& user_id_hash,
1331 bool persistent, 1425 bool persistent,
1332 const WallpaperInfo& info, 1426 const WallpaperInfo& info,
1333 scoped_ptr<gfx::ImageSkia> image, 1427 scoped_ptr<gfx::ImageSkia> image,
1334 const UserImage::RawImage& raw_image) { 1428 const UserImage::RawImage& raw_image) {
1335 DCHECK(BrowserThread::GetBlockingPool()-> 1429 DCHECK(BrowserThread::GetBlockingPool()->
(...skipping 14 matching lines...) Expand all
1350 EnsureCustomWallpaperDirectories(user_id_hash); 1444 EnsureCustomWallpaperDirectories(user_id_hash);
1351 std::string file_name = original_path.BaseName().value(); 1445 std::string file_name = original_path.BaseName().value();
1352 base::FilePath small_wallpaper_path = 1446 base::FilePath small_wallpaper_path =
1353 GetCustomWallpaperPath(kSmallWallpaperSubDir, user_id_hash, file_name); 1447 GetCustomWallpaperPath(kSmallWallpaperSubDir, user_id_hash, file_name);
1354 base::FilePath large_wallpaper_path = 1448 base::FilePath large_wallpaper_path =
1355 GetCustomWallpaperPath(kLargeWallpaperSubDir, user_id_hash, file_name); 1449 GetCustomWallpaperPath(kLargeWallpaperSubDir, user_id_hash, file_name);
1356 1450
1357 // Re-encode orginal file to jpeg format and saves the result in case that 1451 // Re-encode orginal file to jpeg format and saves the result in case that
1358 // resized wallpaper is not generated (i.e. chrome shutdown before resized 1452 // resized wallpaper is not generated (i.e. chrome shutdown before resized
1359 // wallpaper is saved). 1453 // wallpaper is saved).
1360 ResizeAndSaveWallpaper(wallpaper, original_path, 1454 ResizeAndSaveWallpaper(wallpaper,
1455 original_path,
1361 ash::WALLPAPER_LAYOUT_STRETCH, 1456 ash::WALLPAPER_LAYOUT_STRETCH,
1362 wallpaper.image().width(), 1457 wallpaper.image().width(),
1363 wallpaper.image().height()); 1458 wallpaper.image().height(),
1459 NULL);
1364 DeleteAllExcept(original_path); 1460 DeleteAllExcept(original_path);
1365 1461
1366 ResizeAndSaveWallpaper(wallpaper, small_wallpaper_path, layout, 1462 ResizeAndSaveWallpaper(wallpaper,
1463 small_wallpaper_path,
1464 layout,
1367 ash::kSmallWallpaperMaxWidth, 1465 ash::kSmallWallpaperMaxWidth,
1368 ash::kSmallWallpaperMaxHeight); 1466 ash::kSmallWallpaperMaxHeight,
1467 NULL);
1369 DeleteAllExcept(small_wallpaper_path); 1468 DeleteAllExcept(small_wallpaper_path);
1370 ResizeAndSaveWallpaper(wallpaper, large_wallpaper_path, layout, 1469 ResizeAndSaveWallpaper(wallpaper,
1470 large_wallpaper_path,
1471 layout,
1371 ash::kLargeWallpaperMaxWidth, 1472 ash::kLargeWallpaperMaxWidth,
1372 ash::kLargeWallpaperMaxHeight); 1473 ash::kLargeWallpaperMaxHeight,
1474 NULL);
1373 DeleteAllExcept(large_wallpaper_path); 1475 DeleteAllExcept(large_wallpaper_path);
1374 } 1476 }
1375 1477
1376 void WallpaperManager::RecordUma(User::WallpaperType type, int index) const { 1478 void WallpaperManager::RecordUma(User::WallpaperType type, int index) const {
1377 UMA_HISTOGRAM_ENUMERATION("Ash.Wallpaper.Type", type, 1479 UMA_HISTOGRAM_ENUMERATION("Ash.Wallpaper.Type", type,
1378 User::WALLPAPER_TYPE_COUNT); 1480 User::WALLPAPER_TYPE_COUNT);
1379 } 1481 }
1380 1482
1381 void WallpaperManager::SaveWallpaperInternal(const base::FilePath& path, 1483 bool WallpaperManager::SaveWallpaperInternal(const base::FilePath& path,
1382 const char* data, 1484 const char* data,
1383 int size) const { 1485 int size) const {
1384 int written_bytes = base::WriteFile(path, data, size); 1486 int written_bytes = base::WriteFile(path, data, size);
1385 DCHECK(written_bytes == size); 1487 return written_bytes == size;
1386 } 1488 }
1387 1489
1388 void WallpaperManager::StartLoad(const std::string& user_id, 1490 void WallpaperManager::StartLoad(const std::string& user_id,
1389 const WallpaperInfo& info, 1491 const WallpaperInfo& info,
1390 bool update_wallpaper, 1492 bool update_wallpaper,
1391 const base::FilePath& wallpaper_path, 1493 const base::FilePath& wallpaper_path,
1392 MovableOnDestroyCallbackHolder on_finish) { 1494 MovableOnDestroyCallbackHolder on_finish) {
1393 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 1495 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
1394 TRACE_EVENT_ASYNC_BEGIN0("ui", "LoadAndDecodeWallpaper", this); 1496 TRACE_EVENT_ASYNC_BEGIN0("ui", "LoadAndDecodeWallpaper", this);
1395 1497
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
1448 if (!pending_inactive_) { 1550 if (!pending_inactive_) {
1449 loading_.push_back(new WallpaperManager::PendingWallpaper( 1551 loading_.push_back(new WallpaperManager::PendingWallpaper(
1450 (delayed ? GetWallpaperLoadDelay() 1552 (delayed ? GetWallpaperLoadDelay()
1451 : base::TimeDelta::FromMilliseconds(0)), 1553 : base::TimeDelta::FromMilliseconds(0)),
1452 user_id)); 1554 user_id));
1453 pending_inactive_ = loading_.back(); 1555 pending_inactive_ = loading_.back();
1454 } 1556 }
1455 return pending_inactive_; 1557 return pending_inactive_;
1456 } 1558 }
1457 1559
1560 void WallpaperManager::SetDefaultWallpaperPathFromCommandLine(
1561 base::CommandLine* command_line) {
1562 default_small_wallpaper_file_ = command_line->GetSwitchValuePath(
1563 ash::switches::kAshDefaultWallpaperSmall);
1564 default_large_wallpaper_file_ = command_line->GetSwitchValuePath(
1565 ash::switches::kAshDefaultWallpaperLarge);
1566 guest_default_small_wallpaper_file_ =
1567 command_line->GetSwitchValuePath(ash::switches::kAshGuestWallpaperSmall);
1568 guest_default_large_wallpaper_file_ =
1569 command_line->GetSwitchValuePath(ash::switches::kAshGuestWallpaperLarge);
1570 }
1571
1458 } // namespace chromeos 1572 } // namespace chromeos
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698