| Index: blimp/net/compressed_packet_writer.cc
 | 
| diff --git a/blimp/net/compressed_packet_writer.cc b/blimp/net/compressed_packet_writer.cc
 | 
| deleted file mode 100644
 | 
| index 1bff4d9bc1266f6c052f0ee5d8e0540572f71c21..0000000000000000000000000000000000000000
 | 
| --- a/blimp/net/compressed_packet_writer.cc
 | 
| +++ /dev/null
 | 
| @@ -1,123 +0,0 @@
 | 
| -// Copyright 2016 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 "blimp/net/compressed_packet_writer.h"
 | 
| -
 | 
| -#include <vector>
 | 
| -
 | 
| -#include "base/logging.h"
 | 
| -#include "base/numerics/safe_conversions.h"
 | 
| -#include "base/sys_byteorder.h"
 | 
| -#include "blimp/net/common.h"
 | 
| -#include "net/base/io_buffer.h"
 | 
| -#include "third_party/zlib/zlib.h"
 | 
| -
 | 
| -namespace blimp {
 | 
| -namespace {
 | 
| -
 | 
| -// Allocate the maxmimum amount of memory to deflate (512KB) for higher
 | 
| -// compression. (See zconf.h for details on memLevel semantics.)
 | 
| -const int kZlibMemoryLevel = 9;
 | 
| -
 | 
| -// Byte count of the zlib end-of-block marker (0x00, 0x00, 0xFF, 0xFF).
 | 
| -// Used for buffer preallocation.
 | 
| -const size_t kZlibBlockMarkerSize = 4;
 | 
| -
 | 
| -}  // namespace
 | 
| -
 | 
| -CompressedPacketWriter::CompressedPacketWriter(
 | 
| -    std::unique_ptr<PacketWriter> sink)
 | 
| -    : sink_(std::move(sink)), compressed_buf_(new net::GrowableIOBuffer) {
 | 
| -  DCHECK(sink_);
 | 
| -
 | 
| -  memset(&zlib_stream_, 0, sizeof(z_stream));
 | 
| -
 | 
| -  // MAX_WBITS means we are using the maximal window size for decompression;
 | 
| -  // negating it means that we are ignoring headers and CRC checks.
 | 
| -  int init_error =
 | 
| -      deflateInit2(&zlib_stream_, Z_BEST_COMPRESSION, Z_DEFLATED,
 | 
| -                   -MAX_WBITS,  // Negative value = no headers or CRC.
 | 
| -                   kZlibMemoryLevel, Z_DEFAULT_STRATEGY);
 | 
| -  CHECK_EQ(Z_OK, init_error);
 | 
| -}
 | 
| -
 | 
| -CompressedPacketWriter::~CompressedPacketWriter() {
 | 
| -  deflateEnd(&zlib_stream_);
 | 
| -}
 | 
| -
 | 
| -void CompressedPacketWriter::WritePacket(
 | 
| -    const scoped_refptr<net::DrainableIOBuffer>& write_buffer,
 | 
| -    const net::CompletionCallback& callback) {
 | 
| -  DCHECK(write_buffer);
 | 
| -  DCHECK(!callback.is_null());
 | 
| -  size_t uncompressed_size =
 | 
| -      base::checked_cast<size_t>(write_buffer->BytesRemaining());
 | 
| -
 | 
| -  // Zero-length input => zero-length output.
 | 
| -  if (uncompressed_size == 0) {
 | 
| -    sink_->WritePacket(write_buffer, callback);
 | 
| -    return;
 | 
| -  }
 | 
| -
 | 
| -  // Don't compress anything that's bigger than the maximum allowable payload
 | 
| -  // size.
 | 
| -  if (uncompressed_size > kMaxPacketPayloadSizeBytes) {
 | 
| -    callback.Run(net::ERR_FILE_TOO_BIG);
 | 
| -    return;
 | 
| -  }
 | 
| -
 | 
| -  int compress_result = Compress(write_buffer, compressed_buf_);
 | 
| -  if (compress_result < 0) {
 | 
| -    callback.Run(compress_result);
 | 
| -    return;
 | 
| -  }
 | 
| -
 | 
| -#if !defined(NDEBUG)
 | 
| -  uncompressed_size_total_ += uncompressed_size;
 | 
| -  compressed_size_total_ += compress_result;
 | 
| -#endif  // !defined(NDEBUG)
 | 
| -
 | 
| -  scoped_refptr<net::DrainableIOBuffer> compressed_outbuf(
 | 
| -      new net::DrainableIOBuffer(compressed_buf_.get(), compress_result));
 | 
| -  sink_->WritePacket(compressed_outbuf, callback);
 | 
| -  DVLOG(4) << "deflate packet: " << uncompressed_size << " in, "
 | 
| -           << compress_result << " out.";
 | 
| -  DVLOG(3) << "deflate total: " << uncompressed_size_total_ << " in, "
 | 
| -           << compressed_size_total_ << " out.";
 | 
| -}
 | 
| -
 | 
| -int CompressedPacketWriter::Compress(
 | 
| -    const scoped_refptr<net::DrainableIOBuffer>& src_buf,
 | 
| -    const scoped_refptr<net::GrowableIOBuffer>& dest_buf) {
 | 
| -  DCHECK_EQ(0, dest_buf->offset());
 | 
| -
 | 
| -  // Preallocate a buffer that's large enough to fit the compressed contents of
 | 
| -  // src_buf, plus some overhead for zlib.
 | 
| -  const int zlib_output_ubound =
 | 
| -      deflateBound(&zlib_stream_, src_buf->BytesRemaining()) +
 | 
| -      kZlibBlockMarkerSize;
 | 
| -  if (dest_buf->capacity() < zlib_output_ubound) {
 | 
| -    dest_buf->SetCapacity(zlib_output_ubound);
 | 
| -  }
 | 
| -
 | 
| -  zlib_stream_.next_in = reinterpret_cast<uint8_t*>(src_buf->data());
 | 
| -  zlib_stream_.avail_in = static_cast<unsigned>(src_buf->BytesRemaining());
 | 
| -  zlib_stream_.next_out = reinterpret_cast<uint8_t*>(dest_buf->data());
 | 
| -  zlib_stream_.avail_out = static_cast<unsigned>(zlib_output_ubound);
 | 
| -  int deflate_error = deflate(&zlib_stream_, Z_SYNC_FLUSH);
 | 
| -
 | 
| -  if (deflate_error != Z_OK) {
 | 
| -    DLOG(FATAL) << "Unexpected deflate() return value: " << deflate_error;
 | 
| -    return net::ERR_UNEXPECTED;
 | 
| -  }
 | 
| -  if (zlib_stream_.avail_in > 0) {
 | 
| -    DLOG(ERROR) << "deflate() did not consume all data, remainder: "
 | 
| -                << zlib_stream_.avail_in << " bytes.";
 | 
| -    return net::ERR_UNEXPECTED;
 | 
| -  }
 | 
| -
 | 
| -  return zlib_output_ubound - zlib_stream_.avail_out;
 | 
| -}
 | 
| -
 | 
| -}  // namespace blimp
 | 
| 
 |