| Index: components/visitedlink/browser/visitedlink_master.cc
|
| diff --git a/components/visitedlink/browser/visitedlink_master.cc b/components/visitedlink/browser/visitedlink_master.cc
|
| index 3d9b7f5c738dd0c2ac3c7bc346a1b06f0079963c..c5c6490a519711d8c518e9ca5975e1e8fbee4774 100644
|
| --- a/components/visitedlink/browser/visitedlink_master.cc
|
| +++ b/components/visitedlink/browser/visitedlink_master.cc
|
| @@ -4,12 +4,8 @@
|
|
|
| #include "components/visitedlink/browser/visitedlink_master.h"
|
|
|
| -#if defined(OS_WIN)
|
| -#include <windows.h>
|
| -#include <io.h>
|
| -#include <shlobj.h>
|
| -#endif // defined(OS_WIN)
|
| #include <stdio.h>
|
| +#include <string.h>
|
|
|
| #include <algorithm>
|
|
|
| @@ -19,30 +15,38 @@
|
| #include "base/files/file_util.h"
|
| #include "base/files/scoped_file.h"
|
| #include "base/logging.h"
|
| +#include "base/macros.h"
|
| #include "base/message_loop/message_loop.h"
|
| #include "base/rand_util.h"
|
| #include "base/strings/string_util.h"
|
| #include "base/threading/thread_restrictions.h"
|
| +#include "build/build_config.h"
|
| #include "components/visitedlink/browser/visitedlink_delegate.h"
|
| #include "components/visitedlink/browser/visitedlink_event_listener.h"
|
| #include "content/public/browser/browser_context.h"
|
| #include "content/public/browser/browser_thread.h"
|
| #include "url/gurl.h"
|
|
|
| +#if defined(OS_WIN)
|
| +#include <windows.h>
|
| +#include <io.h>
|
| +#include <shlobj.h>
|
| +#endif // defined(OS_WIN)
|
| +
|
| using content::BrowserThread;
|
|
|
| namespace visitedlink {
|
|
|
| -const int32 VisitedLinkMaster::kFileHeaderSignatureOffset = 0;
|
| -const int32 VisitedLinkMaster::kFileHeaderVersionOffset = 4;
|
| -const int32 VisitedLinkMaster::kFileHeaderLengthOffset = 8;
|
| -const int32 VisitedLinkMaster::kFileHeaderUsedOffset = 12;
|
| -const int32 VisitedLinkMaster::kFileHeaderSaltOffset = 16;
|
| +const int32_t VisitedLinkMaster::kFileHeaderSignatureOffset = 0;
|
| +const int32_t VisitedLinkMaster::kFileHeaderVersionOffset = 4;
|
| +const int32_t VisitedLinkMaster::kFileHeaderLengthOffset = 8;
|
| +const int32_t VisitedLinkMaster::kFileHeaderUsedOffset = 12;
|
| +const int32_t VisitedLinkMaster::kFileHeaderSaltOffset = 16;
|
|
|
| -const int32 VisitedLinkMaster::kFileCurrentVersion = 3;
|
| +const int32_t VisitedLinkMaster::kFileCurrentVersion = 3;
|
|
|
| // the signature at the beginning of the URL table = "VLnk" (visited links)
|
| -const int32 VisitedLinkMaster::kFileSignature = 0x6b6e4c56;
|
| +const int32_t VisitedLinkMaster::kFileSignature = 0x6b6e4c56;
|
| const size_t VisitedLinkMaster::kFileHeaderSize =
|
| kFileHeaderSaltOffset + LINK_SALT_LENGTH;
|
|
|
| @@ -57,9 +61,9 @@ namespace {
|
| // Fills the given salt structure with some quasi-random values
|
| // It is not necessary to generate a cryptographically strong random string,
|
| // only that it be reasonably different for different users.
|
| -void GenerateSalt(uint8 salt[LINK_SALT_LENGTH]) {
|
| +void GenerateSalt(uint8_t salt[LINK_SALT_LENGTH]) {
|
| DCHECK_EQ(LINK_SALT_LENGTH, 8) << "This code assumes the length of the salt";
|
| - uint64 randval = base::RandUint64();
|
| + uint64_t randval = base::RandUint64();
|
| memcpy(salt, &randval, 8);
|
| }
|
|
|
| @@ -92,7 +96,7 @@ static bool WriteToFile(FILE* file,
|
| // prevents us from blocking the UI thread doing I/O. Double pointer to FILE
|
| // is used because file may still not be opened by the time of scheduling
|
| // the task for execution.
|
| -void AsyncWrite(FILE** file, int32 offset, const std::string& data) {
|
| +void AsyncWrite(FILE** file, int32_t offset, const std::string& data) {
|
| if (*file)
|
| WriteToFile(*file, offset, data.data(), data.size());
|
| }
|
| @@ -121,16 +125,16 @@ struct VisitedLinkMaster::LoadFromFileResult
|
| LoadFromFileResult(base::ScopedFILE file,
|
| scoped_ptr<base::SharedMemory> shared_memory,
|
| Fingerprint* hash_table,
|
| - int32 num_entries,
|
| - int32 used_count,
|
| - uint8 salt[LINK_SALT_LENGTH]);
|
| + int32_t num_entries,
|
| + int32_t used_count,
|
| + uint8_t salt[LINK_SALT_LENGTH]);
|
|
|
| base::ScopedFILE file;
|
| scoped_ptr<base::SharedMemory> shared_memory;
|
| Fingerprint* hash_table;
|
| - int32 num_entries;
|
| - int32 used_count;
|
| - uint8 salt[LINK_SALT_LENGTH];
|
| + int32_t num_entries;
|
| + int32_t used_count;
|
| + uint8_t salt[LINK_SALT_LENGTH];
|
|
|
| private:
|
| friend class base::RefCountedThreadSafe<LoadFromFileResult>;
|
| @@ -143,9 +147,9 @@ VisitedLinkMaster::LoadFromFileResult::LoadFromFileResult(
|
| base::ScopedFILE file,
|
| scoped_ptr<base::SharedMemory> shared_memory,
|
| Fingerprint* hash_table,
|
| - int32 num_entries,
|
| - int32 used_count,
|
| - uint8 salt[LINK_SALT_LENGTH])
|
| + int32_t num_entries,
|
| + int32_t used_count,
|
| + uint8_t salt[LINK_SALT_LENGTH])
|
| : file(file.Pass()),
|
| shared_memory(shared_memory.Pass()),
|
| hash_table(hash_table),
|
| @@ -179,8 +183,7 @@ VisitedLinkMaster::LoadFromFileResult::~LoadFromFileResult() {
|
| class VisitedLinkMaster::TableBuilder
|
| : public VisitedLinkDelegate::URLEnumerator {
|
| public:
|
| - TableBuilder(VisitedLinkMaster* master,
|
| - const uint8 salt[LINK_SALT_LENGTH]);
|
| + TableBuilder(VisitedLinkMaster* master, const uint8_t salt[LINK_SALT_LENGTH]);
|
|
|
| // Called on the main thread when the master is being destroyed. This will
|
| // prevent a crash when the query completes and the master is no longer
|
| @@ -206,7 +209,7 @@ class VisitedLinkMaster::TableBuilder
|
| bool success_;
|
|
|
| // Salt for this new table.
|
| - uint8 salt_[LINK_SALT_LENGTH];
|
| + uint8_t salt_[LINK_SALT_LENGTH];
|
|
|
| // Stores the fingerprints we computed on the background thread.
|
| VisitedLinkCommon::Fingerprints fingerprints_;
|
| @@ -233,7 +236,7 @@ VisitedLinkMaster::VisitedLinkMaster(Listener* listener,
|
| bool persist_to_disk,
|
| bool suppress_rebuild,
|
| const base::FilePath& filename,
|
| - int32 default_table_size)
|
| + int32_t default_table_size)
|
| : browser_context_(NULL),
|
| delegate_(delegate),
|
| persist_to_disk_(persist_to_disk),
|
| @@ -595,7 +598,7 @@ void VisitedLinkMaster::WriteFullTable() {
|
| }
|
|
|
| // Write the new header.
|
| - int32 header[4];
|
| + int32_t header[4];
|
| header[0] = kFileSignature;
|
| header[1] = kFileCurrentVersion;
|
| header[2] = table_length_;
|
| @@ -653,8 +656,8 @@ bool VisitedLinkMaster::LoadApartFromFile(
|
| if (!file_closer.get())
|
| return false;
|
|
|
| - int32 num_entries, used_count;
|
| - uint8 salt[LINK_SALT_LENGTH];
|
| + int32_t num_entries, used_count;
|
| + uint8_t salt[LINK_SALT_LENGTH];
|
| if (!ReadFileHeader(file_closer.get(), &num_entries, &used_count, salt))
|
| return false; // Header isn't valid.
|
|
|
| @@ -792,9 +795,9 @@ bool VisitedLinkMaster::InitFromScratch(bool suppress_rebuild) {
|
|
|
| // static
|
| bool VisitedLinkMaster::ReadFileHeader(FILE* file,
|
| - int32* num_entries,
|
| - int32* used_count,
|
| - uint8 salt[LINK_SALT_LENGTH]) {
|
| + int32_t* num_entries,
|
| + int32_t* used_count,
|
| + uint8_t salt[LINK_SALT_LENGTH]) {
|
| // Get file size.
|
| // Note that there is no need to seek back to the original location in the
|
| // file since ReadFromFile() [which is the next call accessing the file]
|
| @@ -806,12 +809,12 @@ bool VisitedLinkMaster::ReadFileHeader(FILE* file,
|
| if (file_size <= kFileHeaderSize)
|
| return false;
|
|
|
| - uint8 header[kFileHeaderSize];
|
| + uint8_t header[kFileHeaderSize];
|
| if (!ReadFromFile(file, 0, &header, kFileHeaderSize))
|
| return false;
|
|
|
| // Verify the signature.
|
| - int32 signature;
|
| + int32_t signature;
|
| memcpy(&signature, &header[kFileHeaderSignatureOffset], sizeof(signature));
|
| if (signature != kFileSignature)
|
| return false;
|
| @@ -819,7 +822,7 @@ bool VisitedLinkMaster::ReadFileHeader(FILE* file,
|
| // Verify the version is up-to-date. As with other read errors, a version
|
| // mistmatch will trigger a rebuild of the database from history, which will
|
| // have the effect of migrating the database.
|
| - int32 version;
|
| + int32_t version;
|
| memcpy(&version, &header[kFileHeaderVersionOffset], sizeof(version));
|
| if (version != kFileCurrentVersion)
|
| return false; // Bad version.
|
| @@ -858,7 +861,7 @@ bool VisitedLinkMaster::GetDatabaseFileName(base::FilePath* filename) {
|
|
|
| // Initializes the shared memory structure. The salt should already be filled
|
| // in so that it can be written to the shared memory
|
| -bool VisitedLinkMaster::CreateURLTable(int32 num_entries) {
|
| +bool VisitedLinkMaster::CreateURLTable(int32_t num_entries) {
|
| scoped_ptr<base::SharedMemory> shared_memory;
|
| VisitedLinkCommon::Fingerprint* hash_table;
|
| if (CreateApartURLTable(num_entries, salt_, &shared_memory, &hash_table)) {
|
| @@ -874,8 +877,8 @@ bool VisitedLinkMaster::CreateURLTable(int32 num_entries) {
|
|
|
| // static
|
| bool VisitedLinkMaster::CreateApartURLTable(
|
| - int32 num_entries,
|
| - const uint8 salt[LINK_SALT_LENGTH],
|
| + int32_t num_entries,
|
| + const uint8_t salt[LINK_SALT_LENGTH],
|
| scoped_ptr<base::SharedMemory>* shared_memory,
|
| VisitedLinkCommon::Fingerprint** hash_table) {
|
| DCHECK(salt);
|
| @@ -883,7 +886,8 @@ bool VisitedLinkMaster::CreateApartURLTable(
|
| DCHECK(hash_table);
|
|
|
| // The table is the size of the table followed by the entries.
|
| - uint32 alloc_size = num_entries * sizeof(Fingerprint) + sizeof(SharedHeader);
|
| + uint32_t alloc_size =
|
| + num_entries * sizeof(Fingerprint) + sizeof(SharedHeader);
|
|
|
| // Create the shared memory object.
|
| scoped_ptr<base::SharedMemory> sh_mem(new base::SharedMemory());
|
| @@ -913,10 +917,10 @@ bool VisitedLinkMaster::CreateApartURLTable(
|
| return true;
|
| }
|
|
|
| -bool VisitedLinkMaster::BeginReplaceURLTable(int32 num_entries) {
|
| +bool VisitedLinkMaster::BeginReplaceURLTable(int32_t num_entries) {
|
| base::SharedMemory *old_shared_memory = shared_memory_;
|
| Fingerprint* old_hash_table = hash_table_;
|
| - int32 old_table_length = table_length_;
|
| + int32_t old_table_length = table_length_;
|
| if (!CreateURLTable(num_entries)) {
|
| // Try to put back the old state.
|
| shared_memory_ = old_shared_memory;
|
| @@ -968,7 +972,7 @@ bool VisitedLinkMaster::ResizeTableIfNecessary() {
|
| return true;
|
| }
|
|
|
| -void VisitedLinkMaster::ResizeTable(int32 new_size) {
|
| +void VisitedLinkMaster::ResizeTable(int32_t new_size) {
|
| DCHECK(shared_memory_ && shared_memory_->memory() && hash_table_);
|
| shared_memory_serial_++;
|
|
|
| @@ -978,13 +982,13 @@ void VisitedLinkMaster::ResizeTable(int32 new_size) {
|
|
|
| base::SharedMemory* old_shared_memory = shared_memory_;
|
| Fingerprint* old_hash_table = hash_table_;
|
| - int32 old_table_length = table_length_;
|
| + int32_t old_table_length = table_length_;
|
| if (!BeginReplaceURLTable(new_size))
|
| return;
|
|
|
| // Now we have two tables, our local copy which is the old one, and the new
|
| // one loaded into this object where we need to copy the data.
|
| - for (int32 i = 0; i < old_table_length; i++) {
|
| + for (int32_t i = 0; i < old_table_length; i++) {
|
| Fingerprint cur = old_hash_table[i];
|
| if (cur)
|
| AddFingerprint(cur, false);
|
| @@ -1007,14 +1011,14 @@ void VisitedLinkMaster::ResizeTable(int32 new_size) {
|
| WriteFullTable();
|
| }
|
|
|
| -uint32 VisitedLinkMaster::DefaultTableSize() const {
|
| +uint32_t VisitedLinkMaster::DefaultTableSize() const {
|
| if (table_size_override_)
|
| return table_size_override_;
|
|
|
| return kDefaultTableSize;
|
| }
|
|
|
| -uint32 VisitedLinkMaster::NewTableSizeForCount(int32 item_count) const {
|
| +uint32_t VisitedLinkMaster::NewTableSizeForCount(int32_t item_count) const {
|
| // These table sizes are selected to be the maximum prime number less than
|
| // a "convenient" multiple of 1K.
|
| static const int table_sizes[] = {
|
| @@ -1112,7 +1116,7 @@ void VisitedLinkMaster::OnTableRebuildComplete(
|
| void VisitedLinkMaster::WriteToFile(FILE** file,
|
| off_t offset,
|
| void* data,
|
| - int32 data_size) {
|
| + int32_t data_size) {
|
| DCHECK(persist_to_disk_);
|
| DCHECK(!table_is_loading_from_file_);
|
| PostIOTask(FROM_HERE,
|
| @@ -1165,11 +1169,10 @@ bool VisitedLinkMaster::ReadFromFile(FILE* file,
|
|
|
| VisitedLinkMaster::TableBuilder::TableBuilder(
|
| VisitedLinkMaster* master,
|
| - const uint8 salt[LINK_SALT_LENGTH])
|
| - : master_(master),
|
| - success_(true) {
|
| + const uint8_t salt[LINK_SALT_LENGTH])
|
| + : master_(master), success_(true) {
|
| fingerprints_.reserve(4096);
|
| - memcpy(salt_, salt, LINK_SALT_LENGTH * sizeof(uint8));
|
| + memcpy(salt_, salt, LINK_SALT_LENGTH * sizeof(uint8_t));
|
| }
|
|
|
| // TODO(brettw): Do we want to try to cancel the request if this happens? It
|
|
|