summaryrefslogtreecommitdiffstats
path: root/base
diff options
context:
space:
mode:
Diffstat (limited to 'base')
-rw-r--r--base/base.gyp1
-rw-r--r--base/base.gypi1
-rw-r--r--base/data/data_pack_unittest/sample.pakbin80 -> 0 bytes
-rw-r--r--base/data_pack.cc216
-rw-r--r--base/data_pack.h62
-rw-r--r--base/data_pack_unittest.cc73
6 files changed, 0 insertions, 353 deletions
diff --git a/base/base.gyp b/base/base.gyp
index 562aedf..075561b 100644
--- a/base/base.gyp
+++ b/base/base.gyp
@@ -74,7 +74,6 @@
'crypto/signature_creator_unittest.cc',
'crypto/signature_verifier_unittest.cc',
'crypto/symmetric_key_unittest.cc',
- 'data_pack_unittest.cc',
'debug/leak_tracker_unittest.cc',
'debug/stack_trace_unittest.cc',
'debug/trace_event_win_unittest.cc',
diff --git a/base/base.gypi b/base/base.gypi
index f4f32b0..3eaedfa 100644
--- a/base/base.gypi
+++ b/base/base.gypi
@@ -605,7 +605,6 @@
'auto_reset.h',
'base64.cc',
'base64.h',
- 'data_pack.cc',
'event_recorder.cc',
'event_recorder.h',
'event_recorder_stubs.cc',
diff --git a/base/data/data_pack_unittest/sample.pak b/base/data/data_pack_unittest/sample.pak
deleted file mode 100644
index fdbe2b5..0000000
--- a/base/data/data_pack_unittest/sample.pak
+++ /dev/null
Binary files differ
diff --git a/base/data_pack.cc b/base/data_pack.cc
deleted file mode 100644
index e01318f..0000000
--- a/base/data_pack.cc
+++ /dev/null
@@ -1,216 +0,0 @@
-// Copyright (c) 2010 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "base/data_pack.h"
-
-#include <errno.h>
-
-#include "base/file_util.h"
-#include "base/logging.h"
-#include "base/metrics/histogram.h"
-#include "base/ref_counted_memory.h"
-#include "base/string_piece.h"
-
-// For details of the file layout, see
-// http://dev.chromium.org/developers/design-documents/linuxresourcesandlocalizedstrings
-
-namespace {
-
-// A word is four bytes.
-static const size_t kWord = 4;
-
-static const uint32 kFileFormatVersion = 1;
-// Length of file header: version and entry count.
-static const size_t kHeaderLength = 2 * sizeof(uint32);
-
-struct DataPackEntry {
- uint32 resource_id;
- uint32 file_offset;
- uint32 length;
-
- static int CompareById(const void* void_key, const void* void_entry) {
- uint32 key = *reinterpret_cast<const uint32*>(void_key);
- const DataPackEntry* entry =
- reinterpret_cast<const DataPackEntry*>(void_entry);
- if (key < entry->resource_id) {
- return -1;
- } else if (key > entry->resource_id) {
- return 1;
- } else {
- return 0;
- }
- }
-};
-
-COMPILE_ASSERT(sizeof(DataPackEntry) == 12, size_of_header_must_be_twelve);
-
-// We're crashing when trying to load a pak file on Windows. Add some error
-// codes for logging.
-// http://crbug.com/58056
-enum LoadErrors {
- INIT_FAILED = 1,
- BAD_VERSION,
- INDEX_TRUNCATED,
- ENTRY_NOT_FOUND,
-
- LOAD_ERRORS_COUNT,
-};
-
-} // anonymous namespace
-
-namespace base {
-
-// In .cc for MemoryMappedFile dtor.
-DataPack::DataPack() : resource_count_(0) {
-}
-DataPack::~DataPack() {
-}
-
-bool DataPack::Load(const FilePath& path) {
- mmap_.reset(new file_util::MemoryMappedFile);
- if (!mmap_->Initialize(path)) {
- DLOG(ERROR) << "Failed to mmap datapack";
- UMA_HISTOGRAM_ENUMERATION("DataPack.Load", INIT_FAILED,
- LOAD_ERRORS_COUNT);
- return false;
- }
-
- // Parse the header of the file.
- // First uint32: version; second: resource count.
- const uint32* ptr = reinterpret_cast<const uint32*>(mmap_->data());
- uint32 version = ptr[0];
- if (version != kFileFormatVersion) {
- LOG(ERROR) << "Bad data pack version: got " << version << ", expected "
- << kFileFormatVersion;
- UMA_HISTOGRAM_ENUMERATION("DataPack.Load", BAD_VERSION,
- LOAD_ERRORS_COUNT);
- mmap_.reset();
- return false;
- }
- resource_count_ = ptr[1];
-
- // Sanity check the file.
- // 1) Check we have enough entries.
- if (kHeaderLength + resource_count_ * sizeof(DataPackEntry) >
- mmap_->length()) {
- LOG(ERROR) << "Data pack file corruption: too short for number of "
- "entries specified.";
- UMA_HISTOGRAM_ENUMERATION("DataPack.Load", INDEX_TRUNCATED,
- LOAD_ERRORS_COUNT);
- mmap_.reset();
- return false;
- }
- // 2) Verify the entries are within the appropriate bounds.
- for (size_t i = 0; i < resource_count_; ++i) {
- const DataPackEntry* entry = reinterpret_cast<const DataPackEntry*>(
- mmap_->data() + kHeaderLength + (i * sizeof(DataPackEntry)));
- if (entry->file_offset + entry->length > mmap_->length()) {
- LOG(ERROR) << "Entry #" << i << " in data pack points off end of file. "
- << "Was the file corrupted?";
- UMA_HISTOGRAM_ENUMERATION("DataPack.Load", ENTRY_NOT_FOUND,
- LOAD_ERRORS_COUNT);
- mmap_.reset();
- return false;
- }
- }
-
- return true;
-}
-
-bool DataPack::GetStringPiece(uint32 resource_id, StringPiece* data) const {
- // It won't be hard to make this endian-agnostic, but it's not worth
- // bothering to do right now.
-#if defined(__BYTE_ORDER)
- // Linux check
- COMPILE_ASSERT(__BYTE_ORDER == __LITTLE_ENDIAN,
- datapack_assumes_little_endian);
-#elif defined(__BIG_ENDIAN__)
- // Mac check
- #error DataPack assumes little endian
-#endif
-
- DataPackEntry* target = reinterpret_cast<DataPackEntry*>(
- bsearch(&resource_id, mmap_->data() + kHeaderLength, resource_count_,
- sizeof(DataPackEntry), DataPackEntry::CompareById));
- if (!target) {
- return false;
- }
-
- data->set(mmap_->data() + target->file_offset, target->length);
- return true;
-}
-
-RefCountedStaticMemory* DataPack::GetStaticMemory(uint32 resource_id) const {
- base::StringPiece piece;
- if (!GetStringPiece(resource_id, &piece))
- return NULL;
-
- return new RefCountedStaticMemory(
- reinterpret_cast<const unsigned char*>(piece.data()), piece.length());
-}
-
-// static
-bool DataPack::WritePack(const FilePath& path,
- const std::map<uint32, StringPiece>& resources) {
- FILE* file = file_util::OpenFile(path, "wb");
- if (!file)
- return false;
-
- if (fwrite(&kFileFormatVersion, 1, kWord, file) != kWord) {
- LOG(ERROR) << "Failed to write file version";
- file_util::CloseFile(file);
- return false;
- }
-
- // Note: the python version of this function explicitly sorted keys, but
- // std::map is a sorted associative container, we shouldn't have to do that.
- uint32 entry_count = resources.size();
- if (fwrite(&entry_count, 1, kWord, file) != kWord) {
- LOG(ERROR) << "Failed to write entry count";
- file_util::CloseFile(file);
- return false;
- }
-
- // Each entry is 3 uint32s.
- uint32 index_length = entry_count * 3 * kWord;
- uint32 data_offset = kHeaderLength + index_length;
- for (std::map<uint32, StringPiece>::const_iterator it = resources.begin();
- it != resources.end(); ++it) {
- if (fwrite(&it->first, 1, kWord, file) != kWord) {
- LOG(ERROR) << "Failed to write id for " << it->first;
- file_util::CloseFile(file);
- return false;
- }
-
- if (fwrite(&data_offset, 1, kWord, file) != kWord) {
- LOG(ERROR) << "Failed to write offset for " << it->first;
- file_util::CloseFile(file);
- return false;
- }
-
- uint32 len = it->second.length();
- if (fwrite(&len, 1, kWord, file) != kWord) {
- LOG(ERROR) << "Failed to write length for " << it->first;
- file_util::CloseFile(file);
- return false;
- }
-
- data_offset += len;
- }
-
- for (std::map<uint32, StringPiece>::const_iterator it = resources.begin();
- it != resources.end(); ++it) {
- if (fwrite(it->second.data(), it->second.length(), 1, file) != 1) {
- LOG(ERROR) << "Failed to write data for " << it->first;
- file_util::CloseFile(file);
- return false;
- }
- }
-
- file_util::CloseFile(file);
-
- return true;
-}
-
-} // namespace base
diff --git a/base/data_pack.h b/base/data_pack.h
deleted file mode 100644
index 2836715..0000000
--- a/base/data_pack.h
+++ /dev/null
@@ -1,62 +0,0 @@
-// Copyright (c) 2008 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// DataPack represents a read-only view onto an on-disk file that contains
-// (key, value) pairs of data. It's used to store static resources like
-// translation strings and images.
-
-#ifndef BASE_DATA_PACK_H_
-#define BASE_DATA_PACK_H_
-#pragma once
-
-#include <map>
-
-#include "base/basictypes.h"
-#include "base/scoped_ptr.h"
-
-namespace file_util {
- class MemoryMappedFile;
-}
-class FilePath;
-class RefCountedStaticMemory;
-
-namespace base {
-
-class StringPiece;
-
-class DataPack {
- public:
- DataPack();
- ~DataPack();
-
- // Load a pack file from |path|, returning false on error.
- bool Load(const FilePath& path);
-
- // Get resource by id |resource_id|, filling in |data|.
- // The data is owned by the DataPack object and should not be modified.
- // Returns false if the resource id isn't found.
- bool GetStringPiece(uint32 resource_id, StringPiece* data) const;
-
- // Like GetStringPiece(), but returns a reference to memory. This interface
- // is used for image data, while the StringPiece interface is usually used
- // for localization strings.
- RefCountedStaticMemory* GetStaticMemory(uint32 resource_id) const;
-
- // Writes a pack file containing |resources| to |path|.
- static bool WritePack(const FilePath& path,
- const std::map<uint32, StringPiece>& resources);
-
- private:
- // The memory-mapped data.
- scoped_ptr<file_util::MemoryMappedFile> mmap_;
-
- // Number of resources in the data.
- size_t resource_count_;
-
- DISALLOW_COPY_AND_ASSIGN(DataPack);
-};
-
-} // namespace base
-
-#endif // BASE_DATA_PACK_H_
diff --git a/base/data_pack_unittest.cc b/base/data_pack_unittest.cc
deleted file mode 100644
index d089b28..0000000
--- a/base/data_pack_unittest.cc
+++ /dev/null
@@ -1,73 +0,0 @@
-// Copyright (c) 2008 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "base/data_pack.h"
-
-#include "base/file_path.h"
-#include "base/file_util.h"
-#include "base/path_service.h"
-#include "base/scoped_temp_dir.h"
-#include "base/string_piece.h"
-#include "testing/gtest/include/gtest/gtest.h"
-
-TEST(DataPackTest, Load) {
- FilePath data_path;
- PathService::Get(base::DIR_SOURCE_ROOT, &data_path);
- data_path = data_path.Append(
- FILE_PATH_LITERAL("base/data/data_pack_unittest/sample.pak"));
-
- base::DataPack pack;
- ASSERT_TRUE(pack.Load(data_path));
-
- base::StringPiece data;
- ASSERT_TRUE(pack.GetStringPiece(4, &data));
- EXPECT_EQ("this is id 4", data);
- ASSERT_TRUE(pack.GetStringPiece(6, &data));
- EXPECT_EQ("this is id 6", data);
-
- // Try reading zero-length data blobs, just in case.
- ASSERT_TRUE(pack.GetStringPiece(1, &data));
- EXPECT_EQ(0U, data.length());
- ASSERT_TRUE(pack.GetStringPiece(10, &data));
- EXPECT_EQ(0U, data.length());
-
- // Try looking up an invalid key.
- ASSERT_FALSE(pack.GetStringPiece(140, &data));
-}
-
-TEST(DataPackTest, Write) {
- ScopedTempDir dir;
- ASSERT_TRUE(dir.CreateUniqueTempDir());
- FilePath file = dir.path().Append(FILE_PATH_LITERAL("data.pak"));
-
- std::string one("one");
- std::string two("two");
- std::string three("three");
- std::string four("four");
- std::string fifteen("fifteen");
-
- std::map<uint32, base::StringPiece> resources;
- resources.insert(std::make_pair(1, base::StringPiece(one)));
- resources.insert(std::make_pair(2, base::StringPiece(two)));
- resources.insert(std::make_pair(15, base::StringPiece(fifteen)));
- resources.insert(std::make_pair(3, base::StringPiece(three)));
- resources.insert(std::make_pair(4, base::StringPiece(four)));
- ASSERT_TRUE(base::DataPack::WritePack(file, resources));
-
- // Now try to read the data back in.
- base::DataPack pack;
- ASSERT_TRUE(pack.Load(file));
-
- base::StringPiece data;
- ASSERT_TRUE(pack.GetStringPiece(1, &data));
- EXPECT_EQ(one, data);
- ASSERT_TRUE(pack.GetStringPiece(2, &data));
- EXPECT_EQ(two, data);
- ASSERT_TRUE(pack.GetStringPiece(3, &data));
- EXPECT_EQ(three, data);
- ASSERT_TRUE(pack.GetStringPiece(4, &data));
- EXPECT_EQ(four, data);
- ASSERT_TRUE(pack.GetStringPiece(15, &data));
- EXPECT_EQ(fifteen, data);
-}