Index: remoting/host/desktop_session_agent.cc |
diff --git a/remoting/host/desktop_session_agent.cc b/remoting/host/desktop_session_agent.cc |
index 49d15f25c959fb7402986b6a44eb42d97e8af4d3..d3ac87f40e347458f94058982d76dd14c359d040 100644 |
--- a/remoting/host/desktop_session_agent.cc |
+++ b/remoting/host/desktop_session_agent.cc |
@@ -14,6 +14,7 @@ |
#include "remoting/base/util.h" |
#include "remoting/host/audio_capturer.h" |
#include "remoting/host/chromoting_messages.h" |
+#include "remoting/host/desktop_environment.h" |
#include "remoting/host/disconnect_window.h" |
#include "remoting/host/event_executor.h" |
#include "remoting/host/local_input_monitor.h" |
@@ -176,11 +177,23 @@ void DesktopSessionAgent::OnStartSessionAgent( |
const std::string& authenticated_jid) { |
DCHECK(caller_task_runner()->BelongsToCurrentThread()); |
DCHECK(!started_); |
+ DCHECK(!audio_capturer_); |
+ DCHECK(!event_executor_); |
+ DCHECK(!video_capturer_); |
started_ = true; |
+ // Create a desktop environment for the new session. |
+ base::Closure disconnect_session = |
+ base::Bind(&DesktopSessionAgent::DisconnectSession, this); |
+ scoped_ptr<DesktopEnvironment> desktop_environment = |
+ delegate_->desktop_environment_factory().Create(authenticated_jid, |
+ disconnect_session); |
+ |
// Create the event executor. |
- event_executor_ = CreateEventExecutor(); |
+ event_executor_ = |
+ desktop_environment->CreateEventExecutor(input_task_runner(), |
+ caller_task_runner()); |
// Hook up the input filter |
input_tracker_.reset(new protocol::InputEventTracker(event_executor_.get())); |
@@ -191,9 +204,6 @@ void DesktopSessionAgent::OnStartSessionAgent( |
new DesktopSesssionClipboardStub(this)); |
event_executor_->Start(clipboard_stub.Pass()); |
- base::Closure disconnect_session = |
- base::Bind(&DesktopSessionAgent::DisconnectSession, this); |
- |
// Create the disconnect window. |
disconnect_window_ = DisconnectWindow::Create(&ui_strings_); |
disconnect_window_->Show( |
@@ -205,10 +215,16 @@ void DesktopSessionAgent::OnStartSessionAgent( |
local_input_monitor_->Start(this, disconnect_session); |
// Start the audio capturer. |
- audio_capture_task_runner()->PostTask( |
- FROM_HERE, base::Bind(&DesktopSessionAgent::StartAudioCapturer, this)); |
+ if (delegate_->desktop_environment_factory().SupportsAudioCapture()) { |
+ audio_capturer_ = desktop_environment->CreateAudioCapturer( |
+ audio_capture_task_runner()); |
+ audio_capture_task_runner()->PostTask( |
+ FROM_HERE, base::Bind(&DesktopSessionAgent::StartAudioCapturer, this)); |
+ } |
// Start the video capturer. |
+ video_capturer_ = desktop_environment->CreateVideoCapturer( |
+ video_capture_task_runner(), caller_task_runner()); |
video_capture_task_runner()->PostTask( |
FROM_HERE, base::Bind(&DesktopSessionAgent::StartVideoCapturer, this)); |
} |
@@ -470,7 +486,6 @@ void DesktopSessionAgent::SendToNetwork(IPC::Message* message) { |
void DesktopSessionAgent::StartAudioCapturer() { |
DCHECK(audio_capture_task_runner()->BelongsToCurrentThread()); |
- audio_capturer_ = AudioCapturer::Create(); |
if (audio_capturer_) { |
audio_capturer_->Start(base::Bind(&DesktopSessionAgent::ProcessAudioPacket, |
this)); |
@@ -486,7 +501,6 @@ void DesktopSessionAgent::StopAudioCapturer() { |
void DesktopSessionAgent::StartVideoCapturer() { |
DCHECK(video_capture_task_runner()->BelongsToCurrentThread()); |
- video_capturer_ = media::ScreenCapturer::Create(); |
if (video_capturer_) |
video_capturer_->Start(this); |
} |