diff options
-rw-r--r-- | ash/desktop_background/user_wallpaper_delegate.h | 3 | ||||
-rw-r--r-- | chrome/browser/chromeos/background/ash_user_wallpaper_delegate.cc | 17 |
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; |