| Index: remoting/host/ipc_desktop_environment.h
|
| diff --git a/remoting/host/ipc_desktop_environment.h b/remoting/host/ipc_desktop_environment.h
|
| index d27235bcb38c9cbf99c620fab42ce828e18ea8ad..d65495fb0c644ca08d760c7c41b2071e28129fd9 100644
|
| --- a/remoting/host/ipc_desktop_environment.h
|
| +++ b/remoting/host/ipc_desktop_environment.h
|
| @@ -8,12 +8,18 @@
|
| #include "base/basictypes.h"
|
| #include "base/memory/ref_counted.h"
|
| #include "base/memory/scoped_ptr.h"
|
| +#include "ipc/ipc_listener.h"
|
| +#include "ipc/ipc_platform_file.h"
|
| #include "remoting/host/desktop_environment.h"
|
|
|
| namespace base {
|
| class SingleThreadTaskRunner;
|
| } // base
|
|
|
| +namespace IPC {
|
| +class ChannelProxy;
|
| +} // base
|
| +
|
| namespace remoting {
|
|
|
| class ClientSession;
|
| @@ -21,7 +27,7 @@ class DesktopSessionConnector;
|
|
|
| // A variant of desktop environment integrating with the desktop by means of
|
| // a helper process and talking to that process via IPC.
|
| -class IpcDesktopEnvironment : public DesktopEnvironment {
|
| +class IpcDesktopEnvironment : public DesktopEnvironment, public IPC::Listener {
|
| public:
|
| // |desktop_session_connector| is used to bind the IpcDesktopEnvironment to
|
| // a desktop session, to be notified with a new IPC channel every time
|
| @@ -29,18 +35,34 @@ class IpcDesktopEnvironment : public DesktopEnvironment {
|
| // |this|. |client| specifies the client session owning |this|.
|
| IpcDesktopEnvironment(
|
| scoped_refptr<base::SingleThreadTaskRunner> input_task_runner,
|
| + scoped_refptr<base::SingleThreadTaskRunner> network_task_runner,
|
| scoped_refptr<base::SingleThreadTaskRunner> ui_task_runner,
|
| DesktopSessionConnector* desktop_session_connector,
|
| ClientSession* client);
|
| virtual ~IpcDesktopEnvironment();
|
|
|
| + // IPC::Listener implementation.
|
| + virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE;
|
| + virtual void OnChannelConnected(int32 peer_pid) OVERRIDE;
|
| + virtual void OnChannelError() OVERRIDE;
|
| +
|
| virtual void Start(
|
| scoped_ptr<protocol::ClipboardStub> client_clipboard) OVERRIDE;
|
|
|
| // Disconnects the client session that owns |this|.
|
| void DisconnectClient();
|
|
|
| + // Notifies |this| that it is now attached to a desktop integration process.
|
| + // |desktop_process| specifies the process handle. |desktop_pipe| is
|
| + // the client end of the pipe opened by the desktop process.
|
| + void OnDesktopSessionAgentAttached(
|
| + IPC::PlatformFileForTransit desktop_process,
|
| + IPC::PlatformFileForTransit desktop_pipe);
|
| +
|
| private:
|
| + // Used for IPC I/O.
|
| + scoped_refptr<base::SingleThreadTaskRunner> network_task_runner_;
|
| +
|
| DesktopSessionConnector* desktop_session_connector_;
|
|
|
| // Specifies the client session that owns |this|.
|
| @@ -49,6 +71,9 @@ class IpcDesktopEnvironment : public DesktopEnvironment {
|
| // True if |this| has been connected to a desktop session.
|
| bool connected_;
|
|
|
| + // Connects |this| with the desktop process.
|
| + scoped_ptr<IPC::ChannelProxy> desktop_channel_;
|
| +
|
| DISALLOW_COPY_AND_ASSIGN(IpcDesktopEnvironment);
|
| };
|
|
|
|
|