chromium/chrome/browser/ash/crosapi/one_drive_integration_service_ash.h

// Copyright 2024 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_CROSAPI_ONE_DRIVE_INTEGRATION_SERVICE_ASH_H_
#define CHROME_BROWSER_ASH_CROSAPI_ONE_DRIVE_INTEGRATION_SERVICE_ASH_H_

#include "chromeos/crosapi/mojom/one_drive_integration_service.mojom.h"

#include "chrome/browser/ash/file_system_provider/observer.h"
#include "chrome/browser/ash/file_system_provider/service.h"
#include "mojo/public/cpp/bindings/receiver_set.h"
#include "mojo/public/cpp/bindings/remote_set.h"

namespace crosapi {

// The ash-chrome implementation of the OneDriveIntegrationService crosapi
// interface.
class OneDriveIntegrationServiceAsh
    : public mojom::OneDriveIntegrationService,
      public ash::file_system_provider::Observer {
 public:
  OneDriveIntegrationServiceAsh();
  ~OneDriveIntegrationServiceAsh() override;

  void BindReceiver(
      mojo::PendingReceiver<mojom::OneDriveIntegrationService> receiver);

  // mojom::OneDriveIntegrationService:
  void AddOneDriveMountObserver(
      mojo::PendingRemote<mojom::OneDriveMountObserver> observer) override;

 protected:
  // ash::file_system_provider::Observer:
  void OnProvidedFileSystemMount(
      const ash::file_system_provider::ProvidedFileSystemInfo& file_system_info,
      ash::file_system_provider::MountContext context,
      base::File::Error error) override;
  void OnProvidedFileSystemUnmount(
      const ash::file_system_provider::ProvidedFileSystemInfo& file_system_info,
      base::File::Error error) override;
  void OnShutDown() override;

 private:
  // This class supports any number of connections. This allows the client to
  // have multiple, potentially thread-affine, remotes.
  mojo::ReceiverSet<mojom::OneDriveIntegrationService> one_drive_service_set_;
  // Support any number of observers.
  mojo::RemoteSet<mojom::OneDriveMountObserver> observers_;

  base::ScopedObservation<ash::file_system_provider::Service,
                          ash::file_system_provider::Observer>
      file_system_provider_observation_{this};
};

}  // namespace crosapi

#endif  // CHROME_BROWSER_ASH_CROSAPI_ONE_DRIVE_INTEGRATION_SERVICE_ASH_H_