blob: b42093124413ee1434b840657bc857e378a3c50e [file] [log] [blame]
// Copyright 2014 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.
#ifndef REMOTING_HOST_NATIVE_MESSAGING_NATIVE_MESSAGING_PIPE_H_
#define REMOTING_HOST_NATIVE_MESSAGING_NATIVE_MESSAGING_PIPE_H_
#include <memory>
#include "base/macros.h"
#include "base/memory/weak_ptr.h"
#include "extensions/browser/api/messaging/native_message_host.h"
#include "extensions/browser/api/messaging/native_messaging_channel.h"
namespace base {
class Value;
}
namespace remoting {
// Connects a extensions::NativeMessageHost to a PipeMessagingChannel.
class NativeMessagingPipe
: public extensions::NativeMessagingChannel::EventHandler,
public extensions::NativeMessageHost::Client {
public:
NativeMessagingPipe();
~NativeMessagingPipe() override;
// Starts processing messages from the pipe.
void Start(std::unique_ptr<extensions::NativeMessageHost> host,
std::unique_ptr<extensions::NativeMessagingChannel> channel);
// extensions::NativeMessageHost::Client implementation.
void PostMessageFromNativeHost(const std::string& message) override;
void CloseChannel(const std::string& error_message) override;
// extensions::NativeMessagingChannel::EventHandler implementation.
void OnMessage(std::unique_ptr<base::Value> message) override;
void OnDisconnect() override;
private:
std::unique_ptr<extensions::NativeMessagingChannel> channel_;
std::unique_ptr<extensions::NativeMessageHost> host_;
DISALLOW_COPY_AND_ASSIGN(NativeMessagingPipe);
};
} // namespace remoting
#endif // REMOTING_HOST_NATIVE_MESSAGING_NATIVE_MESSAGING_PIPE_H_