• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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_DELETE_TREE_WORK_ITEM_H_
6 #define CHROME_INSTALLER_UTIL_DELETE_TREE_WORK_ITEM_H_
7 
8 #include <vector>
9 
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"
14 
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   virtual ~DeleteTreeWorkItem();
23 
24   virtual bool Do();
25 
26   virtual void Rollback();
27 
28  private:
29   friend class WorkItem;
30 
31   DeleteTreeWorkItem(const base::FilePath& root_path,
32                      const base::FilePath& temp_path,
33                      const std::vector<base::FilePath>& key_paths);
34 
35   // Root path to delete.
36   base::FilePath root_path_;
37 
38   // Temporary directory that can be used.
39   base::FilePath temp_path_;
40 
41   // The number of key files.
42   ptrdiff_t num_key_files_;
43 
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_;
47 
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_;
52 
53   // The temporary directory into which the original root_path_ has been moved.
54   base::ScopedTempDir backup_path_;
55 
56   // Set to true once root_path_ has been copied into backup_path_.
57   bool copied_to_backup_;
58 };
59 
60 #endif  // CHROME_INSTALLER_UTIL_DELETE_TREE_WORK_ITEM_H_
61