| Index: remoting/host/setup/native_messaging_writer.cc
|
| diff --git a/remoting/host/setup/native_messaging_writer.cc b/remoting/host/setup/native_messaging_writer.cc
|
| deleted file mode 100644
|
| index 15d6cd7bd1c7d7f842dd3fe7c4982c0e72cccb50..0000000000000000000000000000000000000000
|
| --- a/remoting/host/setup/native_messaging_writer.cc
|
| +++ /dev/null
|
| @@ -1,103 +0,0 @@
|
| -// Copyright 2013 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 "remoting/host/setup/native_messaging_writer.h"
|
| -
|
| -#include <string>
|
| -
|
| -#include "base/basictypes.h"
|
| -#include "base/json/json_writer.h"
|
| -
|
| -namespace {
|
| -
|
| -// 4-byte type used for the message header.
|
| -typedef uint32 MessageLengthType;
|
| -
|
| -// Defined as an int, for passing to APIs that take an int, to avoid
|
| -// signed/unsigned warnings about implicit cast.
|
| -const int kMessageHeaderSize = sizeof(MessageLengthType);
|
| -
|
| -// Limit the size of sent messages, since Chrome will not accept messages
|
| -// larger than 1MB, and this helps deal with the problem of integer overflow
|
| -// when passing sizes to net::FileStream APIs that take |int| parameters.
|
| -// This is defined as size_t (unsigned type) so it can be compared with the
|
| -// result of std::string::length() without compiler warnings.
|
| -const size_t kMaximumMessageSize = 1024 * 1024;
|
| -
|
| -// Performs the same task as FileStream::WriteSync(), but ensures that exactly
|
| -// |buffer_length| bytes are written. Unlike WriteSync(), a partial write may
|
| -// only occur as a result of end-of-file or fatal error. Returns the number of
|
| -// bytes written (buffer_length) or an error-code <= 0.
|
| -//
|
| -// TODO(lambroslambrou): Add this method to net::FileStream, with unit-tests.
|
| -// See http://crbug.com/232202.
|
| -int WriteUntilComplete(net::FileStream* out,
|
| - const char* buffer, int buffer_length) {
|
| - int written = 0;
|
| - while (written < buffer_length) {
|
| - int result = out->WriteSync(buffer + written, buffer_length - written);
|
| - if (result <= 0) {
|
| - return result;
|
| - }
|
| - DCHECK_LE(result, buffer_length - written);
|
| - written += result;
|
| - }
|
| - return written;
|
| -}
|
| -
|
| -} // namespace
|
| -
|
| -namespace remoting {
|
| -
|
| -NativeMessagingWriter::NativeMessagingWriter(base::PlatformFile handle)
|
| - : write_stream_(handle, base::PLATFORM_FILE_WRITE, NULL),
|
| - fail_(false) {
|
| -}
|
| -
|
| -NativeMessagingWriter::~NativeMessagingWriter() {
|
| -}
|
| -
|
| -bool NativeMessagingWriter::WriteMessage(const base::Value& message) {
|
| - if (fail_) {
|
| - LOG(ERROR) << "Stream marked as corrupt.";
|
| - return false;
|
| - }
|
| -
|
| - std::string message_json;
|
| - base::JSONWriter::Write(&message, &message_json);
|
| -
|
| - CHECK_LE(message_json.length(), kMaximumMessageSize);
|
| -
|
| - // Cast from size_t to the proper header type. The check above ensures this
|
| - // won't overflow.
|
| - MessageLengthType message_length =
|
| - static_cast<MessageLengthType>(message_json.length());
|
| -
|
| - int result = WriteUntilComplete(
|
| - &write_stream_, reinterpret_cast<char*>(&message_length),
|
| - kMessageHeaderSize);
|
| - if (result != kMessageHeaderSize) {
|
| - LOG(ERROR) << "Failed to send message header, write returned " << result;
|
| - fail_ = true;
|
| - return false;
|
| - }
|
| -
|
| - // The length check above ensures that the cast won't overflow a signed
|
| - // 32-bit int.
|
| - int message_length_as_int = message_length;
|
| -
|
| - // CHECK needed since data() is undefined on an empty std::string.
|
| - CHECK(!message_json.empty());
|
| - result = WriteUntilComplete(&write_stream_, message_json.data(),
|
| - message_length_as_int);
|
| - if (result != message_length_as_int) {
|
| - LOG(ERROR) << "Failed to send message body, write returned " << result;
|
| - fail_ = true;
|
| - return false;
|
| - }
|
| -
|
| - return true;
|
| -}
|
| -
|
| -} // namespace remoting
|
|
|