| // 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_UPLOAD_TASK_H_ |
| #define IOS_CHROME_BROWSER_DRIVE_MODEL_UPLOAD_TASK_H_ |
| |
| #import "base/observer_list.h" |
| |
| class GURL; |
| @class NSError; |
| @protocol SystemIdentity; |
| class UploadTaskObserver; |
| |
| // Provides API for a single browser upload task. This is the model class that |
| // stores all the state for an upload. |
| class UploadTask { |
| public: |
| // Possible states of the upload task. |
| enum class State { |
| // Upload has not started yet. |
| kNotStarted = 0, |
| // Upload is actively progressing. |
| kInProgress, |
| // Upload is cancelled. |
| kCancelled, |
| // Upload is completely finished. |
| kComplete, |
| // Upload has failed but can be retried. |
| kFailed, |
| }; |
| |
| UploadTask(); |
| virtual ~UploadTask(); |
| |
| // Returns the upload task state. |
| virtual State GetState() const = 0; |
| // Returns whether the task is complete. |
| bool IsDone() const; |
| |
| // Starts the upload. |
| virtual void Start() = 0; |
| // Cancels the upload. |
| virtual void Cancel() = 0; |
| |
| // Returns the identity used to upload the file, if any. |
| virtual id<SystemIdentity> GetIdentity() const = 0; |
| // Returns the upload progress from 0 to 1. |
| virtual float GetProgress() const = 0; |
| // Returns the response link to the uploaded file, if any. |
| // If `add_user_identifier` is `true`, then the returned link is modified to |
| // include the identifier of the uploading identity. |
| virtual std::optional<GURL> GetResponseLink( |
| bool add_user_identifier = false) const = 0; |
| // Returns the error object for this upload task, in case of failure. |
| virtual NSError* GetError() const = 0; |
| |
| // Adds and removes UploadTaskObserver. Clients must remove self from |
| // observers before the task is destroyed. |
| void AddObserver(UploadTaskObserver* observer); |
| void RemoveObserver(UploadTaskObserver* observer); |
| |
| protected: |
| // Called when upload task was updated. |
| void OnUploadUpdated(); |
| |
| private: |
| // A list of observers. At destruction, it *will* check that all observers |
| // have removed themselves from this list. Weak references. |
| base::ObserverList<UploadTaskObserver, true> observers_; |
| }; |
| |
| #endif // IOS_CHROME_BROWSER_DRIVE_MODEL_UPLOAD_TASK_H_ |