Home | History | Annotate | Download | only in util
      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