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