#ifndef EXTENSIONS_BROWSER_API_MESSAGING_NATIVE_MESSAGE_HOST_H_
#define EXTENSIONS_BROWSER_API_MESSAGING_NATIVE_MESSAGE_HOST_H_
#include <memory>
#include <string>
#include "base/task/single_thread_task_runner.h"
#include "ui/gfx/native_ui_types.h"
namespace content {
class BrowserContext;
}
namespace extensions {
class NativeMessageHost {
public:
static const char kFailedToStartError[];
static const char kInvalidNameError[];
static const char kNativeHostExited[];
static const char kNotFoundError[];
static const char kForbiddenError[];
static const char kHostInputOutputError[];
class Client {
public:
virtual ~Client() {}
virtual void PostMessageFromNativeHost(const std::string& message) = 0;
virtual void CloseChannel(const std::string& error_message) = 0;
};
static std::unique_ptr<NativeMessageHost> Create(
content::BrowserContext* browser_context,
gfx::NativeView native_view,
const std::string& source_extension_id,
const std::string& native_host_name,
bool allow_user_level,
std::string* error);
virtual ~NativeMessageHost() {}
virtual void OnMessage(const std::string& message) = 0;
virtual void Start(Client* client) = 0;
virtual scoped_refptr<base::SingleThreadTaskRunner> task_runner() const = 0;
};
}
#endif