Chromium Code Reviews| 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..78f7764a30ba9974cdcf1bdaec9d9868177f31c6 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 kUsersWallpaperInfos[] = "UsersWallpaperInfos"; |
|
Nikita (slow)
2012/07/23 22:06:47
s/Infos/Info/
bshe
2012/07/24 16:21:10
Done.
|
| + |
| +// 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(kUsersWallpaperInfos, |
| + PrefService::UNSYNCABLE_PREF); |
| +} |
| + |
| WallpaperManager::WallpaperManager() : last_selected_user_("") { |
| system::TimezoneSettings::GetInstance()->AddObserver(this); |
| RestartTimer(); |
| @@ -62,18 +83,52 @@ void WallpaperManager::RestartTimer() { |
| } |
| } |
| +void WallpaperManager::SaveUserWallpaperInfos(const std::string& username, |
| + 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. |
|
Nikita (slow)
2012/07/23 22:06:47
Do those users have access to custom wallpaper UI?
bshe
2012/07/24 16:21:10
As far as I can remember, only guest user can't ac
Nikita (slow)
2012/07/24 17:06:54
But any Ephemeral user would exit here.
What would
|
| + if (UserManager::Get()->IsCurrentUserEphemeral()) { |
|
Nikita (slow)
2012/07/23 22:06:47
nit: could omit { }
bshe
2012/07/24 16:21:10
Done.
|
| + return; |
| + } |
| + |
| + PrefService* local_state = g_browser_process->local_state(); |
| + DictionaryPrefUpdate wallpaper_update(local_state, |
| + kUsersWallpaperInfos); |
| + |
| + 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( |
| + ash::WallpaperLayout layout, |
| + const gfx::ImageSkia& wallpaper) { |
| + ash::Shell::GetInstance()->desktop_background_controller()-> |
| + SetCustomWallpaper(wallpaper, layout); |
| } |
| void WallpaperManager::UserDeselected() { |
| @@ -91,14 +146,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 +186,12 @@ void WallpaperManager::BatchUpdateWallpaper() { |
| RestartTimer(); |
| } |
| +void WallpaperManager::OnWallpaperLoaded(ash::WallpaperLayout layout, |
| + const UserImage& user_image) { |
| + const SkBitmap& wallpaper = user_image.image(); |
| + SetWallpaperFromImageSkia(layout, wallpaper); |
| +} |
| + |
| void WallpaperManager::SystemResumed() { |
| BatchUpdateWallpaper(); |
| } |