// Copyright 2012 The Chromium Authors // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef BASE_FILES_IMPORTANT_FILE_WRITER_H_ #define BASE_FILES_IMPORTANT_FILE_WRITER_H_ #include <memory> #include <optional> #include <string> #include <string_view> #include "base/base_export.h" #include "base/files/file_path.h" #include "base/functional/callback.h" #include "base/memory/raw_ptr.h" #include "base/sequence_checker.h" #include "base/time/time.h" #include "base/timer/timer.h" #include "third_party/abseil-cpp/absl/types/variant.h" namespace base { class SequencedTaskRunner; // Helper for atomically writing a file to ensure that it won't be corrupted by // *application* crash during write (implemented as create, flush, rename). // // As an added benefit, ImportantFileWriter makes it less likely that the file // is corrupted by *system* crash, though even if the ImportantFileWriter call // has already returned at the time of the crash it is not specified which // version of the file (old or new) is preserved. And depending on system // configuration (hardware and software) a significant likelihood of file // corruption may remain, thus using ImportantFileWriter is not a valid // substitute for file integrity checks and recovery codepaths for malformed // files. // // Also note that ImportantFileWriter can be *really* slow (cf. File::Flush() // for details) and thus please don't block shutdown on ImportantFileWriter. class BASE_EXPORT ImportantFileWriter { … }; } // namespace base #endif // BASE_FILES_IMPORTANT_FILE_WRITER_H_