| // Copyright (c) 2011 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 CHROME_INSTALLER_UTIL_DELETE_TREE_WORK_ITEM_H_ |
| #define CHROME_INSTALLER_UTIL_DELETE_TREE_WORK_ITEM_H_ |
| |
| #include <vector> |
| |
| #include "base/files/file_path.h" |
| #include "base/files/scoped_temp_dir.h" |
| #include "base/memory/scoped_ptr.h" |
| #include "chrome/installer/util/work_item.h" |
| |
| // A WorkItem subclass that recursively deletes a file system hierarchy at the |
| // given root path. The file system hierarchy could be a single file, or a |
| // directory. |
| // The file system hierarchy to be deleted can have one or more key files. If |
| // specified, deletion will be performed only if all key files are not in use. |
| class DeleteTreeWorkItem : public WorkItem { |
| public: |
| virtual ~DeleteTreeWorkItem(); |
| |
| virtual bool Do(); |
| |
| virtual void Rollback(); |
| |
| private: |
| friend class WorkItem; |
| |
| DeleteTreeWorkItem(const base::FilePath& root_path, |
| const base::FilePath& temp_path, |
| const std::vector<base::FilePath>& key_paths); |
| |
| // Root path to delete. |
| base::FilePath root_path_; |
| |
| // Temporary directory that can be used. |
| base::FilePath temp_path_; |
| |
| // The number of key files. |
| ptrdiff_t num_key_files_; |
| |
| // Contains the paths to the key files. If specified, deletion will be |
| // performed only if none of the key files are in use. |
| scoped_ptr<base::FilePath[]> key_paths_; |
| |
| // Contains the temp directories for the backed-up key files. The directories |
| // are created and populated in Do() as-needed. We don't use a standard |
| // container for this since base::ScopedTempDir isn't CopyConstructible. |
| scoped_ptr<base::ScopedTempDir[]> key_backup_paths_; |
| |
| // The temporary directory into which the original root_path_ has been moved. |
| base::ScopedTempDir backup_path_; |
| |
| // Set to true once root_path_ has been copied into backup_path_. |
| bool copied_to_backup_; |
| }; |
| |
| #endif // CHROME_INSTALLER_UTIL_DELETE_TREE_WORK_ITEM_H_ |