Index: chrome/browser/chromeos/login/users/wallpaper/wallpaper_manager.cc |
diff --git a/chrome/browser/chromeos/login/users/wallpaper/wallpaper_manager.cc b/chrome/browser/chromeos/login/users/wallpaper/wallpaper_manager.cc |
index 611d8e53aff172fd4c4c463b65825a9fee3bf2fe..e5c2b1dfdb2149c02fdddea45e03c40974919cb3 100644 |
--- a/chrome/browser/chromeos/login/users/wallpaper/wallpaper_manager.cc |
+++ b/chrome/browser/chromeos/login/users/wallpaper/wallpaper_manager.cc |
@@ -11,6 +11,7 @@ |
#include "ash/ash_switches.h" |
#include "ash/desktop_background/desktop_background_controller.h" |
#include "ash/shell.h" |
+#include "base/bind.h" |
#include "base/command_line.h" |
#include "base/debug/trace_event.h" |
#include "base/file_util.h" |
@@ -40,6 +41,7 @@ |
#include "chrome/common/chrome_switches.h" |
#include "chrome/common/pref_names.h" |
#include "chromeos/chromeos_switches.h" |
+#include "chromeos/cryptohome/async_method_caller.h" |
#include "chromeos/dbus/dbus_thread_manager.h" |
#include "chromeos/login/user_names.h" |
#include "components/user_manager/user.h" |
@@ -147,19 +149,6 @@ bool ShouldUseCustomizedDefaultWallpaper() { |
->IsDefaultValue()); |
} |
-// Deletes everything else except |path| in the same directory. |
-void DeleteAllExcept(const base::FilePath& path) { |
- base::FilePath dir = path.DirName(); |
- if (base::DirectoryExists(dir)) { |
- base::FileEnumerator files(dir, false, base::FileEnumerator::FILES); |
- for (base::FilePath current = files.Next(); !current.empty(); |
- current = files.Next()) { |
- if (current != path) |
- base::DeleteFile(current, false); |
- } |
- } |
-} |
- |
// Deletes a list of wallpaper files in |file_list|. |
void DeleteWallpaperInList(const std::vector<base::FilePath>& file_list) { |
for (std::vector<base::FilePath>::const_iterator it = file_list.begin(); |
@@ -844,13 +833,41 @@ void WallpaperManager::SetPolicyControlledWallpaper( |
NOTREACHED() << "Unknown user."; |
return; |
} |
+ |
+ if (user->username_hash().empty()) { |
+ cryptohome::AsyncMethodCaller::GetInstance()->AsyncGetSanitizedUsername( |
+ user_id, |
+ base::Bind(&WallpaperManager::SetCustomWallpaperOnSanitizedUsername, |
+ weak_factory_.GetWeakPtr(), |
+ user_id, |
+ user_image.image(), |
+ true /* update wallpaper */)); |
+ } else { |
+ SetCustomWallpaper(user_id, |
+ user->username_hash(), |
+ "policy-controlled.jpeg", |
+ ash::WALLPAPER_LAYOUT_CENTER_CROPPED, |
+ user_manager::User::POLICY, |
+ user_image.image(), |
+ true /* update wallpaper */); |
+ } |
+} |
+ |
+void WallpaperManager::SetCustomWallpaperOnSanitizedUsername( |
+ const std::string& user_id, |
+ const gfx::ImageSkia& image, |
+ bool update_wallpaper, |
+ bool cryptohome_success, |
+ const std::string& user_id_hash) { |
+ if (!cryptohome_success) |
+ return; |
SetCustomWallpaper(user_id, |
- user->username_hash(), |
+ user_id_hash, |
"policy-controlled.jpeg", |
ash::WALLPAPER_LAYOUT_CENTER_CROPPED, |
user_manager::User::POLICY, |
- user_image.image(), |
- true /* update wallpaper */); |
+ image, |
+ update_wallpaper); |
} |
void WallpaperManager::SetCustomWallpaper( |
@@ -862,7 +879,6 @@ void WallpaperManager::SetCustomWallpaper( |
const gfx::ImageSkia& image, |
bool update_wallpaper) { |
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
- DCHECK(UserManager::Get()->IsUserLoggedIn()); |
// There is no visible background in kiosk mode. |
if (UserManager::Get()->IsLoggedInAsKioskApp()) |
@@ -882,8 +898,12 @@ void WallpaperManager::SetCustomWallpaper( |
return; |
} |
+ const user_manager::User *user = UserManager::Get()->FindUser(user_id); |
+ CHECK(user); |
bool is_persistent = |
- !UserManager::Get()->IsUserNonCryptohomeDataEphemeral(user_id); |
+ !UserManager::Get()->IsUserNonCryptohomeDataEphemeral(user_id) || |
+ (type == user_manager::User::POLICY && |
+ user->GetType() == user_manager::USER_TYPE_PUBLIC_ACCOUNT); |
WallpaperInfo wallpaper_info = { |
wallpaper_path.value(), |
@@ -999,6 +1019,15 @@ void WallpaperManager::SaveCustomWallpaper(const std::string& user_id_hash, |
const base::FilePath& original_path, |
ash::WallpaperLayout layout, |
scoped_ptr<gfx::ImageSkia> image) { |
+ base::DeleteFile( |
+ GetCustomWallpaperDir(kOriginalWallpaperSubDir).Append(user_id_hash), |
+ true /* recursive */); |
+ base::DeleteFile( |
+ GetCustomWallpaperDir(kSmallWallpaperSubDir).Append(user_id_hash), |
+ true /* recursive */); |
+ base::DeleteFile( |
+ GetCustomWallpaperDir(kLargeWallpaperSubDir).Append(user_id_hash), |
+ true /* recursive */); |
EnsureCustomWallpaperDirectories(user_id_hash); |
std::string file_name = original_path.BaseName().value(); |
base::FilePath small_wallpaper_path = |
@@ -1015,22 +1044,18 @@ void WallpaperManager::SaveCustomWallpaper(const std::string& user_id_hash, |
image->width(), |
image->height(), |
NULL); |
- DeleteAllExcept(original_path); |
- |
ResizeAndSaveWallpaper(*image, |
small_wallpaper_path, |
layout, |
kSmallWallpaperMaxWidth, |
kSmallWallpaperMaxHeight, |
NULL); |
- DeleteAllExcept(small_wallpaper_path); |
ResizeAndSaveWallpaper(*image, |
large_wallpaper_path, |
layout, |
kLargeWallpaperMaxWidth, |
kLargeWallpaperMaxHeight, |
NULL); |
- DeleteAllExcept(large_wallpaper_path); |
} |
// static |