summaryrefslogtreecommitdiffstats
path: root/chrome/browser/sessions/compress_data_helper.cc
diff options
context:
space:
mode:
Diffstat (limited to 'chrome/browser/sessions/compress_data_helper.cc')
-rw-r--r--chrome/browser/sessions/compress_data_helper.cc137
1 files changed, 0 insertions, 137 deletions
diff --git a/chrome/browser/sessions/compress_data_helper.cc b/chrome/browser/sessions/compress_data_helper.cc
deleted file mode 100644
index abad8a9..0000000
--- a/chrome/browser/sessions/compress_data_helper.cc
+++ /dev/null
@@ -1,137 +0,0 @@
-// Copyright (c) 2012 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 "chrome/browser/sessions/compress_data_helper.h"
-
-#include "base/memory/scoped_ptr.h"
-#include "base/pickle.h"
-
-#if defined(USE_SYSTEM_LIBBZ2)
-#include <bzlib.h>
-#else
-#include "third_party/bzip2/bzlib.h"
-#endif
-
-#include <string>
-
-// static
-void CompressDataHelper::CompressAndWriteStringToPickle(const std::string& str,
- int max_bytes,
- Pickle* pickle,
- int* bytes_written) {
- // If there is no data to write, only write the size (0).
- if (str.empty()) {
- pickle->WriteInt(0);
- return;
- }
-
- bool written = false;
- int max_output_size = max_bytes - *bytes_written;
- if (max_output_size > 0) {
- // We need a non-const char* to pass to the compression algorithm.
- int input_size = str.size();
- scoped_array<char> input(new char[input_size]);
- memcpy(input.get(), str.data(), input_size);
-
- scoped_array<char> output(new char[max_output_size]);
- memset(output.get(), 0, max_output_size);
-
- bz_stream stream;
- stream.bzalloc = NULL;
- stream.bzfree = NULL;
- stream.opaque = NULL;
- int result = BZ2_bzCompressInit(&stream,
- 1, // 100K block size ( > size of our data)
- 0, // quiet
- 0); // default work factor
- if (result == BZ_OK) {
- stream.next_in = input.get();
- stream.avail_in = input_size;
- stream.next_out = output.get();
- stream.avail_out = max_output_size;
- do {
- result = BZ2_bzCompress(&stream, BZ_FINISH);
- } while (result == BZ_FINISH_OK);
-
- // If there wasn't enough space for the output, the result won't be
- // BZ_STREAM_END.
- if (result == BZ_STREAM_END) {
- result = BZ2_bzCompressEnd(&stream);
- DCHECK(stream.total_out_lo32 <=
- static_cast<unsigned>(max_output_size));
- if (result == BZ_OK) {
- // Write the size of the original input, so that the decompression
- // part knows how much memory to allocate.
- pickle->WriteInt(input_size);
- pickle->WriteData(output.get(), stream.total_out_lo32);
-
- *bytes_written += stream.total_out_lo32;
- written = true;
- }
- }
- }
- }
- if (!written) {
- // We cannot write any data. Write only the data size (0). The reading part
- // will not try to read any data after seeing the size 0.
- pickle->WriteInt(0);
- }
-}
-
-// static
-bool CompressDataHelper::ReadAndDecompressStringFromPickle(const Pickle& pickle,
- void** iter,
- std::string* str) {
- // Read the size of the original data.
- int original_size = 0;
- if (!pickle.ReadLength(iter, &original_size))
- return false;
-
- if (original_size == 0) {
- // No data to decompress.
- return true;
- }
-
- // Read the compressed data.
- const char* compressed_data = NULL;
- int compressed_size = 0;
- if (!pickle.ReadData(iter, &compressed_data, &compressed_size))
- return false;
-
- scoped_array<char> original_data(new char[original_size]);
- memset(original_data.get(), 0, original_size);
-
- // We need a non-const char* to pass to the decompression algorithm.
- scoped_array<char> compressed_data_copy(new char[compressed_size]);
- memcpy(compressed_data_copy.get(), compressed_data, compressed_size);
-
- bz_stream stream;
- stream.bzalloc = NULL;
- stream.bzfree = NULL;
- stream.opaque = NULL;
-
- int result = BZ2_bzDecompressInit(&stream, 0, 0);
- if (result == BZ_OK) {
- stream.next_in = compressed_data_copy.get();
- stream.avail_in = compressed_size;
- stream.next_out = original_data.get();
- stream.avail_out = original_size;
-
- do {
- // We should know exactly how much space to allocate for the result, thus
- // no out-of-space errors should happen.
- DCHECK(stream.avail_out > 0);
- result = BZ2_bzDecompress(&stream);
- } while (result == BZ_OK);
-
- DCHECK(result == BZ_STREAM_END);
- if (result == BZ_STREAM_END) {
- result = BZ2_bzDecompressEnd(&stream);
- if (result == BZ_OK) {
- str->assign(original_data.get(), original_size);
- }
- }
- }
- return !str->empty();
-}