cache_util_posix.cc revision 868fa2fe829687343ffae624259930155e16dbd8
15d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// Copyright (c) 2011 The Chromium Authors. All rights reserved. 25d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// found in the LICENSE file. 45d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 55d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "net/disk_cache/cache_util.h" 65d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 75d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "base/file_util.h" 85d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "base/files/file_enumerator.h" 95d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "base/logging.h" 105f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "base/string_util.h" 11116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)namespace disk_cache { 135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)bool MoveCache(const base::FilePath& from_path, const base::FilePath& to_path) { 155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#if defined(OS_CHROMEOS) 165f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // For ChromeOS, we don't actually want to rename the cache 175f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // directory, because if we do, then it'll get recreated through the 185f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // encrypted filesystem (with encrypted names), and we won't be able 195d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // to see these directories anymore in an unmounted encrypted 205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // filesystem, so we just move each item in the cache to a new 215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // directory. 225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (!file_util::CreateDirectory(to_path)) { 235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) LOG(ERROR) << "Unable to create destination cache directory."; 245d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return false; 255d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::FileEnumerator iter(from_path, false /* not recursive */, 275d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::FileEnumerator::DIRECTORIES | base::FileEnumerator::FILES); 285d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) for (base::FilePath name = iter.Next(); !name.value().empty(); 295d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) name = iter.Next()) { 305d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::FilePath destination = to_path.Append(name.BaseName()); 315d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (!file_util::Move(name, destination)) { 325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) LOG(ERROR) << "Unable to move cache item."; 335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return false; 345d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 355f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 365f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return true; 375d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#else 385f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return file_util::Move(from_path, to_path); 395f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#endif 405f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 425f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)void DeleteCache(const base::FilePath& path, bool remove_folder) { 435f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) base::FileEnumerator iter(path, 445f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) /* recursive */ false, 455d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::FileEnumerator::FILES); 465d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) for (base::FilePath file = iter.Next(); !file.value().empty(); 475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) file = iter.Next()) { 485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (!file_util::Delete(file, /* recursive */ false)) { 495d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) LOG(WARNING) << "Unable to delete cache."; 50 return; 51 } 52 } 53 54 if (remove_folder) { 55 if (!file_util::Delete(path, /* recursive */ false)) { 56 LOG(WARNING) << "Unable to delete cache folder."; 57 return; 58 } 59 } 60} 61 62bool DeleteCacheFile(const base::FilePath& name) { 63 return file_util::Delete(name, false); 64} 65 66} // namespace disk_cache 67