chromium/ios/chrome/browser/drive/model/drive_service.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 IOS_CHROME_BROWSER_DRIVE_MODEL_DRIVE_SERVICE_H_
#define IOS_CHROME_BROWSER_DRIVE_MODEL_DRIVE_SERVICE_H_

#import <memory>

#import "components/keyed_service/core/keyed_service.h"

class DriveFileDownloader;
class DriveFileUploader;
class DriveList;
@class NSString;
@protocol SystemIdentity;

namespace drive {

// Service responsible for providing access to the Drive API.
class DriveService : public KeyedService {
 public:
  DriveService();
  ~DriveService() override;

  // Whether the service is supported. This value does not change during the
  // execution of the application.
  virtual bool IsSupported() const = 0;

  // Returns a DriveFileUploader to perform queries on the Drive of `identity`.
  virtual std::unique_ptr<DriveFileUploader> CreateFileUploader(
      id<SystemIdentity> identity) = 0;

  // Returns a DriveFileDownloader to download items from the Drive of
  // `identity`.
  // TODO(crbug.com/344812086): Make this pure virtual once implemented
  // everywhere.
  virtual std::unique_ptr<DriveFileDownloader> CreateFileDownloader(
      id<SystemIdentity> identity);

  // Returns a DriveList to perform queries on the Drive of `identity`.
  // TODO(crbug.com/344812086): Make this pure virtual once implemented
  // everywhere.
  virtual std::unique_ptr<DriveList> CreateList(id<SystemIdentity> identity);

  // Returns a name suggestion for the folder in which to add uploaded files.
  virtual std::string GetSuggestedFolderName() const = 0;
};

}  // namespace drive

#endif  // IOS_CHROME_BROWSER_DRIVE_MODEL_DRIVE_SERVICE_H_