| Index: remoting/host/setup/native_messaging_channel.cc
|
| diff --git a/remoting/host/setup/native_messaging_channel.cc b/remoting/host/setup/native_messaging_channel.cc
|
| deleted file mode 100644
|
| index b93fd94caf86fe245087b5a125d7a5878e8564b9..0000000000000000000000000000000000000000
|
| --- a/remoting/host/setup/native_messaging_channel.cc
|
| +++ /dev/null
|
| @@ -1,129 +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_channel.h"
|
| -
|
| -#include "base/basictypes.h"
|
| -#include "base/bind.h"
|
| -#include "base/callback.h"
|
| -#include "base/location.h"
|
| -#include "base/values.h"
|
| -
|
| -#if defined(OS_POSIX)
|
| -#include <unistd.h>
|
| -#endif
|
| -
|
| -namespace {
|
| -
|
| -base::PlatformFile DuplicatePlatformFile(base::PlatformFile handle) {
|
| - base::PlatformFile result;
|
| -#if defined(OS_WIN)
|
| - if (!DuplicateHandle(GetCurrentProcess(),
|
| - handle,
|
| - GetCurrentProcess(),
|
| - &result,
|
| - 0,
|
| - FALSE,
|
| - DUPLICATE_CLOSE_SOURCE | DUPLICATE_SAME_ACCESS)) {
|
| - PLOG(ERROR) << "Failed to duplicate handle " << handle;
|
| - return base::kInvalidPlatformFileValue;
|
| - }
|
| - return result;
|
| -#elif defined(OS_POSIX)
|
| - result = dup(handle);
|
| - base::ClosePlatformFile(handle);
|
| - return result;
|
| -#else
|
| -#error Not implemented.
|
| -#endif
|
| -}
|
| -
|
| -} // namespace
|
| -
|
| -namespace remoting {
|
| -
|
| -NativeMessagingChannel::NativeMessagingChannel(
|
| - scoped_ptr<Delegate> delegate,
|
| - base::PlatformFile input,
|
| - base::PlatformFile output)
|
| - : native_messaging_reader_(DuplicatePlatformFile(input)),
|
| - native_messaging_writer_(new NativeMessagingWriter(
|
| - DuplicatePlatformFile(output))),
|
| - delegate_(delegate.Pass()),
|
| - pending_requests_(0),
|
| - shutdown_(false),
|
| - weak_factory_(this) {
|
| - weak_ptr_ = weak_factory_.GetWeakPtr();
|
| -}
|
| -
|
| -NativeMessagingChannel::~NativeMessagingChannel() {
|
| -}
|
| -
|
| -void NativeMessagingChannel::Start(const base::Closure& quit_closure) {
|
| - DCHECK(CalledOnValidThread());
|
| - DCHECK(quit_closure_.is_null());
|
| - DCHECK(!quit_closure.is_null());
|
| -
|
| - quit_closure_ = quit_closure;
|
| - native_messaging_reader_.Start(
|
| - base::Bind(&NativeMessagingChannel::ProcessMessage, weak_ptr_),
|
| - base::Bind(&NativeMessagingChannel::Shutdown, weak_ptr_));
|
| -}
|
| -
|
| -void NativeMessagingChannel::ProcessMessage(scoped_ptr<base::Value> message) {
|
| - DCHECK(CalledOnValidThread());
|
| -
|
| - // Don't process any more messages if Shutdown() has been called.
|
| - if (shutdown_)
|
| - return;
|
| -
|
| - if (message->GetType() != base::Value::TYPE_DICTIONARY) {
|
| - LOG(ERROR) << "Expected DictionaryValue";
|
| - Shutdown();
|
| - return;
|
| - }
|
| -
|
| - DCHECK_GE(pending_requests_, 0);
|
| - pending_requests_++;
|
| -
|
| - scoped_ptr<base::DictionaryValue> message_dict(
|
| - static_cast<base::DictionaryValue*>(message.release()));
|
| - delegate_->ProcessMessage(
|
| - message_dict.Pass(),
|
| - base::Bind(&NativeMessagingChannel::SendResponse, weak_ptr_));
|
| -}
|
| -
|
| -void NativeMessagingChannel::SendResponse(
|
| - scoped_ptr<base::DictionaryValue> response) {
|
| - DCHECK(CalledOnValidThread());
|
| -
|
| - bool success = response && native_messaging_writer_;
|
| - if (success)
|
| - success = native_messaging_writer_->WriteMessage(*response);
|
| -
|
| - if (!success) {
|
| - // Close the write pipe so no more responses will be sent.
|
| - native_messaging_writer_.reset();
|
| - Shutdown();
|
| - }
|
| -
|
| - pending_requests_--;
|
| - DCHECK_GE(pending_requests_, 0);
|
| -
|
| - if (shutdown_ && !pending_requests_)
|
| - quit_closure_.Run();
|
| -}
|
| -
|
| -void NativeMessagingChannel::Shutdown() {
|
| - DCHECK(CalledOnValidThread());
|
| -
|
| - if (shutdown_)
|
| - return;
|
| -
|
| - shutdown_ = true;
|
| - if (!pending_requests_)
|
| - quit_closure_.Run();
|
| -}
|
| -
|
| -} // namespace remoting
|
|
|