| // 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 IOS_CHROME_BROWSER_DRIVE_MODEL_DRIVE_FILE_UPLOADER_H_ |
| #define IOS_CHROME_BROWSER_DRIVE_MODEL_DRIVE_FILE_UPLOADER_H_ |
| |
| #import <Foundation/Foundation.h> |
| |
| #import "base/functional/callback.h" |
| |
| @protocol SystemIdentity; |
| |
| // Result returned asynchronously by the completion callback of a query to |
| // search/create a folder. |
| struct DriveFolderResult { |
| // Identifier of the found/created folder, if search/creation succeeded. If |
| // this is a search result but there is no folder matching the search |
| // criteria, both `error` and `folder_identifier` will be nil. |
| NSString* folder_identifier = nil; |
| // Error object, if folder search/creation failed. Empty search results are |
| // not treated as errors. |
| NSError* error = nil; |
| }; |
| |
| using DriveFolderCompletionCallback = |
| base::OnceCallback<void(const DriveFolderResult&)>; |
| |
| // Progress returned asynchronously by the progress callback of a query to |
| // upload a file. |
| struct DriveFileUploadProgress { |
| // Number of bytes uploaded so far. |
| uint64_t total_bytes_uploaded; |
| // Number of bytes expected to be uploaded. |
| uint64_t total_bytes_expected_to_upload; |
| }; |
| |
| using DriveFileUploadProgressCallback = |
| base::RepeatingCallback<void(const DriveFileUploadProgress&)>; |
| |
| // Result returned asynchronously by the completion callback of a query to |
| // upload a file. |
| struct DriveFileUploadResult { |
| // A link for opening the file, if file upload succeeded. |
| NSString* file_link = nil; |
| // Error object, if file upload failed. |
| NSError* error = nil; |
| }; |
| |
| using DriveFileUploadCompletionCallback = |
| base::OnceCallback<void(const DriveFileUploadResult&)>; |
| |
| // Result reported by the completion block of a query to fetch the user's Drive |
| // storage quota. |
| struct DriveStorageQuotaResult { |
| // The usage limit, if applicable. Set to -1 if the user has unlimited |
| // storage. |
| int64_t limit; |
| // The usage by all files in Drive. |
| int64_t usage_in_drive; |
| // The usage by trashed files in Drive. |
| int64_t usage_in_drive_trash; |
| // The total usage across all services. |
| int64_t usage; |
| // Error object, if fetching storage quota failed. |
| NSError* error = nil; |
| }; |
| |
| using DriveStorageQuotaCompletionCallback = |
| base::OnceCallback<void(const DriveStorageQuotaResult&)>; |
| |
| // This interface is used to perform queries in a user's Drive account. |
| class DriveFileUploader { |
| public: |
| DriveFileUploader(); |
| virtual ~DriveFileUploader(); |
| |
| // Returns the identity used to perform queries. |
| virtual id<SystemIdentity> GetIdentity() const = 0; |
| // Returns whether a query is currently being executed by this uploader. |
| virtual bool IsExecutingQuery() const = 0; |
| // Cancels the query currently being executed by this uploader. |
| virtual void CancelCurrentQuery() = 0; |
| |
| // Returns the "Save to Drive" folder. The "Save to Drive" folder |
| // meets multiple criteria: |
| // - 1 - Its name must be `folder_name`. |
| // - 2 - It must have been created from this app. |
| // - 3 - It must not be in the trash. |
| // If multiple folders match these criteria, the most recent one according to |
| // creation date is returned. |
| // The result, including possible error details, is returned asynchronously |
| // through `completion_callback`. |
| virtual void SearchSaveToDriveFolder( |
| NSString* folder_name, |
| DriveFolderCompletionCallback completion_callback) = 0; |
| |
| // Creates the destination Drive folder. The name of the created folder is |
| // `folder_name` and a custom property is added in the folder's metadata to |
| // find the folder later. |
| // The result, including possible error details, is returned asynchronously |
| // through `completion_callback`. |
| virtual void CreateSaveToDriveFolder( |
| NSString* folder_name, |
| DriveFolderCompletionCallback completion_callback) = 0; |
| |
| // Gets or creates the destination Drive folder as a client folder. The name |
| // of the created folder is `folder_name`. The result, including possible |
| // error details, is returned asynchronously through `completion_callback`. |
| virtual void FetchSaveToDriveClientFolder( |
| NSString* folder_name, |
| DriveFolderCompletionCallback completion_callback) = 0; |
| |
| // Uploads the file stored locally at `file_url`, with MIME type |
| // `file_mime_type`, in Drive folder with identifier `folder_identifier`. |
| // Progress of upload is reported through `progress_callback` and final |
| // result, including possible error details, is returned asynchronously |
| // through `completion_callback`. |
| virtual void UploadFile( |
| NSURL* file_url, |
| NSString* file_name, |
| NSString* file_mime_type, |
| NSString* folder_identifier, |
| DriveFileUploadProgressCallback progress_callback, |
| DriveFileUploadCompletionCallback completion_callback) = 0; |
| |
| // Fetches the Drive storage quota, to check if there is enough storage for |
| // uploads. |
| virtual void FetchStorageQuota( |
| DriveStorageQuotaCompletionCallback completion_callback) = 0; |
| }; |
| |
| #endif // IOS_CHROME_BROWSER_DRIVE_MODEL_DRIVE_FILE_UPLOADER_H_ |