1// Copyright 2013 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#ifndef REMOTING_HOST_IPC_UTIL_H_ 6#define REMOTING_HOST_IPC_UTIL_H_ 7 8#include <string> 9 10#include "base/basictypes.h" 11#include "base/compiler_specific.h" 12#include "base/memory/ref_counted.h" 13#include "base/memory/scoped_ptr.h" 14#include "ipc/ipc_platform_file.h" 15 16#if defined(OS_WIN) 17#include "base/win/scoped_handle.h" 18#endif // defined(OS_WIN) 19 20namespace base { 21class File; 22class SingleThreadTaskRunner; 23} // namespace base 24 25namespace IPC { 26class ChannelProxy; 27class Listener; 28} // namespace IPC 29 30namespace remoting { 31 32// Creates an already connected IPC channel. The server end of the channel 33// is wrapped into a channel proxy that will invoke methods of |listener| 34// on the caller's thread while using |io_task_runner| to send and receive 35// messages in the background. The client end is returned as a pipe handle 36// (inheritable on Windows). 37bool CreateConnectedIpcChannel( 38 scoped_refptr<base::SingleThreadTaskRunner> io_task_runner, 39 IPC::Listener* listener, 40 base::File* client_out, 41 scoped_ptr<IPC::ChannelProxy>* server_out); 42 43#if defined(OS_WIN) 44 45// Creates the server end of the IPC channel and applies the security 46// descriptor |pipe_security_descriptor| to it. 47bool CreateIpcChannel( 48 const std::string& channel_name, 49 const std::string& pipe_security_descriptor, 50 base::win::ScopedHandle* pipe_out); 51 52#endif // defined(OS_WIN) 53 54} // namespace remoting 55 56#endif // REMOTING_HOST_IPC_UTIL_H_ 57