| // 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. | 
 |  | 
 | #ifndef REMOTING_HOST_IPC_UTIL_H_ | 
 | #define REMOTING_HOST_IPC_UTIL_H_ | 
 |  | 
 | #include <string> | 
 |  | 
 | #include "base/basictypes.h" | 
 | #include "base/compiler_specific.h" | 
 | #include "base/memory/ref_counted.h" | 
 | #include "base/memory/scoped_ptr.h" | 
 | #include "ipc/ipc_platform_file.h" | 
 |  | 
 | #if defined(OS_WIN) | 
 | #include "base/win/scoped_handle.h" | 
 | #endif  // defined(OS_WIN) | 
 |  | 
 | namespace base { | 
 | class File; | 
 | class SingleThreadTaskRunner; | 
 | }  // namespace base | 
 |  | 
 | namespace IPC { | 
 | class ChannelProxy; | 
 | class Listener; | 
 | }  // namespace IPC | 
 |  | 
 | namespace remoting { | 
 |  | 
 | // Creates an already connected IPC channel. The server end of the channel | 
 | // is wrapped into a channel proxy that will invoke methods of |listener| | 
 | // on the caller's thread while using |io_task_runner| to send and receive | 
 | // messages in the background. The client end is returned as a pipe handle | 
 | // (inheritable on Windows). | 
 | bool CreateConnectedIpcChannel( | 
 |     scoped_refptr<base::SingleThreadTaskRunner> io_task_runner, | 
 |     IPC::Listener* listener, | 
 |     base::File* client_out, | 
 |     scoped_ptr<IPC::ChannelProxy>* server_out); | 
 |  | 
 | #if defined(OS_WIN) | 
 |  | 
 | // Creates the server end of the IPC channel and applies the security | 
 | // descriptor |pipe_security_descriptor| to it. | 
 | bool CreateIpcChannel( | 
 |     const std::string& channel_name, | 
 |     const std::string& pipe_security_descriptor, | 
 |     base::win::ScopedHandle* pipe_out); | 
 |  | 
 | #endif  // defined(OS_WIN) | 
 |  | 
 | } // namespace remoting | 
 |  | 
 | #endif  // REMOTING_HOST_IPC_UTIL_H_ |