delete_tree_work_item.h revision c2e0dbddbe15c98d52c4786dac06cb8952a8ae6d
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.
20class 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