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