Chromium Code Reviews| Index: remoting/host/desktop_session_agent.h |
| diff --git a/remoting/host/desktop_session_agent.h b/remoting/host/desktop_session_agent.h |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..bd148c8ebb8e38b614e6babc1455c57382e05367 |
| --- /dev/null |
| +++ b/remoting/host/desktop_session_agent.h |
| @@ -0,0 +1,86 @@ |
| +// Copyright (c) 2012 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_DESKTOP_SESSION_AGENT_H_ |
| +#define REMOTING_HOST_DESKTOP_SESSION_AGENT_H_ |
| + |
| +#include "base/basictypes.h" |
| +#include "base/callback.h" |
| +#include "base/compiler_specific.h" |
| +#include "base/memory/ref_counted.h" |
| +#include "base/memory/scoped_ptr.h" |
| +#include "ipc/ipc_listener.h" |
| +#include "ipc/ipc_platform_file.h" |
| + |
| +namespace base { |
| +class SingleThreadTaskRunner; |
| +} // base |
|
Sergey Ulanov
2012/10/24 20:12:01
nit: namespace base
alexeypa (please no reviews)
2012/10/24 21:41:51
Done.
|
| + |
| +namespace IPC { |
| +class ChannelProxy; |
| +class Message; |
| +} // namespace IPC |
| + |
| +namespace remoting { |
| + |
| +// Provides screen/audio capturing and input injection services for |
| +// the network process. |
| +class DesktopSessionAgent : public IPC::Listener { |
| + public: |
| + static scoped_ptr<DesktopSessionAgent> Create( |
| + scoped_refptr<base::SingleThreadTaskRunner> caller_task_runner, |
| + scoped_refptr<base::SingleThreadTaskRunner> io_task_runner); |
| + |
| + virtual ~DesktopSessionAgent(); |
| + |
| + // IPC::Listener implementation. |
| + virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE; |
| + virtual void OnChannelConnected(int32 peer_pid) OVERRIDE; |
| + virtual void OnChannelError() OVERRIDE; |
| + |
| + // Creates the screen/audio recorders, input stubs and the IPC channel to be |
| + // used to access them. Returns a handle of the client end of the IPC channel |
| + // pipe to be forwarder to the corresponding desktop environment. |
| + bool Start(const base::Closure& done_task, |
| + IPC::PlatformFileForTransit* desktop_pipe_out); |
| + |
| + protected: |
| + DesktopSessionAgent( |
| + scoped_refptr<base::SingleThreadTaskRunner> caller_task_runner, |
| + scoped_refptr<base::SingleThreadTaskRunner> io_task_runner); |
| + |
| + // Creates a pre-connected IPC channel to be used to access the screen/audio |
| + // recorders and input stubs. |
| + virtual bool DoCreateNetworkChannel( |
| + IPC::PlatformFileForTransit* client_out, |
| + scoped_ptr<IPC::ChannelProxy>* server_out) = 0; |
| + |
| + scoped_refptr<base::SingleThreadTaskRunner> caller_task_runner() const { |
| + return caller_task_runner_; |
| + } |
| + |
| + scoped_refptr<base::SingleThreadTaskRunner> io_task_runner() const { |
| + return io_task_runner_; |
| + } |
| + |
| + private: |
| + // Task runner on which public methods of this class should be called. |
| + scoped_refptr<base::SingleThreadTaskRunner> caller_task_runner_; |
| + |
| + // Message loop used by the IPC channel. |
| + scoped_refptr<base::SingleThreadTaskRunner> io_task_runner_; |
| + |
| + // Run on |caller_task_runner_| to notify the caller that |this| has been |
| + // stopped. |
| + base::Closure done_task_; |
| + |
| + // IPC channel connecting the desktop process with the network process. |
| + scoped_ptr<IPC::ChannelProxy> network_channel_; |
| + |
| + DISALLOW_COPY_AND_ASSIGN(DesktopSessionAgent); |
| +}; |
| + |
| +} // namespace remoting |
| + |
| +#endif // REMOTING_HOST_DESKTOP_SESSION_AGENT_H_ |