chromium/ash/webui/color_internals/wallpaper_colors_handler_impl.h

// 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.

#ifndef ASH_WEBUI_COLOR_INTERNALS_WALLPAPER_COLORS_HANDLER_IMPL_H_
#define ASH_WEBUI_COLOR_INTERNALS_WALLPAPER_COLORS_HANDLER_IMPL_H_

#include "ash/public/cpp/wallpaper/wallpaper_controller.h"
#include "ash/public/cpp/wallpaper/wallpaper_controller_observer.h"
#include "ash/webui/color_internals/mojom/color_internals.mojom.h"
#include "base/scoped_observation.h"
#include "mojo/public/cpp/bindings/pending_receiver.h"
#include "mojo/public/cpp/bindings/pending_remote.h"
#include "mojo/public/cpp/bindings/receiver.h"
#include "mojo/public/cpp/bindings/remote.h"

namespace ash {

class WallpaperColorsHandlerImpl
    : public color_internals::mojom::WallpaperColorsHandler,
      public WallpaperControllerObserver {
 public:
  explicit WallpaperColorsHandlerImpl(
      mojo::PendingReceiver<ash::color_internals::mojom::WallpaperColorsHandler>
          receiver);

  WallpaperColorsHandlerImpl(const WallpaperColorsHandlerImpl&) = delete;
  WallpaperColorsHandlerImpl& operator=(const WallpaperColorsHandlerImpl&) =
      delete;

  ~WallpaperColorsHandlerImpl() override;

  // color_internals::mojom::WallpaperColorsHandler:
  void SetWallpaperColorsObserver(
      mojo::PendingRemote<color_internals::mojom::WallpaperColorsObserver>
          observer) override;

  // WallpaperControllerObserver:
  void OnWallpaperColorsChanged() override;

 private:
  base::ScopedObservation<WallpaperController, WallpaperControllerObserver>
      scoped_wallpaper_controller_observation_{this};
  mojo::Remote<color_internals::mojom::WallpaperColorsObserver>
      observer_remote_;
  mojo::Receiver<color_internals::mojom::WallpaperColorsHandler> receiver_;
};

}  // namespace ash

#endif  // ASH_WEBUI_COLOR_INTERNALS_WALLPAPER_COLORS_HANDLER_IMPL_H_