Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "webkit/fileapi/file_system_usage_cache.h" | 5 #include "webkit/fileapi/file_system_usage_cache.h" |
| 6 | 6 |
| 7 #include "base/compiler_specific.h" | |
| 7 #include "base/file_path.h" | 8 #include "base/file_path.h" |
| 8 #include "base/file_util.h" | 9 #include "base/file_util.h" |
| 9 #include "base/pickle.h" | 10 #include "base/pickle.h" |
| 10 | 11 |
| 11 namespace fileapi { | 12 namespace fileapi { |
| 12 | 13 |
| 13 const FilePath::CharType FileSystemUsageCache::kUsageFileName[] = | 14 const FilePath::CharType FileSystemUsageCache::kUsageFileName[] = |
| 14 FILE_PATH_LITERAL(".usage"); | 15 FILE_PATH_LITERAL(".usage"); |
| 15 const char FileSystemUsageCache::kUsageFileHeader[] = "FSU4"; | 16 const char FileSystemUsageCache::kUsageFileHeader[] = "FSU4"; |
| 16 const int FileSystemUsageCache::kUsageFileHeaderSize = 4; | 17 const int FileSystemUsageCache::kUsageFileHeaderSize = 4; |
| (...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 79 uint32 dirty = 0; | 80 uint32 dirty = 0; |
| 80 int64 fs_usage; | 81 int64 fs_usage; |
| 81 fs_usage = Read(usage_file_path, &is_valid, &dirty); | 82 fs_usage = Read(usage_file_path, &is_valid, &dirty); |
| 82 | 83 |
| 83 return fs_usage >= 0 && Write(usage_file_path, false, dirty, fs_usage); | 84 return fs_usage >= 0 && Write(usage_file_path, false, dirty, fs_usage); |
| 84 } | 85 } |
| 85 | 86 |
| 86 bool FileSystemUsageCache::IsValid(const FilePath& usage_file_path) { | 87 bool FileSystemUsageCache::IsValid(const FilePath& usage_file_path) { |
| 87 bool is_valid = true; | 88 bool is_valid = true; |
| 88 uint32 dirty = 0; | 89 uint32 dirty = 0; |
| 89 Read(usage_file_path, &is_valid, &dirty); | 90 int64 result = Read(usage_file_path, &is_valid, &dirty); |
| 91 if (result < 0) | |
| 92 return true; | |
|
brettw
2012/07/26 17:38:04
I'm not 100% sure if this is correct. Let's ask Er
ericu
2012/07/26 17:58:52
I think we want to return false there, but Kinuko
kinuko
2012/07/26 18:45:31
Looks like this should return false. dmikurube@ c
Tyler Breisacher (Chromium)
2012/07/26 18:47:07
If I'm not mistaken it's currently returning true,
Dai Mikurube (NOT FULLTIME)
2012/07/27 03:53:43
I think false is fine here.
| |
| 93 | |
| 90 return is_valid; | 94 return is_valid; |
| 91 } | 95 } |
| 92 | 96 |
| 93 // static | 97 // static |
| 94 int FileSystemUsageCache::AtomicUpdateUsageByDelta( | 98 int FileSystemUsageCache::AtomicUpdateUsageByDelta( |
| 95 const FilePath& usage_file_path, int64 delta) { | 99 const FilePath& usage_file_path, int64 delta) { |
| 96 bool is_valid = true; | 100 bool is_valid = true; |
| 97 uint32 dirty = 0; | 101 uint32 dirty = 0; |
| 98 int64 fs_usage; | 102 int64 fs_usage; |
| 99 // TODO(dmikurube): Make sure that usage_file_path is available. | 103 // TODO(dmikurube): Make sure that usage_file_path is available. |
| (...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 156 uint32 dirty, | 160 uint32 dirty, |
| 157 int64 fs_usage) { | 161 int64 fs_usage) { |
| 158 Pickle write_pickle; | 162 Pickle write_pickle; |
| 159 write_pickle.WriteBytes(kUsageFileHeader, kUsageFileHeaderSize); | 163 write_pickle.WriteBytes(kUsageFileHeader, kUsageFileHeaderSize); |
| 160 write_pickle.WriteBool(is_valid); | 164 write_pickle.WriteBool(is_valid); |
| 161 write_pickle.WriteUInt32(dirty); | 165 write_pickle.WriteUInt32(dirty); |
| 162 write_pickle.WriteInt64(fs_usage); | 166 write_pickle.WriteInt64(fs_usage); |
| 163 | 167 |
| 164 DCHECK(!usage_file_path.empty()); | 168 DCHECK(!usage_file_path.empty()); |
| 165 FilePath temporary_usage_file_path; | 169 FilePath temporary_usage_file_path; |
| 166 file_util::CreateTemporaryFileInDir(usage_file_path.DirName(), | 170 if (!file_util::CreateTemporaryFileInDir(usage_file_path.DirName(), |
| 167 &temporary_usage_file_path); | 171 &temporary_usage_file_path)) |
| 172 return -1; | |
| 173 | |
| 168 int bytes_written = file_util::WriteFile(temporary_usage_file_path, | 174 int bytes_written = file_util::WriteFile(temporary_usage_file_path, |
| 169 (const char *)write_pickle.data(), | 175 (const char *)write_pickle.data(), |
| 170 write_pickle.size()); | 176 write_pickle.size()); |
| 171 if (bytes_written != kUsageFileSize) | 177 if (bytes_written != kUsageFileSize) |
| 172 return -1; | 178 return -1; |
| 173 | 179 |
| 174 if (file_util::ReplaceFile(temporary_usage_file_path, usage_file_path)) | 180 if (file_util::ReplaceFile(temporary_usage_file_path, usage_file_path)) |
| 175 return bytes_written; | 181 return bytes_written; |
| 176 else | 182 else |
| 177 return -1; | 183 return -1; |
| 178 } | 184 } |
| 179 | 185 |
| 180 } // namespace fileapi | 186 } // namespace fileapi |
| OLD | NEW |