// Copyright 2020 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef COMPONENTS_APP_RESTORE_FULL_RESTORE_FILE_HANDLER_H_ #define COMPONENTS_APP_RESTORE_FULL_RESTORE_FILE_HANDLER_H_ #include #include "base/component_export.h" #include "base/files/file_path.h" #include "base/memory/ref_counted_delete_on_sequence.h" #include "base/task/sequenced_task_runner_helpers.h" class SequencedTaskRunner; namespace app_restore { class RestoreData; } namespace full_restore { // FullRestoreFileHandler is the backend used by FullRestoreSaveHandler and // RestoreHandler. It reads and writes RestoreData from and to disk. // FullRestoreFileHandler is created on the main thread, and does no IO by // the constructor. The real work is done by WriteToFile and ReadFromFile, which // must be invoked on a background task runner |owning_task_runner|. class COMPONENT_EXPORT(APP_RESTORE) FullRestoreFileHandler : public base::RefCountedDeleteOnSequence { public: // Creates a FullRestoreFileHandler. This method is invoked on the main // thread, and does no IO. |path| is the path of the full restore file. FullRestoreFileHandler(const base::FilePath& path); FullRestoreFileHandler(const FullRestoreFileHandler&) = delete; FullRestoreFileHandler& operator=(const FullRestoreFileHandler&) = delete; base::SequencedTaskRunner* owning_task_runner() { return base::RefCountedDeleteOnSequence< FullRestoreFileHandler>::owning_task_runner(); } // Writes |restore_data| to the full restore file. This method must be invoked // on a background task runner |owning_task_runner|. void WriteToFile(std::unique_ptr restore_data); // Reads |restore_data| to the full restore file. This method must be invoked // on a background task runner |owning_task_runner|. std::unique_ptr ReadFromFile(); private: friend class base::RefCountedDeleteOnSequence; friend class base::DeleteHelper; virtual ~FullRestoreFileHandler(); // Performs blocking I/O. Called on a background task runner // |owning_task_runner|. void WriteDataBlocking(const std::string& full_restore_data); // Performs blocking I/O. Called on a background task runner. // |owning_task_runner|. Returns true on success and false on error. The // reading result is written to |full_restore_data|. bool ReadDataBlocking(std::string& full_restore_data); base::FilePath file_path_; }; } // namespace full_restore #endif // COMPONENTS_APP_RESTORE_FULL_RESTORE_FILE_HANDLER_H_