1// Copyright (c) 2009 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 BASE_SCOPED_TEMP_DIR_H_
6#define BASE_SCOPED_TEMP_DIR_H_
7
8// An object representing a temporary / scratch directory that should be cleaned
9// up (recursively) when this object goes out of scope.  Note that since
10// deletion occurs during the destructor, no further error handling is possible
11// if the directory fails to be deleted.  As a result, deletion is not
12// guaranteed by this class.
13
14#include "base/file_path.h"
15
16class ScopedTempDir {
17 public:
18  // No directory is owned/created initially.
19  ScopedTempDir();
20
21  // Recursively delete path_
22  ~ScopedTempDir();
23
24  // Creates a unique directory in TempPath, and takes ownership of it.
25  // See file_util::CreateNewTemporaryDirectory.
26  bool CreateUniqueTempDir();
27
28  // Takes ownership of directory at |path|, creating it if necessary.
29  // Don't call multiple times unless Take() has been called first.
30  bool Set(const FilePath& path);
31
32  // Caller takes ownership of the temporary directory so it won't be destroyed
33  // when this object goes out of scope.
34  FilePath Take();
35
36  const FilePath& path() const { return path_; }
37
38  // Returns true if path_ is non-empty and exists.
39  bool IsValid() const;
40
41 private:
42  FilePath path_;
43
44  DISALLOW_COPY_AND_ASSIGN(ScopedTempDir);
45};
46
47#endif  // BASE_SCOPED_TEMP_DIR_H_
48