1c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// Copyright (c) 2006-2008 The Chromium Authors. All rights reserved.
2c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// Use of this source code is governed by a BSD-style license that can be
3c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// found in the LICENSE file.
4c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott
5c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#include "net/disk_cache/cache_util.h"
6c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott
7c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#include "base/file_util.h"
8c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#include "base/logging.h"
9c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#include "base/string_util.h"
10c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott
11c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scottnamespace disk_cache {
12c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott
13c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scottbool MoveCache(const FilePath& from_path, const FilePath& to_path) {
14731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick#if defined(OS_CHROMEOS)
15731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  // For ChromeOS, we don't actually want to rename the cache
16731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  // directory, because if we do, then it'll get recreated through the
17731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  // encrypted filesystem (with encrypted names), and we won't be able
18731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  // to see these directories anymore in an unmounted encrypted
19731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  // filesystem, so we just move each item in the cache to a new
20731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  // directory.
21731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  if (!file_util::CreateDirectory(to_path)) {
22731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick    LOG(ERROR) << "Unable to create destination cache directory.";
23731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick    return false;
24731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  }
25731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  file_util::FileEnumerator iter(
26731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick      from_path,
27731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick      /* recursive */ false,
28731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick      static_cast<file_util::FileEnumerator::FILE_TYPE>(
29731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick          file_util::FileEnumerator::DIRECTORIES |
30731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick          file_util::FileEnumerator::FILES));
31731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  for (FilePath name = iter.Next(); !name.value().empty(); name = iter.Next()) {
32731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick    FilePath destination = to_path.Append(name.BaseName());
33731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick    if (!file_util::Move(name, destination)) {
34731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick      LOG(ERROR) << "Unable to move cache item.";
35731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick      return false;
36731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick    }
37731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  }
38731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  return true;
39731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick#else
40c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  return file_util::Move(from_path, to_path);
41731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick#endif
42c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott}
43c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott
44c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scottvoid DeleteCache(const FilePath& path, bool remove_folder) {
45c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  file_util::FileEnumerator iter(path,
46c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott                                 /* recursive */ false,
47c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott                                 file_util::FileEnumerator::FILES);
48c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  for (FilePath file = iter.Next(); !file.value().empty(); file = iter.Next()) {
49c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    if (!file_util::Delete(file, /* recursive */ false)) {
50c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      LOG(WARNING) << "Unable to delete cache.";
51c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      return;
52c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    }
53c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  }
54c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott
55c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  if (remove_folder) {
56c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    if (!file_util::Delete(path, /* recursive */ false)) {
57c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      LOG(WARNING) << "Unable to delete cache folder.";
58c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      return;
59c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    }
60c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  }
61c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott}
62c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott
63c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scottbool DeleteCacheFile(const FilePath& name) {
64c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  return file_util::Delete(name, false);
65c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott}
66c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott
67c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott}  // namespace disk_cache
68