| Index: remoting/host/ipc_desktop_environment.cc | 
| diff --git a/remoting/host/ipc_desktop_environment.cc b/remoting/host/ipc_desktop_environment.cc | 
| index d94a3816041e0856ba648dda5dc02f99a1f9bdb9..cb853195b48fa1c3d57dcbaf840099e781e90360 100644 | 
| --- a/remoting/host/ipc_desktop_environment.cc | 
| +++ b/remoting/host/ipc_desktop_environment.cc | 
| @@ -9,6 +9,7 @@ | 
| #include "base/callback.h" | 
| #include "base/compiler_specific.h" | 
| #include "base/logging.h" | 
| +#include "base/process_util.h" | 
| #include "base/single_thread_task_runner.h" | 
| #include "ipc/ipc_channel_proxy.h" | 
| #include "media/video/capture/screen/screen_capturer.h" | 
| @@ -21,6 +22,7 @@ namespace remoting { | 
|  | 
| IpcDesktopEnvironment::IpcDesktopEnvironment( | 
| scoped_refptr<base::SingleThreadTaskRunner> caller_task_runner, | 
| +    scoped_refptr<base::SingleThreadTaskRunner> io_task_runner, | 
| const std::string& client_jid, | 
| const base::Closure& disconnect_callback, | 
| base::WeakPtr<DesktopSessionConnector> desktop_session_connector) | 
| @@ -28,6 +30,7 @@ IpcDesktopEnvironment::IpcDesktopEnvironment( | 
| connected_(false), | 
| desktop_session_connector_(desktop_session_connector), | 
| desktop_session_proxy_(new DesktopSessionProxy(caller_task_runner, | 
| +                                                     io_task_runner, | 
| client_jid, | 
| disconnect_callback)) { | 
| DCHECK(caller_task_runner_->BelongsToCurrentThread()); | 
| @@ -79,8 +82,10 @@ void IpcDesktopEnvironment::ConnectToDesktopSession() { | 
|  | 
| IpcDesktopEnvironmentFactory::IpcDesktopEnvironmentFactory( | 
| scoped_refptr<base::SingleThreadTaskRunner> caller_task_runner, | 
| +    scoped_refptr<base::SingleThreadTaskRunner> io_task_runner, | 
| IPC::ChannelProxy* daemon_channel) | 
| : caller_task_runner_(caller_task_runner), | 
| +      io_task_runner_(io_task_runner), | 
| daemon_channel_(daemon_channel), | 
| connector_factory_(ALLOW_THIS_IN_INITIALIZER_LIST(this)), | 
| next_id_(0) { | 
| @@ -96,7 +101,7 @@ scoped_ptr<DesktopEnvironment> IpcDesktopEnvironmentFactory::Create( | 
| DCHECK(caller_task_runner_->BelongsToCurrentThread()); | 
|  | 
| return scoped_ptr<DesktopEnvironment>(new IpcDesktopEnvironment( | 
| -      caller_task_runner_, client_jid, disconnect_callback, | 
| +      caller_task_runner_, io_task_runner_, client_jid, disconnect_callback, | 
| connector_factory_.GetWeakPtr())); | 
| } | 
|  | 
| @@ -140,7 +145,7 @@ void IpcDesktopEnvironmentFactory::DisconnectTerminal( | 
|  | 
| void IpcDesktopEnvironmentFactory::OnDesktopSessionAgentAttached( | 
| int terminal_id, | 
| -    IPC::PlatformFileForTransit desktop_process, | 
| +    base::ProcessHandle desktop_process, | 
| IPC::PlatformFileForTransit desktop_pipe) { | 
| if (!caller_task_runner_->BelongsToCurrentThread()) { | 
| caller_task_runner_->PostTask(FROM_HERE, base::Bind( | 
| @@ -154,15 +159,13 @@ void IpcDesktopEnvironmentFactory::OnDesktopSessionAgentAttached( | 
| i->second->DetachFromDesktop(); | 
| i->second->AttachToDesktop(desktop_process, desktop_pipe); | 
| } else { | 
| +    base::CloseProcessHandle(desktop_process); | 
| + | 
| #if defined(OS_POSIX) | 
| -    DCHECK(desktop_process.auto_close); | 
| DCHECK(desktop_pipe.auto_close); | 
|  | 
| -    base::ClosePlatformFile(desktop_process.fd); | 
| base::ClosePlatformFile(desktop_pipe.fd); | 
| -#elif defined(OS_WIN) | 
| -    base::ClosePlatformFile(desktop_process); | 
| -#endif  // defined(OS_WIN) | 
| +#endif  // defined(OS_POSIX) | 
| } | 
| } | 
|  | 
|  |