// 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. #include "remoting/host/basic_desktop_environment.h" #include "base/bind.h" #include "base/logging.h" #include "base/single_thread_task_runner.h" #include "remoting/host/audio_capturer.h" #if defined(OS_CHROMEOS) #include "remoting/host/chromeos/aura_desktop_capturer.h" #include "remoting/host/chromeos/mouse_cursor_monitor_aura.h" #endif #include "remoting/host/client_session_control.h" #include "remoting/host/gnubby_auth_handler.h" #include "remoting/host/input_injector.h" #include "remoting/host/screen_controls.h" #include "third_party/webrtc/modules/desktop_capture/desktop_capture_options.h" #include "third_party/webrtc/modules/desktop_capture/mouse_cursor_monitor.h" #include "third_party/webrtc/modules/desktop_capture/screen_capturer.h" namespace remoting { BasicDesktopEnvironment::~BasicDesktopEnvironment() { DCHECK(caller_task_runner_->BelongsToCurrentThread()); } scoped_ptr BasicDesktopEnvironment::CreateAudioCapturer() { DCHECK(caller_task_runner_->BelongsToCurrentThread()); return AudioCapturer::Create(); } scoped_ptr BasicDesktopEnvironment::CreateInputInjector() { DCHECK(caller_task_runner_->BelongsToCurrentThread()); return InputInjector::Create(input_task_runner(), ui_task_runner()); } scoped_ptr BasicDesktopEnvironment::CreateScreenControls() { DCHECK(caller_task_runner_->BelongsToCurrentThread()); return nullptr; } scoped_ptr BasicDesktopEnvironment::CreateMouseCursorMonitor() { #if defined(OS_CHROMEOS) return make_scoped_ptr(new MouseCursorMonitorAura()); #else return make_scoped_ptr(webrtc::MouseCursorMonitor::CreateForScreen( *desktop_capture_options_, webrtc::kFullDesktopScreenId)); #endif } std::string BasicDesktopEnvironment::GetCapabilities() const { return std::string(); } void BasicDesktopEnvironment::SetCapabilities(const std::string& capabilities) { } scoped_ptr BasicDesktopEnvironment::CreateGnubbyAuthHandler( protocol::ClientStub* client_stub) { return nullptr; } scoped_ptr BasicDesktopEnvironment::CreateVideoCapturer() { DCHECK(caller_task_runner_->BelongsToCurrentThread()); #if defined(OS_CHROMEOS) return scoped_ptr(new AuraDesktopCapturer()); #else // !defined(OS_CHROMEOS) // The basic desktop environment does not use X DAMAGE, since it is // broken on many systems - see http://crbug.com/73423. return make_scoped_ptr( webrtc::ScreenCapturer::Create(*desktop_capture_options_)); #endif // !defined(OS_CHROMEOS) } BasicDesktopEnvironment::BasicDesktopEnvironment( scoped_refptr caller_task_runner, scoped_refptr input_task_runner, scoped_refptr ui_task_runner) : caller_task_runner_(caller_task_runner), input_task_runner_(input_task_runner), ui_task_runner_(ui_task_runner), desktop_capture_options_( new webrtc::DesktopCaptureOptions( webrtc::DesktopCaptureOptions::CreateDefault())) { DCHECK(caller_task_runner_->BelongsToCurrentThread()); } BasicDesktopEnvironmentFactory::BasicDesktopEnvironmentFactory( scoped_refptr caller_task_runner, scoped_refptr input_task_runner, scoped_refptr ui_task_runner) : caller_task_runner_(caller_task_runner), input_task_runner_(input_task_runner), ui_task_runner_(ui_task_runner) { } BasicDesktopEnvironmentFactory::~BasicDesktopEnvironmentFactory() { } bool BasicDesktopEnvironmentFactory::SupportsAudioCapture() const { DCHECK(caller_task_runner_->BelongsToCurrentThread()); return AudioCapturer::IsSupported(); } } // namespace remoting