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

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

Issue 422243002: Ensure public account policy wallpaper is stored in correct place. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Address Alexander's comment. Created 6 years, 4 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/browser/chromeos/login/users/wallpaper/wallpaper_manager.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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
« no previous file with comments | « chrome/browser/chromeos/login/users/wallpaper/wallpaper_manager.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698