cache_util_posix.cc revision a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7
148d4a001b3faaa707716ea6bd93dd98b487768ceBenjamin Franzke// Copyright (c) 2011 The Chromium Authors. All rights reserved.
248d4a001b3faaa707716ea6bd93dd98b487768ceBenjamin Franzke// Use of this source code is governed by a BSD-style license that can be
348d4a001b3faaa707716ea6bd93dd98b487768ceBenjamin Franzke// found in the LICENSE file.
448d4a001b3faaa707716ea6bd93dd98b487768ceBenjamin Franzke
548d4a001b3faaa707716ea6bd93dd98b487768ceBenjamin Franzke#include "net/disk_cache/cache_util.h"
648d4a001b3faaa707716ea6bd93dd98b487768ceBenjamin Franzke
748d4a001b3faaa707716ea6bd93dd98b487768ceBenjamin Franzke#include "base/file_util.h"
848d4a001b3faaa707716ea6bd93dd98b487768ceBenjamin Franzke#include "base/files/file_enumerator.h"
948d4a001b3faaa707716ea6bd93dd98b487768ceBenjamin Franzke#include "base/logging.h"
1048d4a001b3faaa707716ea6bd93dd98b487768ceBenjamin Franzke#include "base/strings/string_util.h"
1148d4a001b3faaa707716ea6bd93dd98b487768ceBenjamin Franzke
1248d4a001b3faaa707716ea6bd93dd98b487768ceBenjamin Franzkenamespace disk_cache {
1348d4a001b3faaa707716ea6bd93dd98b487768ceBenjamin Franzke
1448d4a001b3faaa707716ea6bd93dd98b487768ceBenjamin Franzkebool MoveCache(const base::FilePath& from_path, const base::FilePath& to_path) {
1548d4a001b3faaa707716ea6bd93dd98b487768ceBenjamin Franzke#if defined(OS_CHROMEOS)
1648d4a001b3faaa707716ea6bd93dd98b487768ceBenjamin Franzke  // For ChromeOS, we don't actually want to rename the cache
1748d4a001b3faaa707716ea6bd93dd98b487768ceBenjamin Franzke  // directory, because if we do, then it'll get recreated through the
1848d4a001b3faaa707716ea6bd93dd98b487768ceBenjamin Franzke  // encrypted filesystem (with encrypted names), and we won't be able
1948d4a001b3faaa707716ea6bd93dd98b487768ceBenjamin Franzke  // to see these directories anymore in an unmounted encrypted
2048d4a001b3faaa707716ea6bd93dd98b487768ceBenjamin Franzke  // filesystem, so we just move each item in the cache to a new
2148d4a001b3faaa707716ea6bd93dd98b487768ceBenjamin Franzke  // directory.
2248d4a001b3faaa707716ea6bd93dd98b487768ceBenjamin Franzke  if (!base::CreateDirectory(to_path)) {
2348d4a001b3faaa707716ea6bd93dd98b487768ceBenjamin Franzke    LOG(ERROR) << "Unable to create destination cache directory.";
2448d4a001b3faaa707716ea6bd93dd98b487768ceBenjamin Franzke    return false;
2548d4a001b3faaa707716ea6bd93dd98b487768ceBenjamin Franzke  }
2648d4a001b3faaa707716ea6bd93dd98b487768ceBenjamin Franzke  base::FileEnumerator iter(from_path, false /* not recursive */,
2748d4a001b3faaa707716ea6bd93dd98b487768ceBenjamin Franzke      base::FileEnumerator::DIRECTORIES | base::FileEnumerator::FILES);
2848d4a001b3faaa707716ea6bd93dd98b487768ceBenjamin Franzke  for (base::FilePath name = iter.Next(); !name.value().empty();
2948d4a001b3faaa707716ea6bd93dd98b487768ceBenjamin Franzke       name = iter.Next()) {
30b52a0f22813c8e09747ece41173c21f22d4fc369Francisco Jerez    base::FilePath destination = to_path.Append(name.BaseName());
31b52a0f22813c8e09747ece41173c21f22d4fc369Francisco Jerez    if (!base::Move(name, destination)) {
32b52a0f22813c8e09747ece41173c21f22d4fc369Francisco Jerez      LOG(ERROR) << "Unable to move cache item.";
33b52a0f22813c8e09747ece41173c21f22d4fc369Francisco Jerez      return false;
34b52a0f22813c8e09747ece41173c21f22d4fc369Francisco Jerez    }
35b52a0f22813c8e09747ece41173c21f22d4fc369Francisco Jerez  }
3648d4a001b3faaa707716ea6bd93dd98b487768ceBenjamin Franzke  return true;
37b52a0f22813c8e09747ece41173c21f22d4fc369Francisco Jerez#else
38b52a0f22813c8e09747ece41173c21f22d4fc369Francisco Jerez  return base::Move(from_path, to_path);
39b52a0f22813c8e09747ece41173c21f22d4fc369Francisco Jerez#endif
40b52a0f22813c8e09747ece41173c21f22d4fc369Francisco Jerez}
41b52a0f22813c8e09747ece41173c21f22d4fc369Francisco Jerez
42b52a0f22813c8e09747ece41173c21f22d4fc369Francisco Jerezbool DeleteCacheFile(const base::FilePath& name) {
43b52a0f22813c8e09747ece41173c21f22d4fc369Francisco Jerez  return base::DeleteFile(name, false);
44b52a0f22813c8e09747ece41173c21f22d4fc369Francisco Jerez}
45b52a0f22813c8e09747ece41173c21f22d4fc369Francisco Jerez
4648d4a001b3faaa707716ea6bd93dd98b487768ceBenjamin Franzke}  // namespace disk_cache
4748d4a001b3faaa707716ea6bd93dd98b487768ceBenjamin Franzke