1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #ifndef REMOTING_HOST_BASIC_DESKTOP_ENVIRONMENT_H_ 6 #define REMOTING_HOST_BASIC_DESKTOP_ENVIRONMENT_H_ 7 8 #include <string> 9 10 #include "base/basictypes.h" 11 #include "base/compiler_specific.h" 12 #include "base/memory/ref_counted.h" 13 #include "base/memory/scoped_ptr.h" 14 #include "remoting/host/desktop_environment.h" 15 16 namespace webrtc { 17 18 class DesktopCaptureOptions; 19 20 } // namespace webrtc 21 22 namespace remoting { 23 24 class GnubbyAuthHandler; 25 26 // Used to create audio/video capturers and event executor that work with 27 // the local console. 28 class BasicDesktopEnvironment : public DesktopEnvironment { 29 public: 30 virtual ~BasicDesktopEnvironment(); 31 32 // DesktopEnvironment implementation. 33 virtual scoped_ptr<AudioCapturer> CreateAudioCapturer() OVERRIDE; 34 virtual scoped_ptr<InputInjector> CreateInputInjector() OVERRIDE; 35 virtual scoped_ptr<ScreenControls> CreateScreenControls() OVERRIDE; 36 virtual scoped_ptr<webrtc::DesktopCapturer> CreateVideoCapturer() OVERRIDE; 37 virtual scoped_ptr<webrtc::MouseCursorMonitor> CreateMouseCursorMonitor() 38 OVERRIDE; 39 virtual std::string GetCapabilities() const OVERRIDE; 40 virtual void SetCapabilities(const std::string& capabilities) OVERRIDE; 41 virtual scoped_ptr<GnubbyAuthHandler> CreateGnubbyAuthHandler( 42 protocol::ClientStub* client_stub) OVERRIDE; 43 44 protected: 45 friend class BasicDesktopEnvironmentFactory; 46 47 BasicDesktopEnvironment( 48 scoped_refptr<base::SingleThreadTaskRunner> caller_task_runner, 49 scoped_refptr<base::SingleThreadTaskRunner> input_task_runner, 50 scoped_refptr<base::SingleThreadTaskRunner> ui_task_runner); 51 52 scoped_refptr<base::SingleThreadTaskRunner> caller_task_runner() const { 53 return caller_task_runner_; 54 } 55 56 scoped_refptr<base::SingleThreadTaskRunner> input_task_runner() const { 57 return input_task_runner_; 58 } 59 60 scoped_refptr<base::SingleThreadTaskRunner> ui_task_runner() const { 61 return ui_task_runner_; 62 } 63 64 webrtc::DesktopCaptureOptions* desktop_capture_options() { 65 return desktop_capture_options_.get(); 66 } 67 68 private: 69 // Task runner on which methods of DesktopEnvironment interface should be 70 // called. 71 scoped_refptr<base::SingleThreadTaskRunner> caller_task_runner_; 72 73 // Used to run input-related tasks. 74 scoped_refptr<base::SingleThreadTaskRunner> input_task_runner_; 75 76 // Used to run UI code. 77 scoped_refptr<base::SingleThreadTaskRunner> ui_task_runner_; 78 79 // Options shared between |DesktopCapturer| and |MouseCursorMonitor|. It 80 // might contain expensive resources, thus justifying the sharing. 81 // Also: it's dynamically allocated to avoid having to bring in 82 // desktop_capture_options.h which brings in X11 headers which causes hard to 83 // find build errors. 84 scoped_ptr<webrtc::DesktopCaptureOptions> desktop_capture_options_; 85 86 DISALLOW_COPY_AND_ASSIGN(BasicDesktopEnvironment); 87 }; 88 89 // Used to create |BasicDesktopEnvironment| instances. 90 class BasicDesktopEnvironmentFactory : public DesktopEnvironmentFactory { 91 public: 92 BasicDesktopEnvironmentFactory( 93 scoped_refptr<base::SingleThreadTaskRunner> caller_task_runner, 94 scoped_refptr<base::SingleThreadTaskRunner> input_task_runner, 95 scoped_refptr<base::SingleThreadTaskRunner> ui_task_runner); 96 virtual ~BasicDesktopEnvironmentFactory(); 97 98 // DesktopEnvironmentFactory implementation. 99 virtual bool SupportsAudioCapture() const OVERRIDE; 100 101 protected: 102 scoped_refptr<base::SingleThreadTaskRunner> caller_task_runner() const { 103 return caller_task_runner_; 104 } 105 106 scoped_refptr<base::SingleThreadTaskRunner> input_task_runner() const { 107 return input_task_runner_; 108 } 109 110 scoped_refptr<base::SingleThreadTaskRunner> ui_task_runner() const { 111 return ui_task_runner_; 112 } 113 114 private: 115 // Task runner on which methods of DesktopEnvironmentFactory interface should 116 // be called. 117 scoped_refptr<base::SingleThreadTaskRunner> caller_task_runner_; 118 119 // Used to run input-related tasks. 120 scoped_refptr<base::SingleThreadTaskRunner> input_task_runner_; 121 122 // Used to run UI code. 123 scoped_refptr<base::SingleThreadTaskRunner> ui_task_runner_; 124 125 DISALLOW_COPY_AND_ASSIGN(BasicDesktopEnvironmentFactory); 126 }; 127 128 } // namespace remoting 129 130 #endif // REMOTING_HOST_BASIC_DESKTOP_ENVIRONMENT_H_ 131