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

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

Issue 376193002: Move UserImage to user_manager (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: bring back gfx::ImageSkia 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/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 15 matching lines...) Expand all
26 #include "base/strings/string_util.h" 26 #include "base/strings/string_util.h"
27 #include "base/strings/stringprintf.h" 27 #include "base/strings/stringprintf.h"
28 #include "base/sys_info.h" 28 #include "base/sys_info.h"
29 #include "base/threading/worker_pool.h" 29 #include "base/threading/worker_pool.h"
30 #include "base/time/time.h" 30 #include "base/time/time.h"
31 #include "base/values.h" 31 #include "base/values.h"
32 #include "chrome/browser/browser_process.h" 32 #include "chrome/browser/browser_process.h"
33 #include "chrome/browser/chrome_notification_types.h" 33 #include "chrome/browser/chrome_notification_types.h"
34 #include "chrome/browser/chromeos/customization_document.h" 34 #include "chrome/browser/chromeos/customization_document.h"
35 #include "chrome/browser/chromeos/login/startup_utils.h" 35 #include "chrome/browser/chromeos/login/startup_utils.h"
36 #include "chrome/browser/chromeos/login/users/avatar/user_image.h"
37 #include "chrome/browser/chromeos/login/users/user.h" 36 #include "chrome/browser/chromeos/login/users/user.h"
38 #include "chrome/browser/chromeos/login/users/user_manager.h" 37 #include "chrome/browser/chromeos/login/users/user_manager.h"
39 #include "chrome/browser/chromeos/login/wizard_controller.h" 38 #include "chrome/browser/chromeos/login/wizard_controller.h"
40 #include "chrome/browser/chromeos/settings/cros_settings.h" 39 #include "chrome/browser/chromeos/settings/cros_settings.h"
41 #include "chrome/common/chrome_paths.h" 40 #include "chrome/common/chrome_paths.h"
42 #include "chrome/common/chrome_switches.h" 41 #include "chrome/common/chrome_switches.h"
43 #include "chrome/common/pref_names.h" 42 #include "chrome/common/pref_names.h"
44 #include "chromeos/chromeos_switches.h" 43 #include "chromeos/chromeos_switches.h"
45 #include "chromeos/dbus/dbus_thread_manager.h" 44 #include "chromeos/dbus/dbus_thread_manager.h"
45 #include "components/user_manager/avatar/user_image.h"
46 #include "components/user_manager/user_type.h" 46 #include "components/user_manager/user_type.h"
47 #include "content/public/browser/browser_thread.h" 47 #include "content/public/browser/browser_thread.h"
48 #include "content/public/browser/notification_service.h" 48 #include "content/public/browser/notification_service.h"
49 #include "third_party/skia/include/core/SkColor.h" 49 #include "third_party/skia/include/core/SkColor.h"
50 #include "ui/gfx/codec/jpeg_codec.h" 50 #include "ui/gfx/codec/jpeg_codec.h"
51 #include "ui/gfx/image/image_skia_operations.h" 51 #include "ui/gfx/image/image_skia_operations.h"
52 #include "ui/gfx/skia_util.h" 52 #include "ui/gfx/skia_util.h"
53 53
54 using content::BrowserThread; 54 using content::BrowserThread;
55 55
(...skipping 770 matching lines...) Expand 10 before | Expand all | Expand 10 after
826 base::FilePath WallpaperManager::GetCustomWallpaperPath( 826 base::FilePath WallpaperManager::GetCustomWallpaperPath(
827 const char* sub_dir, 827 const char* sub_dir,
828 const std::string& user_id_hash, 828 const std::string& user_id_hash,
829 const std::string& file) { 829 const std::string& file) {
830 base::FilePath custom_wallpaper_path = GetCustomWallpaperDir(sub_dir); 830 base::FilePath custom_wallpaper_path = GetCustomWallpaperDir(sub_dir);
831 return custom_wallpaper_path.Append(user_id_hash).Append(file); 831 return custom_wallpaper_path.Append(user_id_hash).Append(file);
832 } 832 }
833 833
834 void WallpaperManager::SetPolicyControlledWallpaper( 834 void WallpaperManager::SetPolicyControlledWallpaper(
835 const std::string& user_id, 835 const std::string& user_id,
836 const UserImage& user_image) { 836 const user_manager::UserImage& user_image) {
837 const User *user = chromeos::UserManager::Get()->FindUser(user_id); 837 const User *user = chromeos::UserManager::Get()->FindUser(user_id);
838 if (!user) { 838 if (!user) {
839 NOTREACHED() << "Unknown user."; 839 NOTREACHED() << "Unknown user.";
840 return; 840 return;
841 } 841 }
842 SetCustomWallpaper(user_id, 842 SetCustomWallpaper(user_id,
843 user->username_hash(), 843 user->username_hash(),
844 "policy-controlled.jpeg", 844 "policy-controlled.jpeg",
845 ash::WALLPAPER_LAYOUT_CENTER_CROPPED, 845 ash::WALLPAPER_LAYOUT_CENTER_CROPPED,
846 User::POLICY, 846 User::POLICY,
(...skipping 684 matching lines...) Expand 10 before | Expand all | Expand 10 after
1531 logged_in_user->email(), 1531 logged_in_user->email(),
1532 logged_in_user->username_hash(), 1532 logged_in_user->username_hash(),
1533 weak_factory_.GetWeakPtr())); 1533 weak_factory_.GetWeakPtr()));
1534 } 1534 }
1535 1535
1536 void WallpaperManager::OnWallpaperDecoded( 1536 void WallpaperManager::OnWallpaperDecoded(
1537 const std::string& user_id, 1537 const std::string& user_id,
1538 ash::WallpaperLayout layout, 1538 ash::WallpaperLayout layout,
1539 bool update_wallpaper, 1539 bool update_wallpaper,
1540 MovableOnDestroyCallbackHolder on_finish, 1540 MovableOnDestroyCallbackHolder on_finish,
1541 const UserImage& user_image) { 1541 const user_manager::UserImage& user_image) {
1542 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 1542 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
1543 TRACE_EVENT_ASYNC_END0("ui", "LoadAndDecodeWallpaper", this); 1543 TRACE_EVENT_ASYNC_END0("ui", "LoadAndDecodeWallpaper", this);
1544 1544
1545 // If decoded wallpaper is empty, we have probably failed to decode the file. 1545 // If decoded wallpaper is empty, we have probably failed to decode the file.
1546 // Use default wallpaper in this case. 1546 // Use default wallpaper in this case.
1547 if (user_image.image().isNull()) { 1547 if (user_image.image().isNull()) {
1548 // Updates user pref to default wallpaper. 1548 // Updates user pref to default wallpaper.
1549 WallpaperInfo info = { 1549 WallpaperInfo info = {
1550 "", 1550 "",
1551 ash::WALLPAPER_LAYOUT_CENTER_CROPPED, 1551 ash::WALLPAPER_LAYOUT_CENTER_CROPPED,
(...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after
1649 SetDefaultWallpaperPath(rescaled_files->path_rescaled_small(), 1649 SetDefaultWallpaperPath(rescaled_files->path_rescaled_small(),
1650 scoped_ptr<gfx::ImageSkia>().Pass(), 1650 scoped_ptr<gfx::ImageSkia>().Pass(),
1651 rescaled_files->path_rescaled_large(), 1651 rescaled_files->path_rescaled_large(),
1652 scoped_ptr<gfx::ImageSkia>().Pass()); 1652 scoped_ptr<gfx::ImageSkia>().Pass());
1653 } 1653 }
1654 } 1654 }
1655 1655
1656 void WallpaperManager::OnCustomizedDefaultWallpaperDecoded( 1656 void WallpaperManager::OnCustomizedDefaultWallpaperDecoded(
1657 const GURL& wallpaper_url, 1657 const GURL& wallpaper_url,
1658 scoped_ptr<CustomizedWallpaperRescaledFiles> rescaled_files, 1658 scoped_ptr<CustomizedWallpaperRescaledFiles> rescaled_files,
1659 const UserImage& wallpaper) { 1659 const user_manager::UserImage& wallpaper) {
1660 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 1660 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
1661 1661
1662 // If decoded wallpaper is empty, we have probably failed to decode the file. 1662 // If decoded wallpaper is empty, we have probably failed to decode the file.
1663 if (wallpaper.image().isNull()) { 1663 if (wallpaper.image().isNull()) {
1664 LOG(WARNING) << "Failed to decode customized wallpaper."; 1664 LOG(WARNING) << "Failed to decode customized wallpaper.";
1665 return; 1665 return;
1666 } 1666 }
1667 1667
1668 wallpaper.image().EnsureRepsForSupportedScales(); 1668 wallpaper.image().EnsureRepsForSupportedScales();
1669 scoped_ptr<gfx::ImageSkia> deep_copy(wallpaper.image().DeepCopy()); 1669 scoped_ptr<gfx::ImageSkia> deep_copy(wallpaper.image().DeepCopy());
(...skipping 21 matching lines...) Expand all
1691 base::Passed(large_wallpaper_image.Pass())); 1691 base::Passed(large_wallpaper_image.Pass()));
1692 1692
1693 if (!task_runner_->PostTaskAndReply( 1693 if (!task_runner_->PostTaskAndReply(
1694 FROM_HERE, resize_closure, on_resized_closure)) { 1694 FROM_HERE, resize_closure, on_resized_closure)) {
1695 LOG(WARNING) << "Failed to start Customized Wallpaper resize."; 1695 LOG(WARNING) << "Failed to start Customized Wallpaper resize.";
1696 } 1696 }
1697 } 1697 }
1698 1698
1699 void WallpaperManager::ResizeCustomizedDefaultWallpaper( 1699 void WallpaperManager::ResizeCustomizedDefaultWallpaper(
1700 scoped_ptr<gfx::ImageSkia> image, 1700 scoped_ptr<gfx::ImageSkia> image,
1701 const UserImage::RawImage& raw_image, 1701 const user_manager::UserImage::RawImage& raw_image,
1702 const CustomizedWallpaperRescaledFiles* rescaled_files, 1702 const CustomizedWallpaperRescaledFiles* rescaled_files,
1703 bool* success, 1703 bool* success,
1704 gfx::ImageSkia* small_wallpaper_image, 1704 gfx::ImageSkia* small_wallpaper_image,
1705 gfx::ImageSkia* large_wallpaper_image) { 1705 gfx::ImageSkia* large_wallpaper_image) {
1706 *success = true; 1706 *success = true;
1707 1707
1708 *success &= ResizeAndSaveWallpaper(*image, 1708 *success &= ResizeAndSaveWallpaper(*image,
1709 rescaled_files->path_rescaled_small(), 1709 rescaled_files->path_rescaled_small(),
1710 ash::WALLPAPER_LAYOUT_STRETCH, 1710 ash::WALLPAPER_LAYOUT_STRETCH,
1711 kSmallWallpaperMaxWidth, 1711 kSmallWallpaperMaxWidth,
(...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after
1820 guest_small_wallpaper_file_ = 1820 guest_small_wallpaper_file_ =
1821 command_line->GetSwitchValuePath(ash::switches::kAshGuestWallpaperSmall); 1821 command_line->GetSwitchValuePath(ash::switches::kAshGuestWallpaperSmall);
1822 guest_large_wallpaper_file_ = 1822 guest_large_wallpaper_file_ =
1823 command_line->GetSwitchValuePath(ash::switches::kAshGuestWallpaperLarge); 1823 command_line->GetSwitchValuePath(ash::switches::kAshGuestWallpaperLarge);
1824 default_wallpaper_image_.reset(); 1824 default_wallpaper_image_.reset();
1825 } 1825 }
1826 1826
1827 void WallpaperManager::OnDefaultWallpaperDecoded( 1827 void WallpaperManager::OnDefaultWallpaperDecoded(
1828 const base::FilePath& path, 1828 const base::FilePath& path,
1829 const ash::WallpaperLayout layout, 1829 const ash::WallpaperLayout layout,
1830 scoped_ptr<chromeos::UserImage>* result_out, 1830 scoped_ptr<user_manager::UserImage>* result_out,
1831 MovableOnDestroyCallbackHolder on_finish, 1831 MovableOnDestroyCallbackHolder on_finish,
1832 const UserImage& user_image) { 1832 const user_manager::UserImage& user_image) {
1833 result_out->reset(new UserImage(user_image)); 1833 result_out->reset(new user_manager::UserImage(user_image));
1834 ash::Shell::GetInstance()->desktop_background_controller()->SetWallpaperImage( 1834 ash::Shell::GetInstance()->desktop_background_controller()->SetWallpaperImage(
1835 user_image.image(), layout); 1835 user_image.image(), layout);
1836 } 1836 }
1837 1837
1838 void WallpaperManager::StartLoadAndSetDefaultWallpaper( 1838 void WallpaperManager::StartLoadAndSetDefaultWallpaper(
1839 const base::FilePath& path, 1839 const base::FilePath& path,
1840 const ash::WallpaperLayout layout, 1840 const ash::WallpaperLayout layout,
1841 MovableOnDestroyCallbackHolder on_finish, 1841 MovableOnDestroyCallbackHolder on_finish,
1842 scoped_ptr<chromeos::UserImage>* result_out) { 1842 scoped_ptr<user_manager::UserImage>* result_out) {
1843 wallpaper_loader_->Start( 1843 wallpaper_loader_->Start(
1844 path.value(), 1844 path.value(),
1845 0, // Do not crop. 1845 0, // Do not crop.
1846 base::Bind(&WallpaperManager::OnDefaultWallpaperDecoded, 1846 base::Bind(&WallpaperManager::OnDefaultWallpaperDecoded,
1847 weak_factory_.GetWeakPtr(), 1847 weak_factory_.GetWeakPtr(),
1848 path, 1848 path,
1849 layout, 1849 layout,
1850 base::Unretained(result_out), 1850 base::Unretained(result_out),
1851 base::Passed(on_finish.Pass()))); 1851 base::Passed(on_finish.Pass())));
1852 } 1852 }
(...skipping 22 matching lines...) Expand all
1875 // as a placeholder only. 1875 // as a placeholder only.
1876 const bool need_update_screen = 1876 const bool need_update_screen =
1877 default_wallpaper_image_.get() && 1877 default_wallpaper_image_.get() &&
1878 dbc->WallpaperIsAlreadyLoaded(default_wallpaper_image_->image(), 1878 dbc->WallpaperIsAlreadyLoaded(default_wallpaper_image_->image(),
1879 false /* compare_layouts */, 1879 false /* compare_layouts */,
1880 ash::WALLPAPER_LAYOUT_CENTER); 1880 ash::WALLPAPER_LAYOUT_CENTER);
1881 1881
1882 default_wallpaper_image_.reset(); 1882 default_wallpaper_image_.reset();
1883 if (GetAppropriateResolution() == WALLPAPER_RESOLUTION_SMALL) { 1883 if (GetAppropriateResolution() == WALLPAPER_RESOLUTION_SMALL) {
1884 if (small_wallpaper_image) { 1884 if (small_wallpaper_image) {
1885 default_wallpaper_image_.reset(new UserImage(*small_wallpaper_image)); 1885 default_wallpaper_image_.reset(
1886 new user_manager::UserImage(*small_wallpaper_image));
1886 default_wallpaper_image_->set_file_path( 1887 default_wallpaper_image_->set_file_path(
1887 default_small_wallpaper_file.value()); 1888 default_small_wallpaper_file.value());
1888 } 1889 }
1889 } else { 1890 } else {
1890 if (large_wallpaper_image) { 1891 if (large_wallpaper_image) {
1891 default_wallpaper_image_.reset(new UserImage(*large_wallpaper_image)); 1892 default_wallpaper_image_.reset(
1893 new user_manager::UserImage(*large_wallpaper_image));
1892 default_wallpaper_image_->set_file_path( 1894 default_wallpaper_image_->set_file_path(
1893 default_large_wallpaper_file.value()); 1895 default_large_wallpaper_file.value());
1894 } 1896 }
1895 } 1897 }
1896 1898
1897 if (need_update_screen) { 1899 if (need_update_screen) {
1898 DoSetDefaultWallpaper(std::string(), 1900 DoSetDefaultWallpaper(std::string(),
1899 MovableOnDestroyCallbackHolder().Pass()); 1901 MovableOnDestroyCallbackHolder().Pass());
1900 } 1902 }
1901 } 1903 }
1902 1904
1903 void WallpaperManager::CreateSolidDefaultWallpaper() { 1905 void WallpaperManager::CreateSolidDefaultWallpaper() {
1904 loaded_wallpapers_++; 1906 loaded_wallpapers_++;
1905 SkBitmap bitmap; 1907 SkBitmap bitmap;
1906 bitmap.allocN32Pixels(1, 1); 1908 bitmap.allocN32Pixels(1, 1);
1907 bitmap.eraseColor(kDefaultWallpaperColor); 1909 bitmap.eraseColor(kDefaultWallpaperColor);
1908 const gfx::ImageSkia image = gfx::ImageSkia::CreateFrom1xBitmap(bitmap); 1910 const gfx::ImageSkia image = gfx::ImageSkia::CreateFrom1xBitmap(bitmap);
1909 default_wallpaper_image_.reset(new UserImage(image)); 1911 default_wallpaper_image_.reset(new user_manager::UserImage(image));
1910 } 1912 }
1911 1913
1912 } // namespace chromeos 1914 } // namespace chromeos
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698