Merge Chromium + Blink git repositories
[chromium-blink-merge.git] / chrome / installer / util / delete_tree_work_item.h
blobe233af51adaf7cb0a58c2ab0e507191404ea744e
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.
5 #ifndef CHROME_INSTALLER_UTIL_DELETE_TREE_WORK_ITEM_H_
6 #define CHROME_INSTALLER_UTIL_DELETE_TREE_WORK_ITEM_H_
8 #include <vector>
10 #include "base/files/file_path.h"
11 #include "base/files/scoped_temp_dir.h"
12 #include "base/memory/scoped_ptr.h"
13 #include "chrome/installer/util/work_item.h"
15 // A WorkItem subclass that recursively deletes a file system hierarchy at the
16 // given root path. The file system hierarchy could be a single file, or a
17 // directory.
18 // The file system hierarchy to be deleted can have one or more key files. If
19 // specified, deletion will be performed only if all key files are not in use.
20 class DeleteTreeWorkItem : public WorkItem {
21 public:
22 ~DeleteTreeWorkItem() override;
24 bool Do() override;
26 void Rollback() override;
28 private:
29 friend class WorkItem;
31 DeleteTreeWorkItem(const base::FilePath& root_path,
32 const base::FilePath& temp_path,
33 const std::vector<base::FilePath>& key_paths);
35 // Root path to delete.
36 base::FilePath root_path_;
38 // Temporary directory that can be used.
39 base::FilePath temp_path_;
41 // The number of key files.
42 ptrdiff_t num_key_files_;
44 // Contains the paths to the key files. If specified, deletion will be
45 // performed only if none of the key files are in use.
46 scoped_ptr<base::FilePath[]> key_paths_;
48 // Contains the temp directories for the backed-up key files. The directories
49 // are created and populated in Do() as-needed. We don't use a standard
50 // container for this since base::ScopedTempDir isn't CopyConstructible.
51 scoped_ptr<base::ScopedTempDir[]> key_backup_paths_;
53 // The temporary directory into which the original root_path_ has been moved.
54 base::ScopedTempDir backup_path_;
56 // Set to true once root_path_ has been copied into backup_path_.
57 bool copied_to_backup_;
60 #endif // CHROME_INSTALLER_UTIL_DELETE_TREE_WORK_ITEM_H_