| // Copyright 2022 The Chromium Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "ash/webui/color_internals/wallpaper_colors_handler_impl.h" |
| |
| #include "ash/public/cpp/wallpaper/wallpaper_controller_observer.h" |
| #include "ash/shell.h" |
| #include "ash/wallpaper/wallpaper_controller_impl.h" |
| #include "ash/webui/color_internals/mojom/color_internals.mojom.h" |
| #include "base/scoped_observation.h" |
| |
| namespace ash { |
| |
| WallpaperColorsHandlerImpl::WallpaperColorsHandlerImpl( |
| mojo::PendingReceiver<ash::color_internals::mojom::WallpaperColorsHandler> |
| receiver) |
| : receiver_(this, std::move(receiver)) {} |
| |
| WallpaperColorsHandlerImpl::~WallpaperColorsHandlerImpl() = default; |
| |
| void WallpaperColorsHandlerImpl::SetWallpaperColorsObserver( |
| mojo::PendingRemote<ash::color_internals::mojom::WallpaperColorsObserver> |
| observer) { |
| // May already be bound if user refreshes page. |
| observer_remote_.reset(); |
| observer_remote_.Bind(std::move(observer)); |
| if (!scoped_wallpaper_controller_observation_.IsObserving()) { |
| scoped_wallpaper_controller_observation_.Observe( |
| WallpaperController::Get()); |
| } |
| // Call it once to initialize the observer. |
| OnWallpaperColorsChanged(); |
| } |
| |
| void WallpaperColorsHandlerImpl::OnWallpaperColorsChanged() { |
| DCHECK(observer_remote_.is_bound()); |
| const auto& calculated_colors = |
| Shell::Get()->wallpaper_controller()->calculated_colors(); |
| if (!calculated_colors.has_value()) { |
| return; |
| } |
| observer_remote_->OnWallpaperColorsChanged(*calculated_colors); |
| } |
| |
| } // namespace ash |