1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #ifndef CHROME_INSTALLER_UTIL_SELF_CLEANING_TEMP_DIR_H_ 6 #define CHROME_INSTALLER_UTIL_SELF_CLEANING_TEMP_DIR_H_ 7 8 #include "base/basictypes.h" 9 #include "base/files/file_path.h" 10 #include "base/gtest_prod_util.h" 11 12 namespace installer { 13 14 // A helper class for managing a temporary directory. In relation to 15 // base::ScopedTempDir, this class additionally cleans up all non-empty parent 16 // directories of the temporary directory that are created by an instance. 17 class SelfCleaningTempDir { 18 public: 19 typedef base::FilePath::StringType StringType; 20 21 SelfCleaningTempDir(); 22 23 // Performs a Delete(). 24 ~SelfCleaningTempDir(); 25 26 // Creates a temporary directory named |temp_name| under |parent_dir|, 27 // creating intermediate directories as needed. 28 bool Initialize(const base::FilePath& parent_dir, 29 const StringType& temp_name); 30 31 // Returns the temporary directory created in Initialize(). path()32 const base::FilePath& path() const { return temp_dir_; } 33 34 // Deletes the temporary directory created in Initialize() and all of its 35 // contents, as well as all empty intermediate directories. Any of these that 36 // cannot be deleted immediately are scheduled for deletion upon reboot. 37 bool Delete(); 38 39 private: 40 static void GetTopDirToCreate(const base::FilePath& temp_parent_dir, 41 base::FilePath* base_dir); 42 43 // The topmost directory created. 44 base::FilePath base_dir_; 45 46 // The temporary directory. 47 base::FilePath temp_dir_; 48 49 FRIEND_TEST_ALL_PREFIXES(SelfCleaningTempDirTest, TopLevel); 50 FRIEND_TEST_ALL_PREFIXES(SelfCleaningTempDirTest, TopLevelPlusOne); 51 DISALLOW_COPY_AND_ASSIGN(SelfCleaningTempDir); 52 }; 53 54 } // namespace installer 55 56 #endif // CHROME_INSTALLER_UTIL_SELF_CLEANING_TEMP_DIR_H_ 57