1*6777b538SAndroid Build Coastguard Worker // Copyright 2011 The Chromium Authors 2*6777b538SAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be 3*6777b538SAndroid Build Coastguard Worker // found in the LICENSE file. 4*6777b538SAndroid Build Coastguard Worker 5*6777b538SAndroid Build Coastguard Worker #ifndef BASE_FILES_SCOPED_TEMP_DIR_H_ 6*6777b538SAndroid Build Coastguard Worker #define BASE_FILES_SCOPED_TEMP_DIR_H_ 7*6777b538SAndroid Build Coastguard Worker 8*6777b538SAndroid Build Coastguard Worker // An object representing a temporary / scratch directory that should be 9*6777b538SAndroid Build Coastguard Worker // cleaned up (recursively) when this object goes out of scope. Since deletion 10*6777b538SAndroid Build Coastguard Worker // occurs during the destructor, no further error handling is possible if the 11*6777b538SAndroid Build Coastguard Worker // directory fails to be deleted. As a result, deletion is not guaranteed by 12*6777b538SAndroid Build Coastguard Worker // this class. (However note that, whenever possible, by default 13*6777b538SAndroid Build Coastguard Worker // CreateUniqueTempDir creates the directory in a location that is 14*6777b538SAndroid Build Coastguard Worker // automatically cleaned up on reboot, or at other appropriate times.) 15*6777b538SAndroid Build Coastguard Worker // 16*6777b538SAndroid Build Coastguard Worker // Multiple calls to the methods which establish a temporary directory 17*6777b538SAndroid Build Coastguard Worker // (CreateUniqueTempDir, CreateUniqueTempDirUnderPath, and Set) must have 18*6777b538SAndroid Build Coastguard Worker // intervening calls to Delete or Take, or the calls will fail. 19*6777b538SAndroid Build Coastguard Worker 20*6777b538SAndroid Build Coastguard Worker #include "base/base_export.h" 21*6777b538SAndroid Build Coastguard Worker #include "base/files/file_path.h" 22*6777b538SAndroid Build Coastguard Worker 23*6777b538SAndroid Build Coastguard Worker namespace base { 24*6777b538SAndroid Build Coastguard Worker 25*6777b538SAndroid Build Coastguard Worker class BASE_EXPORT ScopedTempDir { 26*6777b538SAndroid Build Coastguard Worker public: 27*6777b538SAndroid Build Coastguard Worker // No directory is owned/created initially. 28*6777b538SAndroid Build Coastguard Worker ScopedTempDir(); 29*6777b538SAndroid Build Coastguard Worker 30*6777b538SAndroid Build Coastguard Worker ScopedTempDir(ScopedTempDir&&) noexcept; 31*6777b538SAndroid Build Coastguard Worker ScopedTempDir& operator=(ScopedTempDir&&); 32*6777b538SAndroid Build Coastguard Worker 33*6777b538SAndroid Build Coastguard Worker // Recursively delete path. 34*6777b538SAndroid Build Coastguard Worker ~ScopedTempDir(); 35*6777b538SAndroid Build Coastguard Worker 36*6777b538SAndroid Build Coastguard Worker // Creates a unique directory in TempPath, and takes ownership of it. 37*6777b538SAndroid Build Coastguard Worker // See file_util::CreateNewTemporaryDirectory. 38*6777b538SAndroid Build Coastguard Worker [[nodiscard]] bool CreateUniqueTempDir(); 39*6777b538SAndroid Build Coastguard Worker 40*6777b538SAndroid Build Coastguard Worker // Creates a unique directory under a given path, and takes ownership of it. 41*6777b538SAndroid Build Coastguard Worker [[nodiscard]] bool CreateUniqueTempDirUnderPath(const FilePath& path); 42*6777b538SAndroid Build Coastguard Worker 43*6777b538SAndroid Build Coastguard Worker // Takes ownership of directory at |path|, creating it if necessary. 44*6777b538SAndroid Build Coastguard Worker // Don't call multiple times unless Take() has been called first. 45*6777b538SAndroid Build Coastguard Worker [[nodiscard]] bool Set(const FilePath& path); 46*6777b538SAndroid Build Coastguard Worker 47*6777b538SAndroid Build Coastguard Worker // Deletes the temporary directory wrapped by this object. 48*6777b538SAndroid Build Coastguard Worker [[nodiscard]] bool Delete(); 49*6777b538SAndroid Build Coastguard Worker 50*6777b538SAndroid Build Coastguard Worker // Caller takes ownership of the temporary directory so it won't be destroyed 51*6777b538SAndroid Build Coastguard Worker // when this object goes out of scope. 52*6777b538SAndroid Build Coastguard Worker FilePath Take(); 53*6777b538SAndroid Build Coastguard Worker 54*6777b538SAndroid Build Coastguard Worker // Returns the path to the created directory. Call one of the 55*6777b538SAndroid Build Coastguard Worker // CreateUniqueTempDir* methods before getting the path. 56*6777b538SAndroid Build Coastguard Worker const FilePath& GetPath() const; 57*6777b538SAndroid Build Coastguard Worker 58*6777b538SAndroid Build Coastguard Worker // Returns true if path_ is non-empty and exists. 59*6777b538SAndroid Build Coastguard Worker bool IsValid() const; 60*6777b538SAndroid Build Coastguard Worker 61*6777b538SAndroid Build Coastguard Worker // Returns the prefix used for temp directory names generated by 62*6777b538SAndroid Build Coastguard Worker // ScopedTempDirs. 63*6777b538SAndroid Build Coastguard Worker static const FilePath::CharType* GetTempDirPrefix(); 64*6777b538SAndroid Build Coastguard Worker 65*6777b538SAndroid Build Coastguard Worker private: 66*6777b538SAndroid Build Coastguard Worker FilePath path_; 67*6777b538SAndroid Build Coastguard Worker }; 68*6777b538SAndroid Build Coastguard Worker 69*6777b538SAndroid Build Coastguard Worker } // namespace base 70*6777b538SAndroid Build Coastguard Worker 71*6777b538SAndroid Build Coastguard Worker #endif // BASE_FILES_SCOPED_TEMP_DIR_H_ 72