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_
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
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
{
22 virtual ~DeleteTreeWorkItem();
26 virtual void Rollback();
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_