| Index: net/disk_cache/backend_impl.cc
|
| diff --git a/net/disk_cache/backend_impl.cc b/net/disk_cache/backend_impl.cc
|
| index 36ab4c2f5f7b1f574fb530302d59e702794626b0..3c48d8e88d4079d173fc157d0c3a92450f237f0b 100644
|
| --- a/net/disk_cache/backend_impl.cc
|
| +++ b/net/disk_cache/backend_impl.cc
|
| @@ -29,7 +29,7 @@ using base::TimeDelta;
|
|
|
| namespace {
|
|
|
| -const wchar_t* kIndexName = L"index";
|
| +const char* kIndexName = "index";
|
| const int kMaxOldFolders = 100;
|
|
|
| // Seems like ~240 MB correspond to less than 50k entries for 99% of the people.
|
| @@ -65,72 +65,74 @@ size_t GetIndexSize(int table_len) {
|
| // Returns a fully qualified name from path and name, using a given name prefix
|
| // and index number. For instance, if the arguments are "/foo", "bar" and 5, it
|
| // will return "/foo/old_bar_005".
|
| -std::wstring GetPrefixedName(const std::wstring& path, const std::wstring& name,
|
| - int index) {
|
| - std::wstring prefixed(path);
|
| - std::wstring tmp = StringPrintf(L"%ls%ls_%03d", L"old_", name.c_str(), index);
|
| - file_util::AppendToPath(&prefixed, tmp);
|
| - return prefixed;
|
| +FilePath GetPrefixedName(const FilePath& path, const std::string& name,
|
| + int index) {
|
| + std::string tmp = StringPrintf("%s%s_%03d", "old_", name.c_str(), index);
|
| + return path.AppendASCII(tmp);
|
| }
|
|
|
| // This is a simple Task to cleanup old caches.
|
| class CleanupTask : public Task {
|
| public:
|
| - CleanupTask(const std::wstring& path, const std::wstring& name)
|
| + CleanupTask(const FilePath& path, const std::string& name)
|
| : path_(path), name_(name) {}
|
|
|
| virtual void Run();
|
|
|
| private:
|
| - std::wstring path_;
|
| - std::wstring name_;
|
| + FilePath path_;
|
| + std::string name_;
|
| DISALLOW_EVIL_CONSTRUCTORS(CleanupTask);
|
| };
|
|
|
| void CleanupTask::Run() {
|
| for (int i = 0; i < kMaxOldFolders; i++) {
|
| - std::wstring to_delete = GetPrefixedName(path_, name_, i);
|
| + FilePath to_delete = GetPrefixedName(path_, name_, i);
|
| disk_cache::DeleteCache(to_delete, true);
|
| }
|
| }
|
|
|
| // Returns a full path to rename the current cache, in order to delete it. path
|
| // is the current folder location, and name is the current folder name.
|
| -std::wstring GetTempCacheName(const std::wstring& path,
|
| - const std::wstring& name) {
|
| +FilePath GetTempCacheName(const FilePath& path, const std::string& name) {
|
| // We'll attempt to have up to kMaxOldFolders folders for deletion.
|
| for (int i = 0; i < kMaxOldFolders; i++) {
|
| - std::wstring to_delete = GetPrefixedName(path, name, i);
|
| + FilePath to_delete = GetPrefixedName(path, name, i);
|
| if (!file_util::PathExists(to_delete))
|
| return to_delete;
|
| }
|
| - return std::wstring();
|
| + return FilePath();
|
| }
|
|
|
| // Moves the cache files to a new folder and creates a task to delete them.
|
| -bool DelayedCacheCleanup(const std::wstring& full_path) {
|
| - FilePath current_path = FilePath::FromWStringHack(full_path);
|
| - current_path = current_path.StripTrailingSeparators();
|
| -
|
| - std::wstring path = current_path.DirName().ToWStringHack();
|
| - std::wstring name = current_path.BaseName().ToWStringHack();
|
| +bool DelayedCacheCleanup(const FilePath& full_path) {
|
| + FilePath current_path = full_path.StripTrailingSeparators();
|
| +
|
| + FilePath path = current_path.DirName();
|
| + FilePath name = current_path.BaseName();
|
| +#if defined(OS_POSIX)
|
| + std::string name_str = name.value();
|
| +#elif defined(OS_WIN)
|
| + // We created this file so it should only contain ASCII.
|
| + std::string name_str = WideToASCII(name.value());
|
| +#endif
|
|
|
| - std::wstring to_delete = GetTempCacheName(path, name);
|
| + FilePath to_delete = GetTempCacheName(path, name_str);
|
| if (to_delete.empty()) {
|
| LOG(ERROR) << "Unable to get another cache folder";
|
| return false;
|
| }
|
|
|
| - if (!disk_cache::MoveCache(full_path.c_str(), to_delete.c_str())) {
|
| + if (!disk_cache::MoveCache(full_path, to_delete)) {
|
| LOG(ERROR) << "Unable to rename cache folder";
|
| return false;
|
| }
|
|
|
| #if defined(OS_WIN)
|
| - WorkerPool::PostTask(FROM_HERE, new CleanupTask(path, name), true);
|
| + WorkerPool::PostTask(FROM_HERE, new CleanupTask(path, name_str), true);
|
| #elif defined(OS_POSIX)
|
| // TODO(rvargas): Use the worker pool.
|
| - MessageLoop::current()->PostTask(FROM_HERE, new CleanupTask(path, name));
|
| + MessageLoop::current()->PostTask(FROM_HERE, new CleanupTask(path, name_str));
|
| #endif
|
| return true;
|
| }
|
| @@ -215,7 +217,8 @@ int PreferedCacheSize(int64 available) {
|
| Backend* BackendImpl::CreateBackend(const std::wstring& full_path, bool force,
|
| int max_bytes, net::CacheType type,
|
| BackendFlags flags) {
|
| - BackendImpl* cache = new BackendImpl(full_path);
|
| + FilePath full_cache_path = FilePath::FromWStringHack(full_path);
|
| + BackendImpl* cache = new BackendImpl(full_cache_path);
|
| cache->SetMaxSize(max_bytes);
|
| cache->SetType(type);
|
| cache->SetFlags(flags);
|
| @@ -226,12 +229,12 @@ Backend* BackendImpl::CreateBackend(const std::wstring& full_path, bool force,
|
| if (!force)
|
| return NULL;
|
|
|
| - if (!DelayedCacheCleanup(full_path))
|
| + if (!DelayedCacheCleanup(full_cache_path))
|
| return NULL;
|
|
|
| // The worker thread will start deleting files soon, but the original folder
|
| // is not there anymore... let's create a new set of files.
|
| - cache = new BackendImpl(full_path);
|
| + cache = new BackendImpl(full_cache_path);
|
| cache->SetMaxSize(max_bytes);
|
| cache->SetType(type);
|
| cache->SetFlags(flags);
|
| @@ -478,7 +481,7 @@ bool BackendImpl::DoomEntry(const std::string& key) {
|
| bool BackendImpl::DoomAllEntries() {
|
| if (!num_refs_) {
|
| PrepareForRestart();
|
| - DeleteCache(path_.c_str(), false);
|
| + DeleteCache(path_, false);
|
| return Init();
|
| } else {
|
| if (disabled_)
|
| @@ -610,16 +613,14 @@ void BackendImpl::SetType(net::CacheType type) {
|
| cache_type_ = type;
|
| }
|
|
|
| -std::wstring BackendImpl::GetFileName(Addr address) const {
|
| +FilePath BackendImpl::GetFileName(Addr address) const {
|
| if (!address.is_separate_file() || !address.is_initialized()) {
|
| NOTREACHED();
|
| - return std::wstring();
|
| + return FilePath();
|
| }
|
|
|
| - std::wstring name(path_);
|
| - std::wstring tmp = StringPrintf(L"f_%06x", address.FileNumber());
|
| - file_util::AppendToPath(&name, tmp);
|
| - return name;
|
| + std::string tmp = StringPrintf("f_%06x", address.FileNumber());
|
| + return path_.AppendASCII(tmp);
|
| }
|
|
|
| MappedFile* BackendImpl::File(Addr address) {
|
| @@ -637,13 +638,13 @@ bool BackendImpl::CreateExternalFile(Addr* address) {
|
| file_number = 1;
|
| continue;
|
| }
|
| - std::wstring name = GetFileName(file_address);
|
| + FilePath name = GetFileName(file_address);
|
| int flags = base::PLATFORM_FILE_READ |
|
| base::PLATFORM_FILE_WRITE |
|
| base::PLATFORM_FILE_CREATE |
|
| base::PLATFORM_FILE_EXCLUSIVE_WRITE;
|
| scoped_refptr<disk_cache::File> file(new disk_cache::File(
|
| - base::CreatePlatformFile(name.c_str(), flags, NULL)));
|
| + base::CreatePlatformFile(name.ToWStringHack().c_str(), flags, NULL)));
|
| if (!file->IsValid())
|
| continue;
|
|
|
| @@ -988,15 +989,15 @@ bool BackendImpl::CreateBackingStore(disk_cache::File* file) {
|
| bool BackendImpl::InitBackingStore(bool* file_created) {
|
| file_util::CreateDirectory(path_);
|
|
|
| - std::wstring index_name(path_);
|
| - file_util::AppendToPath(&index_name, kIndexName);
|
| + FilePath index_name = path_.AppendASCII(kIndexName);
|
|
|
| int flags = base::PLATFORM_FILE_READ |
|
| base::PLATFORM_FILE_WRITE |
|
| base::PLATFORM_FILE_OPEN_ALWAYS |
|
| base::PLATFORM_FILE_EXCLUSIVE_WRITE;
|
| scoped_refptr<disk_cache::File> file(new disk_cache::File(
|
| - base::CreatePlatformFile(index_name.c_str(), flags, file_created)));
|
| + base::CreatePlatformFile(index_name.ToWStringHack().c_str(), flags,
|
| + file_created)));
|
|
|
| if (!file->IsValid())
|
| return false;
|
| @@ -1010,7 +1011,7 @@ bool BackendImpl::InitBackingStore(bool* file_created) {
|
| return false;
|
|
|
| index_ = new MappedFile();
|
| - data_ = reinterpret_cast<Index*>(index_->Init(index_name, 0));
|
| + data_ = reinterpret_cast<Index*>(index_->Init(index_name.ToWStringHack(), 0));
|
| if (!data_) {
|
| LOG(ERROR) << "Unable to map Index file";
|
| return false;
|
| @@ -1028,7 +1029,7 @@ void BackendImpl::AdjustMaxCacheSize(int table_len) {
|
| DCHECK(!table_len || data_->header.magic);
|
|
|
| // The user is not setting the size, let's figure it out.
|
| - int64 available = base::SysInfo::AmountOfFreeDiskSpace(path_);
|
| + int64 available = base::SysInfo::AmountOfFreeDiskSpace(path_.ToWStringHack());
|
| if (available < 0) {
|
| max_size_ = kDefaultCacheSize;
|
| return;
|
|
|