Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(744)

Side by Side Diff: net/disk_cache/simple/simple_index_file.cc

Issue 1535363003: Switch to standard integer types in net/. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: stddef Created 5 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2013 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 "net/disk_cache/simple/simple_index_file.h" 5 #include "net/disk_cache/simple/simple_index_file.h"
6 6
7 #include <vector> 7 #include <vector>
8 8
9 #include "base/files/file.h" 9 #include "base/files/file.h"
10 #include "base/files/file_util.h" 10 #include "base/files/file_util.h"
(...skipping 14 matching lines...) Expand all
25 #include "third_party/zlib/zlib.h" 25 #include "third_party/zlib/zlib.h"
26 26
27 using base::File; 27 using base::File;
28 28
29 namespace disk_cache { 29 namespace disk_cache {
30 namespace { 30 namespace {
31 31
32 const int kEntryFilesHashLength = 16; 32 const int kEntryFilesHashLength = 16;
33 const int kEntryFilesSuffixLength = 2; 33 const int kEntryFilesSuffixLength = 2;
34 34
35 const uint64 kMaxEntiresInIndex = 100000000; 35 const uint64_t kMaxEntiresInIndex = 100000000;
36 36
37 uint32 CalculatePickleCRC(const base::Pickle& pickle) { 37 uint32_t CalculatePickleCRC(const base::Pickle& pickle) {
38 return crc32(crc32(0, Z_NULL, 0), 38 return crc32(crc32(0, Z_NULL, 0),
39 reinterpret_cast<const Bytef*>(pickle.payload()), 39 reinterpret_cast<const Bytef*>(pickle.payload()),
40 pickle.payload_size()); 40 pickle.payload_size());
41 } 41 }
42 42
43 // Used in histograms. Please only add new values at the end. 43 // Used in histograms. Please only add new values at the end.
44 enum IndexFileState { 44 enum IndexFileState {
45 INDEX_STATE_CORRUPT = 0, 45 INDEX_STATE_CORRUPT = 0,
46 INDEX_STATE_STALE = 1, 46 INDEX_STATE_STALE = 1,
47 INDEX_STATE_FRESH = 2, 47 INDEX_STATE_FRESH = 2,
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
91 static const size_t kEntryFilesLength = 91 static const size_t kEntryFilesLength =
92 kEntryFilesHashLength + kEntryFilesSuffixLength; 92 kEntryFilesHashLength + kEntryFilesSuffixLength;
93 // Converting to std::string is OK since we never use UTF8 wide chars in our 93 // Converting to std::string is OK since we never use UTF8 wide chars in our
94 // file names. 94 // file names.
95 const base::FilePath::StringType base_name = file_path.BaseName().value(); 95 const base::FilePath::StringType base_name = file_path.BaseName().value();
96 const std::string file_name(base_name.begin(), base_name.end()); 96 const std::string file_name(base_name.begin(), base_name.end());
97 if (file_name.size() != kEntryFilesLength) 97 if (file_name.size() != kEntryFilesLength)
98 return; 98 return;
99 const base::StringPiece hash_string( 99 const base::StringPiece hash_string(
100 file_name.begin(), file_name.begin() + kEntryFilesHashLength); 100 file_name.begin(), file_name.begin() + kEntryFilesHashLength);
101 uint64 hash_key = 0; 101 uint64_t hash_key = 0;
102 if (!simple_util::GetEntryHashKeyFromHexString(hash_string, &hash_key)) { 102 if (!simple_util::GetEntryHashKeyFromHexString(hash_string, &hash_key)) {
103 LOG(WARNING) << "Invalid entry hash key filename while restoring index from" 103 LOG(WARNING) << "Invalid entry hash key filename while restoring index from"
104 << " disk: " << file_name; 104 << " disk: " << file_name;
105 return; 105 return;
106 } 106 }
107 107
108 File::Info file_info; 108 File::Info file_info;
109 if (!base::GetFileInfo(file_path, &file_info)) { 109 if (!base::GetFileInfo(file_path, &file_info)) {
110 LOG(ERROR) << "Could not get file info for " << file_path.value(); 110 LOG(ERROR) << "Could not get file info for " << file_path.value();
111 return; 111 return;
112 } 112 }
113 base::Time last_used_time; 113 base::Time last_used_time;
114 #if defined(OS_POSIX) 114 #if defined(OS_POSIX)
115 // For POSIX systems, a last access time is available. However, it's not 115 // For POSIX systems, a last access time is available. However, it's not
116 // guaranteed to be more accurate than mtime. It is no worse though. 116 // guaranteed to be more accurate than mtime. It is no worse though.
117 last_used_time = file_info.last_accessed; 117 last_used_time = file_info.last_accessed;
118 #endif 118 #endif
119 if (last_used_time.is_null()) 119 if (last_used_time.is_null())
120 last_used_time = file_info.last_modified; 120 last_used_time = file_info.last_modified;
121 121
122 int64 file_size = file_info.size; 122 int64_t file_size = file_info.size;
123 SimpleIndex::EntrySet::iterator it = entries->find(hash_key); 123 SimpleIndex::EntrySet::iterator it = entries->find(hash_key);
124 if (it == entries->end()) { 124 if (it == entries->end()) {
125 SimpleIndex::InsertInEntrySet( 125 SimpleIndex::InsertInEntrySet(
126 hash_key, 126 hash_key,
127 EntryMetadata(last_used_time, file_size), 127 EntryMetadata(last_used_time, file_size),
128 entries); 128 entries);
129 } else { 129 } else {
130 // Summing up the total size of the entry through all the *_[0-1] files 130 // Summing up the total size of the entry through all the *_[0-1] files
131 it->second.SetEntrySize(it->second.GetEntrySize() + file_size); 131 it->second.SetEntrySize(it->second.GetEntrySize() + file_size);
132 } 132 }
(...skipping 20 matching lines...) Expand all
153 const char SimpleIndexFile::kIndexDirectory[] = "index-dir"; 153 const char SimpleIndexFile::kIndexDirectory[] = "index-dir";
154 // static 154 // static
155 const char SimpleIndexFile::kTempIndexFileName[] = "temp-index"; 155 const char SimpleIndexFile::kTempIndexFileName[] = "temp-index";
156 156
157 SimpleIndexFile::IndexMetadata::IndexMetadata() 157 SimpleIndexFile::IndexMetadata::IndexMetadata()
158 : magic_number_(kSimpleIndexMagicNumber), 158 : magic_number_(kSimpleIndexMagicNumber),
159 version_(kSimpleVersion), 159 version_(kSimpleVersion),
160 number_of_entries_(0), 160 number_of_entries_(0),
161 cache_size_(0) {} 161 cache_size_(0) {}
162 162
163 SimpleIndexFile::IndexMetadata::IndexMetadata( 163 SimpleIndexFile::IndexMetadata::IndexMetadata(uint64_t number_of_entries,
164 uint64 number_of_entries, uint64 cache_size) 164 uint64_t cache_size)
165 : magic_number_(kSimpleIndexMagicNumber), 165 : magic_number_(kSimpleIndexMagicNumber),
166 version_(kSimpleVersion), 166 version_(kSimpleVersion),
167 number_of_entries_(number_of_entries), 167 number_of_entries_(number_of_entries),
168 cache_size_(cache_size) {} 168 cache_size_(cache_size) {}
169 169
170 void SimpleIndexFile::IndexMetadata::Serialize(base::Pickle* pickle) const { 170 void SimpleIndexFile::IndexMetadata::Serialize(base::Pickle* pickle) const {
171 DCHECK(pickle); 171 DCHECK(pickle);
172 pickle->WriteUInt64(magic_number_); 172 pickle->WriteUInt64(magic_number_);
173 pickle->WriteUInt32(version_); 173 pickle->WriteUInt32(version_);
174 pickle->WriteUInt64(number_of_entries_); 174 pickle->WriteUInt64(number_of_entries_);
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after
270 const base::Closure& callback, 270 const base::Closure& callback,
271 SimpleIndexLoadResult* out_result) { 271 SimpleIndexLoadResult* out_result) {
272 base::Closure task = base::Bind(&SimpleIndexFile::SyncLoadIndexEntries, 272 base::Closure task = base::Bind(&SimpleIndexFile::SyncLoadIndexEntries,
273 cache_type_, 273 cache_type_,
274 cache_last_modified, cache_directory_, 274 cache_last_modified, cache_directory_,
275 index_file_, out_result); 275 index_file_, out_result);
276 worker_pool_->PostTaskAndReply(FROM_HERE, task, callback); 276 worker_pool_->PostTaskAndReply(FROM_HERE, task, callback);
277 } 277 }
278 278
279 void SimpleIndexFile::WriteToDisk(const SimpleIndex::EntrySet& entry_set, 279 void SimpleIndexFile::WriteToDisk(const SimpleIndex::EntrySet& entry_set,
280 uint64 cache_size, 280 uint64_t cache_size,
281 const base::TimeTicks& start, 281 const base::TimeTicks& start,
282 bool app_on_background, 282 bool app_on_background,
283 const base::Closure& callback) { 283 const base::Closure& callback) {
284 IndexMetadata index_metadata(entry_set.size(), cache_size); 284 IndexMetadata index_metadata(entry_set.size(), cache_size);
285 scoped_ptr<base::Pickle> pickle = Serialize(index_metadata, entry_set); 285 scoped_ptr<base::Pickle> pickle = Serialize(index_metadata, entry_set);
286 base::Closure task = 286 base::Closure task =
287 base::Bind(&SimpleIndexFile::SyncWriteToDisk, 287 base::Bind(&SimpleIndexFile::SyncWriteToDisk,
288 cache_type_, cache_directory_, index_file_, temp_index_file_, 288 cache_type_, cache_directory_, index_file_, temp_index_file_,
289 base::Passed(&pickle), start, app_on_background); 289 base::Passed(&pickle), start, app_on_background);
290 if (callback.is_null()) 290 if (callback.is_null())
(...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after
396 396
397 base::Pickle pickle(data, data_len); 397 base::Pickle pickle(data, data_len);
398 if (!pickle.data()) { 398 if (!pickle.data()) {
399 LOG(WARNING) << "Corrupt Simple Index File."; 399 LOG(WARNING) << "Corrupt Simple Index File.";
400 return; 400 return;
401 } 401 }
402 402
403 base::PickleIterator pickle_it(pickle); 403 base::PickleIterator pickle_it(pickle);
404 SimpleIndexFile::PickleHeader* header_p = 404 SimpleIndexFile::PickleHeader* header_p =
405 pickle.headerT<SimpleIndexFile::PickleHeader>(); 405 pickle.headerT<SimpleIndexFile::PickleHeader>();
406 const uint32 crc_read = header_p->crc; 406 const uint32_t crc_read = header_p->crc;
407 const uint32 crc_calculated = CalculatePickleCRC(pickle); 407 const uint32_t crc_calculated = CalculatePickleCRC(pickle);
408 408
409 if (crc_read != crc_calculated) { 409 if (crc_read != crc_calculated) {
410 LOG(WARNING) << "Invalid CRC in Simple Index file."; 410 LOG(WARNING) << "Invalid CRC in Simple Index file.";
411 return; 411 return;
412 } 412 }
413 413
414 SimpleIndexFile::IndexMetadata index_metadata; 414 SimpleIndexFile::IndexMetadata index_metadata;
415 if (!index_metadata.Deserialize(&pickle_it)) { 415 if (!index_metadata.Deserialize(&pickle_it)) {
416 LOG(ERROR) << "Invalid index_metadata on Simple Cache Index."; 416 LOG(ERROR) << "Invalid index_metadata on Simple Cache Index.";
417 return; 417 return;
418 } 418 }
419 419
420 if (!index_metadata.CheckIndexMetadata()) { 420 if (!index_metadata.CheckIndexMetadata()) {
421 LOG(ERROR) << "Invalid index_metadata on Simple Cache Index."; 421 LOG(ERROR) << "Invalid index_metadata on Simple Cache Index.";
422 return; 422 return;
423 } 423 }
424 424
425 #if !defined(OS_WIN) 425 #if !defined(OS_WIN)
426 // TODO(gavinp): Consider using std::unordered_map. 426 // TODO(gavinp): Consider using std::unordered_map.
427 entries->resize(index_metadata.GetNumberOfEntries() + kExtraSizeForMerge); 427 entries->resize(index_metadata.GetNumberOfEntries() + kExtraSizeForMerge);
428 #endif 428 #endif
429 while (entries->size() < index_metadata.GetNumberOfEntries()) { 429 while (entries->size() < index_metadata.GetNumberOfEntries()) {
430 uint64 hash_key; 430 uint64_t hash_key;
431 EntryMetadata entry_metadata; 431 EntryMetadata entry_metadata;
432 if (!pickle_it.ReadUInt64(&hash_key) || 432 if (!pickle_it.ReadUInt64(&hash_key) ||
433 !entry_metadata.Deserialize(&pickle_it)) { 433 !entry_metadata.Deserialize(&pickle_it)) {
434 LOG(WARNING) << "Invalid EntryMetadata in Simple Index file."; 434 LOG(WARNING) << "Invalid EntryMetadata in Simple Index file.";
435 entries->clear(); 435 entries->clear();
436 return; 436 return;
437 } 437 }
438 SimpleIndex::InsertInEntrySet(hash_key, entry_metadata, entries); 438 SimpleIndex::InsertInEntrySet(hash_key, entry_metadata, entries);
439 } 439 }
440 440
441 int64 cache_last_modified; 441 int64_t cache_last_modified;
442 if (!pickle_it.ReadInt64(&cache_last_modified)) { 442 if (!pickle_it.ReadInt64(&cache_last_modified)) {
443 entries->clear(); 443 entries->clear();
444 return; 444 return;
445 } 445 }
446 DCHECK(out_cache_last_modified); 446 DCHECK(out_cache_last_modified);
447 *out_cache_last_modified = base::Time::FromInternalValue(cache_last_modified); 447 *out_cache_last_modified = base::Time::FromInternalValue(cache_last_modified);
448 448
449 out_result->did_load = true; 449 out_result->did_load = true;
450 } 450 }
451 451
(...skipping 23 matching lines...) Expand all
475 bool SimpleIndexFile::LegacyIsIndexFileStale( 475 bool SimpleIndexFile::LegacyIsIndexFileStale(
476 base::Time cache_last_modified, 476 base::Time cache_last_modified,
477 const base::FilePath& index_file_path) { 477 const base::FilePath& index_file_path) {
478 base::Time index_mtime; 478 base::Time index_mtime;
479 if (!simple_util::GetMTime(index_file_path, &index_mtime)) 479 if (!simple_util::GetMTime(index_file_path, &index_mtime))
480 return true; 480 return true;
481 return index_mtime < cache_last_modified; 481 return index_mtime < cache_last_modified;
482 } 482 }
483 483
484 } // namespace disk_cache 484 } // namespace disk_cache
OLDNEW
« no previous file with comments | « net/disk_cache/simple/simple_index_file.h ('k') | net/disk_cache/simple/simple_index_file_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698