| Index: components/wallpaper/wallpaper_manager_base.cc
|
| diff --git a/components/wallpaper/wallpaper_manager_base.cc b/components/wallpaper/wallpaper_manager_base.cc
|
| index e387fbadd73df4e699572785c869d73ff4b9b0f5..7e6f39c4818c2de50b528bc3d52b6015364b8187 100644
|
| --- a/components/wallpaper/wallpaper_manager_base.cc
|
| +++ b/components/wallpaper/wallpaper_manager_base.cc
|
| @@ -473,7 +473,13 @@ void WallpaperManagerBase::OnPolicyCleared(const std::string& policy,
|
| GetUserWallpaperInfo(account_id, &info);
|
| info.type = user_manager::User::DEFAULT;
|
| SetUserWallpaperInfo(account_id, info, true /* is_persistent */);
|
| - SetDefaultWallpaperNow(account_id);
|
| + // If the user's policy is cleared, try to set the device wallpaper first.
|
| + // Note We have to modify the user wallpaper info first. Otherwise, we won't
|
| + // be able to override the current user policy wallpaper. The wallpaper info
|
| + // will be set correctly if the device wallpaper is set successfully.
|
| + if (!SetDeviceWallpaperIfApplicable(account_id)) {
|
| + SetDefaultWallpaperNow(account_id);
|
| + }
|
| }
|
|
|
| // static
|
| @@ -615,6 +621,15 @@ void WallpaperManagerBase::InitInitialUserWallpaper(const AccountId& account_id,
|
| current_user_wallpaper_info_.type = user_manager::User::DEFAULT;
|
| current_user_wallpaper_info_.date = base::Time::Now().LocalMidnight();
|
|
|
| + std::string device_wallpaper_url;
|
| + std::string device_wallpaper_hash;
|
| + if (ShouldSetDeviceWallpaper(account_id, &device_wallpaper_url,
|
| + &device_wallpaper_hash)) {
|
| + current_user_wallpaper_info_.location =
|
| + GetDeviceWallpaperFilePath().value();
|
| + current_user_wallpaper_info_.type = user_manager::User::DEVICE;
|
| + }
|
| +
|
| WallpaperInfo info = current_user_wallpaper_info_;
|
| SetUserWallpaperInfo(account_id, info, is_persistent);
|
| }
|
| @@ -708,10 +723,15 @@ void WallpaperManagerBase::CacheUserWallpaper(const AccountId& account_id) {
|
| base::FilePath wallpaper_dir;
|
| base::FilePath wallpaper_path;
|
| if (info.type == user_manager::User::CUSTOMIZED ||
|
| - info.type == user_manager::User::POLICY) {
|
| - const char* sub_dir = GetCustomWallpaperSubdirForCurrentResolution();
|
| - base::FilePath wallpaper_path = GetCustomWallpaperDir(sub_dir);
|
| - wallpaper_path = wallpaper_path.Append(info.location);
|
| + info.type == user_manager::User::POLICY ||
|
| + info.type == user_manager::User::DEVICE) {
|
| + base::FilePath wallpaper_path;
|
| + if (info.type == user_manager::User::DEVICE) {
|
| + wallpaper_path = GetDeviceWallpaperFilePath();
|
| + } else {
|
| + const char* sub_dir = GetCustomWallpaperSubdirForCurrentResolution();
|
| + wallpaper_path = GetCustomWallpaperDir(sub_dir).Append(info.location);
|
| + }
|
| // Set the path to the cache.
|
| wallpaper_cache_[account_id] =
|
| CustomWallpaperElement(wallpaper_path, gfx::ImageSkia());
|
|
|