summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ash/desktop_background/user_wallpaper_delegate.h3
-rw-r--r--chrome/browser/chromeos/background/ash_user_wallpaper_delegate.cc17
2 files changed, 16 insertions, 4 deletions
diff --git a/ash/desktop_background/user_wallpaper_delegate.h b/ash/desktop_background/user_wallpaper_delegate.h
index 5e47ec0..87ee44e 100644
--- a/ash/desktop_background/user_wallpaper_delegate.h
+++ b/ash/desktop_background/user_wallpaper_delegate.h
@@ -44,8 +44,7 @@ class ASH_EXPORT UserWallpaperDelegate {
// Opens the set wallpaper page in the browser.
virtual void OpenSetWallpaperPage() = 0;
- // Returns true if user can open set wallpaper page. Only guest user returns
- // false currently.
+ // Returns true if user can open set wallpaper page.
virtual bool CanOpenSetWallpaperPage() = 0;
// Notifies delegate that wallpaper animation has finished.
diff --git a/chrome/browser/chromeos/background/ash_user_wallpaper_delegate.cc b/chrome/browser/chromeos/background/ash_user_wallpaper_delegate.cc
index e86e223..c670843 100644
--- a/chrome/browser/chromeos/background/ash_user_wallpaper_delegate.cc
+++ b/chrome/browser/chromeos/background/ash_user_wallpaper_delegate.cc
@@ -86,12 +86,25 @@ class UserWallpaperDelegate : public ash::UserWallpaperDelegate {
}
virtual void OpenSetWallpaperPage() OVERRIDE {
- wallpaper_manager_util::OpenWallpaperManager();
+ if (CanOpenSetWallpaperPage())
+ wallpaper_manager_util::OpenWallpaperManager();
}
virtual bool CanOpenSetWallpaperPage() OVERRIDE {
- if (!LoginState::Get()->IsUserAuthenticated())
+ const LoginState* login_state = LoginState::Get();
+ const LoginState::LoggedInUserType user_type =
+ login_state->GetLoggedInUserType();
+ if (!login_state->IsUserLoggedIn())
return false;
+
+ // Whitelist user types that are allowed to change their wallpaper. (Guest
+ // users are not, see crosbug 26900.)
+ if (user_type != LoginState::LOGGED_IN_USER_REGULAR &&
+ user_type != LoginState::LOGGED_IN_USER_OWNER &&
+ user_type != LoginState::LOGGED_IN_USER_PUBLIC_ACCOUNT &&
+ user_type != LoginState::LOGGED_IN_USER_LOCALLY_MANAGED) {
+ return false;
+ }
const User* user = chromeos::UserManager::Get()->GetActiveUser();
if (!user)
return false;