| // 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 CHROMEOS_ASH_COMPONENTS_DATA_MIGRATION_FILE_TRANSFER_H_ |
| #define CHROMEOS_ASH_COMPONENTS_DATA_MIGRATION_FILE_TRANSFER_H_ |
| |
| #include <optional> |
| |
| #include "base/functional/callback.h" |
| #include "base/memory/raw_ptr.h" |
| #include "base/memory/weak_ptr.h" |
| #include "chromeos/ash/components/data_migration/file_receiver.h" |
| |
| class NearbyConnection; |
| class NearbyConnectionsManager; |
| |
| namespace data_migration { |
| |
| class PendingFileTransferQueue; |
| |
| // Pops the next pending file from the `PendingFileTransferQueue` and performs |
| // the file transfer. `FileTransfer` may be destroyed at any time to cancel the |
| // transfer. |
| class FileTransfer { |
| public: |
| // `completion_cb` is run at the end of the transfer with success or failure. |
| // Note `FileTransfer` does not handle retrying the transfer internally. It |
| // is the remote device's responsibility to initiate a retry as it should also |
| // get a failure notice for the transfer. |
| FileTransfer(NearbyConnection* nearby_connection, |
| NearbyConnectionsManager* nearby_connections_manager, |
| PendingFileTransferQueue& pending_file_transfer_queue, |
| base::OnceCallback<void(bool)> completion_cb); |
| FileTransfer(const FileTransfer&) = delete; |
| FileTransfer& operator=(const FileTransfer&) = delete; |
| ~FileTransfer(); |
| |
| private: |
| void StartFileTransfer(int64_t payload_id); |
| void SendCts(int64_t payload_id); |
| |
| const raw_ptr<NearbyConnection> nearby_connection_; |
| const raw_ptr<NearbyConnectionsManager> nearby_connections_manager_; |
| base::OnceCallback<void(bool)> completion_cb_; |
| std::optional<FileReceiver> file_receiver_; |
| base::WeakPtrFactory<FileTransfer> weak_ptr_factory_{this}; |
| }; |
| |
| } // namespace data_migration |
| |
| #endif // CHROMEOS_ASH_COMPONENTS_DATA_MIGRATION_FILE_TRANSFER_H_ |