chromium/chrome/browser/ash/wallpaper_handlers/wallpaper_fetcher_delegate.h

// Copyright 2023 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef CHROME_BROWSER_ASH_WALLPAPER_HANDLERS_WALLPAPER_FETCHER_DELEGATE_H_
#define CHROME_BROWSER_ASH_WALLPAPER_HANDLERS_WALLPAPER_FETCHER_DELEGATE_H_

#include <memory>
#include <string>

#include "ash/public/cpp/wallpaper/wallpaper_controller_client.h"
#include "chrome/browser/profiles/profile.h"

class AccountId;

namespace wallpaper_handlers {

class BackdropCollectionInfoFetcher;
class BackdropImageInfoFetcher;
class BackdropSurpriseMeImageFetcher;
class GooglePhotosAlbumsFetcher;
class GooglePhotosSharedAlbumsFetcher;
class GooglePhotosEnabledFetcher;
class GooglePhotosPhotosFetcher;
class SeaPenFetcher;

// Delegate class for creating backdrop fetchers. Abstract class to allow
// mocking out in test.
class WallpaperFetcherDelegate {
 public:
  virtual ~WallpaperFetcherDelegate() = default;

  virtual std::unique_ptr<BackdropCollectionInfoFetcher>
  CreateBackdropCollectionInfoFetcher() const = 0;

  virtual std::unique_ptr<BackdropImageInfoFetcher>
  CreateBackdropImageInfoFetcher(const std::string& collection_id) const = 0;

  virtual std::unique_ptr<BackdropSurpriseMeImageFetcher>
  CreateBackdropSurpriseMeImageFetcher(
      const std::string& collection_id) const = 0;

  virtual std::unique_ptr<GooglePhotosAlbumsFetcher>
  CreateGooglePhotosAlbumsFetcher(Profile* profile) const = 0;

  virtual std::unique_ptr<GooglePhotosSharedAlbumsFetcher>
  CreateGooglePhotosSharedAlbumsFetcher(Profile* profile) const = 0;

  virtual std::unique_ptr<GooglePhotosEnabledFetcher>
  CreateGooglePhotosEnabledFetcher(Profile* profile) const = 0;

  virtual std::unique_ptr<GooglePhotosPhotosFetcher>
  CreateGooglePhotosPhotosFetcher(Profile* profile) const = 0;

  virtual void FetchGooglePhotosAccessToken(
      const AccountId& account_id,
      ash::WallpaperControllerClient::FetchGooglePhotosAccessTokenCallback
          callback) const = 0;

  virtual std::unique_ptr<SeaPenFetcher> CreateSeaPenFetcher(
      Profile* profile) const = 0;
};

class WallpaperFetcherDelegateImpl : public WallpaperFetcherDelegate {
 public:
  WallpaperFetcherDelegateImpl();

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

  ~WallpaperFetcherDelegateImpl() override;

  // WallpaperFetcherDelegate:
  std::unique_ptr<BackdropCollectionInfoFetcher>
  CreateBackdropCollectionInfoFetcher() const override;

  std::unique_ptr<BackdropImageInfoFetcher> CreateBackdropImageInfoFetcher(
      const std::string& collection_id) const override;

  std::unique_ptr<BackdropSurpriseMeImageFetcher>
  CreateBackdropSurpriseMeImageFetcher(
      const std::string& collection_id) const override;

  std::unique_ptr<GooglePhotosAlbumsFetcher> CreateGooglePhotosAlbumsFetcher(
      Profile* profile) const override;

  std::unique_ptr<GooglePhotosSharedAlbumsFetcher>
  CreateGooglePhotosSharedAlbumsFetcher(Profile* profile) const override;

  std::unique_ptr<GooglePhotosEnabledFetcher> CreateGooglePhotosEnabledFetcher(
      Profile* profile) const override;

  std::unique_ptr<GooglePhotosPhotosFetcher> CreateGooglePhotosPhotosFetcher(
      Profile* profile) const override;

  void FetchGooglePhotosAccessToken(
      const AccountId& account_id,
      ash::WallpaperControllerClient::FetchGooglePhotosAccessTokenCallback
          callback) const override;

  std::unique_ptr<SeaPenFetcher> CreateSeaPenFetcher(
      Profile* profile) const override;
};

}  // namespace wallpaper_handlers

#endif  // CHROME_BROWSER_ASH_WALLPAPER_HANDLERS_WALLPAPER_FETCHER_DELEGATE_H_