| // 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_SESSIONS_MODEL_SESSION_IO_REQUEST_H_ |
| #define IOS_CHROME_BROWSER_SESSIONS_MODEL_SESSION_IO_REQUEST_H_ |
| |
| #import <Foundation/Foundation.h> |
| |
| #import <memory> |
| |
| #import "base/files/file_path.h" |
| |
| namespace google::protobuf { |
| class MessageLite; |
| } // namespace google::protobuf |
| |
| namespace ios::sessions { |
| |
| // Representing a delayed IO request for session restoration. Supposed to |
| // be posted on a background sequence. |
| class IORequest { |
| public: |
| IORequest() = default; |
| virtual ~IORequest() = default; |
| |
| // Perform the IO request. |
| virtual void Execute() const = 0; |
| }; |
| |
| // An IO request asking to write data (stored as NSData*) to path. |
| class WriteDataIORequest final : public IORequest { |
| public: |
| WriteDataIORequest(base::FilePath path, NSData* data); |
| ~WriteDataIORequest() final; |
| |
| // IORequest implementation. |
| void Execute() const final; |
| |
| private: |
| const base::FilePath path_; |
| NSData* const data_; |
| }; |
| |
| // An IO request asking to write daya (stored as a protobuf message) to path. |
| class WriteProtoIORequest final : public IORequest { |
| public: |
| using Proto = google::protobuf::MessageLite; |
| |
| WriteProtoIORequest(base::FilePath path, std::unique_ptr<Proto> proto); |
| ~WriteProtoIORequest() final; |
| |
| // IORequest implementation. |
| void Execute() const final; |
| |
| private: |
| const base::FilePath path_; |
| const std::unique_ptr<Proto> proto_; |
| }; |
| |
| // An IO request asking to copy recursively `from_path` to `dest_path`. |
| class CopyPathIORequest final : public IORequest { |
| public: |
| CopyPathIORequest(base::FilePath from_path, base::FilePath dest_path); |
| ~CopyPathIORequest() final; |
| |
| // IORequest implementation. |
| void Execute() const final; |
| |
| private: |
| const base::FilePath from_path_; |
| const base::FilePath dest_path_; |
| }; |
| |
| // An IO request asking to delete recursively a filesystem item (file or |
| // directory) at path. |
| class DeletePathIORequest final : public IORequest { |
| public: |
| explicit DeletePathIORequest(base::FilePath path); |
| ~DeletePathIORequest() final; |
| |
| // IORequest implementation. |
| void Execute() const final; |
| |
| private: |
| const base::FilePath path_; |
| }; |
| |
| // An ordered list of IORequest objects. |
| using IORequestList = std::vector<std::unique_ptr<IORequest>>; |
| |
| // Executes all `requests` in order. |
| void ExecuteIORequests(IORequestList requests); |
| |
| } // namespace ios::sessions |
| |
| #endif // IOS_CHROME_BROWSER_SESSIONS_MODEL_SESSION_IO_REQUEST_H_ |