| Index: chrome/browser/chromeos/login/wallpaper_manager.cc
|
| diff --git a/chrome/browser/chromeos/login/wallpaper_manager.cc b/chrome/browser/chromeos/login/wallpaper_manager.cc
|
| index 67fcafcf424dc596897979cb49e7567728834a42..c0cdbd1e0c2188ed0a5dad23252cfe93e9fc0cbc 100644
|
| --- a/chrome/browser/chromeos/login/wallpaper_manager.cc
|
| +++ b/chrome/browser/chromeos/login/wallpaper_manager.cc
|
| @@ -8,19 +8,34 @@
|
| #include "ash/desktop_background/desktop_background_resources.h"
|
| #include "ash/shell.h"
|
| #include "base/logging.h"
|
| +#include "base/string_number_conversions.h"
|
| #include "base/time.h"
|
| #include "base/values.h"
|
| #include "chrome/browser/browser_process.h"
|
| #include "chrome/browser/chromeos/cros_settings.h"
|
| -#include "chrome/browser/chromeos/login/user.h"
|
| #include "chrome/browser/chromeos/login/user_manager.h"
|
| #include "chrome/browser/chromeos/login/user_manager_impl.h"
|
| #include "chrome/browser/prefs/pref_service.h"
|
| +#include "chrome/browser/prefs/scoped_user_pref_update.h"
|
| #include "chromeos/dbus/dbus_thread_manager.h"
|
| #include "chromeos/dbus/power_manager_client.h"
|
| +#include "content/public/browser/browser_thread.h"
|
| +
|
| +using content::BrowserThread;
|
|
|
| namespace {
|
| +
|
| const int kWallpaperUpdateIntervalSec = 24 * 60 * 60;
|
| +
|
| +// A dictionary that maps usernames to wallpaper properties.
|
| +const char kUsersWallpaperInfo[] = "UsersWallpaperInfo";
|
| +
|
| +// Names of nodes with info about wallpaper.
|
| +const char kWallpaperDateNodeName[] = "date";
|
| +const char kWallpaperLayoutNodeName[] = "layout";
|
| +const char kWallpaperFileNodeName[] = "file";
|
| +const char kWallpaperTypeNodeName[] = "type";
|
| +
|
| } // namespace
|
|
|
| namespace chromeos {
|
| @@ -36,6 +51,12 @@ WallpaperManager* WallpaperManager::Get() {
|
| return g_wallpaper_manager;
|
| }
|
|
|
| +// static
|
| +void WallpaperManager::RegisterPrefs(PrefService* local_state) {
|
| + local_state->RegisterDictionaryPref(kUsersWallpaperInfo,
|
| + PrefService::UNSYNCABLE_PREF);
|
| +}
|
| +
|
| WallpaperManager::WallpaperManager() : last_selected_user_("") {
|
| system::TimezoneSettings::GetInstance()->AddObserver(this);
|
| RestartTimer();
|
| @@ -62,18 +83,51 @@ void WallpaperManager::RestartTimer() {
|
| }
|
| }
|
|
|
| +void WallpaperManager::SaveUserWallpaperInfo(const std::string& username,
|
| + const std::string& file_name,
|
| + ash::WallpaperLayout layout,
|
| + User::WallpaperType type) {
|
| + DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
|
| +
|
| + // Ephemeral users can not save data to local state. We just cache the index
|
| + // in memory for them.
|
| + if (UserManager::Get()->IsCurrentUserEphemeral())
|
| + return;
|
| +
|
| + PrefService* local_state = g_browser_process->local_state();
|
| + DictionaryPrefUpdate wallpaper_update(local_state,
|
| + kUsersWallpaperInfo);
|
| +
|
| + base::DictionaryValue* wallpaper_properties = new base::DictionaryValue();
|
| + wallpaper_properties->SetString(kWallpaperDateNodeName,
|
| + base::Int64ToString(base::Time::Now().LocalMidnight().ToInternalValue()));
|
| + wallpaper_properties->SetString(kWallpaperFileNodeName,
|
| + file_name);
|
| + wallpaper_properties->Set(kWallpaperLayoutNodeName,
|
| + new base::FundamentalValue(layout));
|
| + wallpaper_properties->Set(kWallpaperTypeNodeName,
|
| + new base::FundamentalValue(type));
|
| + wallpaper_update->SetWithoutPathExpansion(username, wallpaper_properties);
|
| +}
|
| +
|
| void WallpaperManager::SetLastSelectedUser(
|
| const std::string& last_selected_user) {
|
| last_selected_user_ = last_selected_user;
|
| }
|
|
|
| -void WallpaperManager::SetWallpaperFromFile(std::string email,
|
| - const std::string& path,
|
| - ash::WallpaperLayout layout) {
|
| +void WallpaperManager::SetWallpaperFromFilePath(const std::string& path,
|
| + ash::WallpaperLayout layout) {
|
| image_loader_->Start(
|
| path, 0, false,
|
| - base::Bind(&WallpaperManager::OnCustomWallpaperLoaded,
|
| - base::Unretained(this), email, layout));
|
| + base::Bind(&WallpaperManager::OnWallpaperLoaded,
|
| + base::Unretained(this), layout));
|
| +}
|
| +
|
| +void WallpaperManager::SetWallpaperFromImageSkia(
|
| + const gfx::ImageSkia& wallpaper,
|
| + ash::WallpaperLayout layout) {
|
| + ash::Shell::GetInstance()->desktop_background_controller()->
|
| + SetCustomWallpaper(wallpaper, layout);
|
| }
|
|
|
| void WallpaperManager::UserDeselected() {
|
| @@ -91,14 +145,6 @@ WallpaperManager::~WallpaperManager() {
|
| system::TimezoneSettings::GetInstance()->RemoveObserver(this);
|
| }
|
|
|
| -void WallpaperManager::OnCustomWallpaperLoaded(const std::string& email,
|
| - ash::WallpaperLayout layout,
|
| - const UserImage& user_image) {
|
| - const SkBitmap& wallpaper = user_image.image();
|
| - ash::Shell::GetInstance()->desktop_background_controller()->
|
| - SetCustomWallpaper(wallpaper, layout);
|
| -}
|
| -
|
| void WallpaperManager::BatchUpdateWallpaper() {
|
| PrefService* local_state = g_browser_process->local_state();
|
| UserManager* user_manager = UserManager::Get();
|
| @@ -139,6 +185,12 @@ void WallpaperManager::BatchUpdateWallpaper() {
|
| RestartTimer();
|
| }
|
|
|
| +void WallpaperManager::OnWallpaperLoaded(ash::WallpaperLayout layout,
|
| + const UserImage& user_image) {
|
| + const SkBitmap& wallpaper = user_image.image();
|
| + SetWallpaperFromImageSkia(wallpaper, layout);
|
| +}
|
| +
|
| void WallpaperManager::SystemResumed() {
|
| BatchUpdateWallpaper();
|
| }
|
|
|