12a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 22a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 32a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// found in the LICENSE file. 42a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 52a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "remoting/host/basic_desktop_environment.h" 62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 7c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "base/bind.h" 82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/logging.h" 92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/single_thread_task_runner.h" 102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "remoting/host/audio_capturer.h" 112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "remoting/host/client_session_control.h" 12a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "remoting/host/gnubby_auth_handler.h" 132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "remoting/host/input_injector.h" 142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "remoting/host/screen_controls.h" 156e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "third_party/webrtc/modules/desktop_capture/desktop_capture_options.h" 166e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "third_party/webrtc/modules/desktop_capture/mouse_cursor_monitor.h" 17868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "third_party/webrtc/modules/desktop_capture/screen_capturer.h" 182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace remoting { 202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)BasicDesktopEnvironment::~BasicDesktopEnvironment() { 222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DCHECK(caller_task_runner_->BelongsToCurrentThread()); 232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)scoped_ptr<AudioCapturer> BasicDesktopEnvironment::CreateAudioCapturer() { 262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DCHECK(caller_task_runner_->BelongsToCurrentThread()); 272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return AudioCapturer::Create(); 292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)scoped_ptr<InputInjector> BasicDesktopEnvironment::CreateInputInjector() { 322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DCHECK(caller_task_runner_->BelongsToCurrentThread()); 332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return InputInjector::Create(input_task_runner(), ui_task_runner()); 352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)scoped_ptr<ScreenControls> BasicDesktopEnvironment::CreateScreenControls() { 382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DCHECK(caller_task_runner_->BelongsToCurrentThread()); 392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return scoped_ptr<ScreenControls>(); 412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 436e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)scoped_ptr<webrtc::MouseCursorMonitor> 446e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)BasicDesktopEnvironment::CreateMouseCursorMonitor() { 456e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) return scoped_ptr<webrtc::MouseCursorMonitor>( 466e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) webrtc::MouseCursorMonitor::CreateForScreen( 476e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) *desktop_capture_options_, 486e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) webrtc::kFullDesktopScreenId)); 496e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)} 506e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 51c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)std::string BasicDesktopEnvironment::GetCapabilities() const { 52c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return std::string(); 53c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 54c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 55c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void BasicDesktopEnvironment::SetCapabilities(const std::string& capabilities) { 56c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 57c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 58a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)scoped_ptr<GnubbyAuthHandler> BasicDesktopEnvironment::CreateGnubbyAuthHandler( 59a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) protocol::ClientStub* client_stub) { 60a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) return scoped_ptr<GnubbyAuthHandler>(); 61a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} 62a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 636e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)scoped_ptr<webrtc::DesktopCapturer> 642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)BasicDesktopEnvironment::CreateVideoCapturer() { 652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DCHECK(caller_task_runner_->BelongsToCurrentThread()); 662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // The basic desktop environment does not use X DAMAGE, since it is 682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // broken on many systems - see http://crbug.com/73423. 696e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) return scoped_ptr<webrtc::DesktopCapturer>( 706e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) webrtc::ScreenCapturer::Create(*desktop_capture_options_)); 712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)BasicDesktopEnvironment::BasicDesktopEnvironment( 742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_refptr<base::SingleThreadTaskRunner> caller_task_runner, 752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_refptr<base::SingleThreadTaskRunner> input_task_runner, 76b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) scoped_refptr<base::SingleThreadTaskRunner> ui_task_runner) 772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) : caller_task_runner_(caller_task_runner), 782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) input_task_runner_(input_task_runner), 796e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) ui_task_runner_(ui_task_runner), 806e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) desktop_capture_options_( 816e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) new webrtc::DesktopCaptureOptions( 826e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) webrtc::DesktopCaptureOptions::CreateDefault())) { 832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DCHECK(caller_task_runner_->BelongsToCurrentThread()); 842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)BasicDesktopEnvironmentFactory::BasicDesktopEnvironmentFactory( 872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_refptr<base::SingleThreadTaskRunner> caller_task_runner, 882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_refptr<base::SingleThreadTaskRunner> input_task_runner, 89a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) scoped_refptr<base::SingleThreadTaskRunner> ui_task_runner) 902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) : caller_task_runner_(caller_task_runner), 912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) input_task_runner_(input_task_runner), 92a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) ui_task_runner_(ui_task_runner) { 932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)BasicDesktopEnvironmentFactory::~BasicDesktopEnvironmentFactory() { 962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)bool BasicDesktopEnvironmentFactory::SupportsAudioCapture() const { 992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DCHECK(caller_task_runner_->BelongsToCurrentThread()); 1002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return AudioCapturer::IsSupported(); 1022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // namespace remoting 105