Index: remoting/host/ipc_desktop_environment.cc |
diff --git a/remoting/host/ipc_desktop_environment.cc b/remoting/host/ipc_desktop_environment.cc |
index 699f06ad62f5aae31a4f88dcb7ec2143a4a84f47..f3136c7080cb3bc638fd6f3446960c9747caa935 100644 |
--- a/remoting/host/ipc_desktop_environment.cc |
+++ b/remoting/host/ipc_desktop_environment.cc |
@@ -7,70 +7,73 @@ |
#include "base/callback.h" |
#include "base/compiler_specific.h" |
#include "base/logging.h" |
-#include "base/platform_file.h" |
#include "base/single_thread_task_runner.h" |
-#include "ipc/ipc_channel_proxy.h" |
-#include "ipc/ipc_message_macros.h" |
-#include "remoting/capturer/capture_data.h" |
#include "remoting/capturer/video_frame_capturer.h" |
#include "remoting/host/audio_capturer.h" |
-#include "remoting/host/chromoting_messages.h" |
-#include "remoting/host/client_session.h" |
#include "remoting/host/desktop_session_connector.h" |
#include "remoting/host/desktop_session_proxy.h" |
#include "remoting/host/event_executor.h" |
-#include "remoting/host/ipc_audio_capturer.h" |
-#include "remoting/host/ipc_event_executor.h" |
-#include "remoting/host/ipc_video_frame_capturer.h" |
- |
-#if defined(OS_WIN) |
-#include "base/win/scoped_handle.h" |
-#endif // defined(OS_WIN) |
namespace remoting { |
IpcDesktopEnvironment::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, |
- scoped_refptr<DesktopSessionProxy> desktop_session_proxy) |
- : DesktopEnvironment( |
- scoped_ptr<AudioCapturer>( |
- new IpcAudioCapturer(desktop_session_proxy)), |
- scoped_ptr<EventExecutor>( |
- new IpcEventExecutor(desktop_session_proxy)), |
- scoped_ptr<VideoFrameCapturer>( |
- new IpcVideoFrameCapturer(desktop_session_proxy))), |
- network_task_runner_(network_task_runner), |
+ scoped_refptr<base::SingleThreadTaskRunner> caller_task_runner, |
+ const std::string& client_jid, |
+ const base::Closure& disconnect_callback, |
+ base::WeakPtr<DesktopSessionConnector> desktop_session_connector) |
+ : caller_task_runner_(caller_task_runner), |
+ connected_(false), |
desktop_session_connector_(desktop_session_connector), |
- desktop_session_proxy_(desktop_session_proxy), |
- connected_(false) { |
+ desktop_session_proxy_(new DesktopSessionProxy(caller_task_runner, |
+ client_jid, |
+ disconnect_callback)) { |
+ DCHECK(caller_task_runner_->BelongsToCurrentThread()); |
} |
IpcDesktopEnvironment::~IpcDesktopEnvironment() { |
- if (connected_) { |
- connected_ = false; |
+ DCHECK(caller_task_runner_->BelongsToCurrentThread()); |
+ |
+ if (connected_ && desktop_session_connector_) |
desktop_session_connector_->DisconnectTerminal(desktop_session_proxy_); |
- } |
+ |
+ connected_ = false; |
} |
-void IpcDesktopEnvironment::Start( |
- scoped_ptr<protocol::ClipboardStub> client_clipboard, |
- const std::string& client_jid, |
- const base::Closure& disconnect_callback) { |
- DCHECK(network_task_runner_->BelongsToCurrentThread()); |
- DCHECK(!connected_); |
+scoped_ptr<AudioCapturer> IpcDesktopEnvironment::CreateAudioCapturer( |
+ scoped_refptr<base::SingleThreadTaskRunner> audio_task_runner) { |
+ DCHECK(caller_task_runner_->BelongsToCurrentThread()); |
+ |
+ RegisterDesktopSessionProxy(); |
+ return desktop_session_proxy_->CreateAudioCapturer(audio_task_runner); |
+} |
+ |
+scoped_ptr<EventExecutor> IpcDesktopEnvironment::CreateEventExecutor( |
+ scoped_refptr<base::SingleThreadTaskRunner> input_task_runner, |
+ scoped_refptr<base::SingleThreadTaskRunner> ui_task_runner) { |
+ DCHECK(caller_task_runner_->BelongsToCurrentThread()); |
+ |
+ RegisterDesktopSessionProxy(); |
+ return desktop_session_proxy_->CreateEventExecutor(input_task_runner, |
+ ui_task_runner); |
+} |
+ |
+scoped_ptr<VideoFrameCapturer> IpcDesktopEnvironment::CreateVideoCapturer( |
+ scoped_refptr<base::SingleThreadTaskRunner> capture_task_runner, |
+ scoped_refptr<base::SingleThreadTaskRunner> encode_task_runner) { |
+ DCHECK(caller_task_runner_->BelongsToCurrentThread()); |
- desktop_session_proxy_->Initialize(client_jid, disconnect_callback); |
+ RegisterDesktopSessionProxy(); |
+ return desktop_session_proxy_->CreateVideoCapturer(capture_task_runner, |
+ encode_task_runner); |
+} |
- // Register the proxy to receive AttachToDesktop() and DetachFromDesktop() |
- // notifications. |
- connected_ = true; |
- desktop_session_connector_->ConnectTerminal(desktop_session_proxy_); |
+void IpcDesktopEnvironment::RegisterDesktopSessionProxy() { |
+ DCHECK(caller_task_runner_->BelongsToCurrentThread()); |
- DesktopEnvironment::Start(client_clipboard.Pass(), client_jid, |
- disconnect_callback); |
+ if (!connected_) { |
+ connected_ = true; |
+ desktop_session_connector_->ConnectTerminal(desktop_session_proxy_); |
+ } |
} |
} // namespace remoting |