| 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 eac4ab8f45341ff25769a07253a02f001113e7dc..193b6f0b12afe1ef226dde829e2432cf78b0917d 100644
|
| --- a/chrome/browser/chromeos/login/users/wallpaper/wallpaper_manager.cc
|
| +++ b/chrome/browser/chromeos/login/users/wallpaper/wallpaper_manager.cc
|
| @@ -57,6 +57,10 @@
|
| #include "content/public/browser/browser_thread.h"
|
| #include "content/public/browser/notification_service.h"
|
| #include "content/public/common/content_switches.h"
|
| +#include "content/public/common/mojo_shell_connection.h"
|
| +#include "mash/public/interfaces/wallpaper.mojom.h"
|
| +#include "services/shell/public/cpp/connector.h"
|
| +#include "skia/public/type_converters.h"
|
| #include "third_party/skia/include/core/SkColor.h"
|
| #include "ui/gfx/codec/jpeg_codec.h"
|
| #include "ui/gfx/image/image_skia_operations.h"
|
| @@ -172,6 +176,24 @@ void SetKnownUserWallpaperFilesId(
|
| wallpaper_files_id.id());
|
| }
|
|
|
| +// A helper to set the wallpaper image for Ash and Mash.
|
| +void SetWallpaper(const gfx::ImageSkia& image,
|
| + wallpaper::WallpaperLayout layout) {
|
| + if (ash::Shell::HasInstance() && !ash::Shell::GetInstance()->in_mus()) {
|
| + ash::Shell::GetInstance()
|
| + ->desktop_background_controller()
|
| + ->SetWallpaperImage(image, layout);
|
| + } else {
|
| + shell::Connector* connector =
|
| + content::MojoShellConnection::Get()->GetConnector();
|
| + mash::mojom::WallpaperControllerPtr wallpaper_controller;
|
| + connector->ConnectToInterface("mojo:ash_sysui", &wallpaper_controller);
|
| + wallpaper_controller->SetWallpaper(
|
| + skia::mojom::Bitmap::From(*image.bitmap()),
|
| + static_cast<int32_t>(layout));
|
| + }
|
| +}
|
| +
|
| } // namespace
|
|
|
| // This is "wallpaper either scheduled to load, or loading right now".
|
| @@ -202,8 +224,7 @@ class WallpaperManager::PendingWallpaper :
|
| // There are 4 cases in SetUserWallpaper:
|
| // 1) gfx::ImageSkia is found in cache.
|
| // - Schedule task to (probably) resize it and install:
|
| - // call ash::Shell::GetInstance()->desktop_background_controller()->
|
| - // SetCustomWallpaper(user_wallpaper, layout);
|
| + // call SetWallpaper(user_wallpaper, layout);
|
| // 2) WallpaperInfo is found in cache
|
| // - need to LoadWallpaper(), resize and install.
|
| // 3) wallpaper path is not NULL, load image URL, then resize, etc...
|
| @@ -257,9 +278,7 @@ class WallpaperManager::PendingWallpaper :
|
| if (default_) {
|
| manager->DoSetDefaultWallpaper(account_id_, std::move(on_finish_));
|
| } else if (!user_wallpaper_.isNull()) {
|
| - ash::Shell::GetInstance()
|
| - ->desktop_background_controller()
|
| - ->SetWallpaperImage(user_wallpaper_, info_.layout);
|
| + SetWallpaper(user_wallpaper_, info_.layout);
|
| } else if (!wallpaper_path_.empty()) {
|
| manager->task_runner_->PostTask(
|
| FROM_HERE,
|
| @@ -598,11 +617,6 @@ void WallpaperManager::DoSetDefaultWallpaper(
|
| if (user_manager::UserManager::Get()->IsLoggedInAsKioskApp())
|
| return;
|
| wallpaper_cache_.erase(account_id);
|
| - // Some browser tests do not have a shell instance. As no wallpaper is needed
|
| - // in these tests anyway, avoid loading one, preventing crashes and speeding
|
| - // up the tests.
|
| - if (!ash::Shell::HasInstance())
|
| - return;
|
|
|
| WallpaperResolution resolution = GetAppropriateResolution();
|
| const bool use_small = (resolution == WALLPAPER_RESOLUTION_SMALL);
|
| @@ -643,8 +657,7 @@ void WallpaperManager::DoSetDefaultWallpaper(
|
| default_wallpaper_image_->image().height() == 1)
|
| layout = wallpaper::WALLPAPER_LAYOUT_STRETCH;
|
|
|
| - ash::Shell::GetInstance()->desktop_background_controller()->SetWallpaperImage(
|
| - default_wallpaper_image_->image(), layout);
|
| + SetWallpaper(default_wallpaper_image_->image(), layout);
|
| }
|
|
|
| void WallpaperManager::SetUserWallpaperInfo(const AccountId& account_id,
|
| @@ -959,11 +972,8 @@ void WallpaperManager::OnWallpaperDecoded(
|
| // Update the image, but keep the path which was set earlier.
|
| wallpaper_cache_[account_id].second = user_image->image();
|
|
|
| - if (update_wallpaper) {
|
| - ash::Shell::GetInstance()
|
| - ->desktop_background_controller()
|
| - ->SetWallpaperImage(user_image->image(), layout);
|
| - }
|
| + if (update_wallpaper)
|
| + SetWallpaper(user_image->image(), layout);
|
| }
|
|
|
| void WallpaperManager::StartLoad(const AccountId& account_id,
|
| @@ -1068,8 +1078,7 @@ void WallpaperManager::OnDefaultWallpaperDecoded(
|
| MovableOnDestroyCallbackHolder on_finish,
|
| std::unique_ptr<user_manager::UserImage> user_image) {
|
| *result_out = std::move(user_image);
|
| - ash::Shell::GetInstance()->desktop_background_controller()->SetWallpaperImage(
|
| - (*result_out)->image(), layout);
|
| + SetWallpaper((*result_out)->image(), layout);
|
| }
|
|
|
| void WallpaperManager::StartLoadAndSetDefaultWallpaper(
|
|
|