blob: 45c2db6ef4bf24494651ebc170b59b3c8d56cf13 [file] [log] [blame]
[email protected]ce404ca2013-01-16 17:23:531// 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
joedow90b28f82016-06-24 04:46:458#include <cstdint>
dcheng0765c492016-04-06 22:41:539#include <memory>
[email protected]a5d181f2013-04-19 14:55:3710#include <string>
11
[email protected]ce404ca2013-01-16 17:23:5312#include "base/compiler_specific.h"
avic5960f32015-12-22 22:49:4813#include "base/macros.h"
[email protected]ce404ca2013-01-16 17:23:5314#include "base/memory/ref_counted.h"
[email protected]ce404ca2013-01-16 17:23:5315#include "remoting/host/desktop_environment.h"
16
jbriancee9b2ece2016-12-01 07:29:5217namespace base {
18class SingleThreadTaskRunner;
19}
20
[email protected]20013202014-08-08 06:33:5021namespace webrtc {
22
23class DesktopCaptureOptions;
24
25} // namespace webrtc
26
[email protected]ce404ca2013-01-16 17:23:5327namespace remoting {
28
29// Used to create audio/video capturers and event executor that work with
30// the local console.
[email protected]231316a2013-03-25 06:01:1231class BasicDesktopEnvironment : public DesktopEnvironment {
[email protected]ce404ca2013-01-16 17:23:5332 public:
dcheng562aba52014-10-21 12:30:1433 ~BasicDesktopEnvironment() override;
[email protected]ce404ca2013-01-16 17:23:5334
35 // DesktopEnvironment implementation.
Joe Downing505ae0d02018-10-17 17:47:3036 std::unique_ptr<ActionExecutor> CreateActionExecutor() override;
dcheng0765c492016-04-06 22:41:5337 std::unique_ptr<AudioCapturer> CreateAudioCapturer() override;
38 std::unique_ptr<InputInjector> CreateInputInjector() override;
39 std::unique_ptr<ScreenControls> CreateScreenControls() override;
40 std::unique_ptr<webrtc::DesktopCapturer> CreateVideoCapturer() override;
41 std::unique_ptr<webrtc::MouseCursorMonitor> CreateMouseCursorMonitor()
42 override;
Erik Jensenc08ecf112019-12-19 00:29:4943 std::unique_ptr<KeyboardLayoutMonitor> CreateKeyboardLayoutMonitor(
44 base::RepeatingCallback<void(const protocol::KeyboardLayout&)> callback)
45 override;
Erik Jensen5d500dd2018-12-10 23:27:5346 std::unique_ptr<FileOperations> CreateFileOperations() override;
dcheng562aba52014-10-21 12:30:1447 std::string GetCapabilities() const override;
48 void SetCapabilities(const std::string& capabilities) override;
joedow90b28f82016-06-24 04:46:4549 uint32_t GetDesktopSessionId() const override;
[email protected]ce404ca2013-01-16 17:23:5350
[email protected]da457fc2013-03-14 16:32:1251 protected:
52 friend class BasicDesktopEnvironmentFactory;
[email protected]c308f5122013-04-05 03:32:0653
[email protected]231316a2013-03-25 06:01:1254 BasicDesktopEnvironment(
55 scoped_refptr<base::SingleThreadTaskRunner> caller_task_runner,
sergeyu85df3c482016-02-15 05:59:0856 scoped_refptr<base::SingleThreadTaskRunner> video_capture_task_runner,
[email protected]231316a2013-03-25 06:01:1257 scoped_refptr<base::SingleThreadTaskRunner> input_task_runner,
zijiehe4aa6ea42016-11-12 01:28:1658 scoped_refptr<base::SingleThreadTaskRunner> ui_task_runner,
Gary Kacmarcika7e33e42019-02-22 19:23:2859 base::WeakPtr<ClientSessionControl> client_session_control,
zijiehe4aa6ea42016-11-12 01:28:1660 const DesktopEnvironmentOptions& options);
[email protected]0c2dc372013-04-23 18:58:1661
[email protected]231316a2013-03-25 06:01:1262 scoped_refptr<base::SingleThreadTaskRunner> caller_task_runner() const {
63 return caller_task_runner_;
64 }
65
sergeyu85df3c482016-02-15 05:59:0866 scoped_refptr<base::SingleThreadTaskRunner> video_capture_task_runner()
67 const {
68 return video_capture_task_runner_;
69 }
70
[email protected]231316a2013-03-25 06:01:1271 scoped_refptr<base::SingleThreadTaskRunner> input_task_runner() const {
72 return input_task_runner_;
73 }
74
75 scoped_refptr<base::SingleThreadTaskRunner> ui_task_runner() const {
76 return ui_task_runner_;
77 }
[email protected]74b08f8c2013-01-30 09:48:5978
zijiehe4aa6ea42016-11-12 01:28:1679 webrtc::DesktopCaptureOptions* mutable_desktop_capture_options() {
80 return options_.desktop_capture_options();
81 }
82
83 const webrtc::DesktopCaptureOptions& desktop_capture_options() const {
84 return *options_.desktop_capture_options();
85 }
86
zijiehe4aa6ea42016-11-12 01:28:1687 const DesktopEnvironmentOptions& desktop_environment_options() const {
88 return options_;
[email protected]20013202014-08-08 06:33:5089 }
90
[email protected]da457fc2013-03-14 16:32:1291 private:
[email protected]231316a2013-03-25 06:01:1292 // Task runner on which methods of DesktopEnvironment interface should be
93 // called.
94 scoped_refptr<base::SingleThreadTaskRunner> caller_task_runner_;
95
sergeyu85df3c482016-02-15 05:59:0896 // Used to run video capturer.
97 scoped_refptr<base::SingleThreadTaskRunner> video_capture_task_runner_;
98
[email protected]231316a2013-03-25 06:01:1299 // Used to run input-related tasks.
100 scoped_refptr<base::SingleThreadTaskRunner> input_task_runner_;
101
102 // Used to run UI code.
103 scoped_refptr<base::SingleThreadTaskRunner> ui_task_runner_;
104
Gary Kacmarcika7e33e42019-02-22 19:23:28105 // Used to send messages directly to the client session.
106 base::WeakPtr<ClientSessionControl> client_session_control_;
107
zijiehe4aa6ea42016-11-12 01:28:16108 DesktopEnvironmentOptions options_;
[email protected]20013202014-08-08 06:33:50109
[email protected]ce404ca2013-01-16 17:23:53110 DISALLOW_COPY_AND_ASSIGN(BasicDesktopEnvironment);
111};
112
113// Used to create |BasicDesktopEnvironment| instances.
114class BasicDesktopEnvironmentFactory : public DesktopEnvironmentFactory {
115 public:
[email protected]231316a2013-03-25 06:01:12116 BasicDesktopEnvironmentFactory(
117 scoped_refptr<base::SingleThreadTaskRunner> caller_task_runner,
sergeyu85df3c482016-02-15 05:59:08118 scoped_refptr<base::SingleThreadTaskRunner> video_capture_task_runner,
[email protected]231316a2013-03-25 06:01:12119 scoped_refptr<base::SingleThreadTaskRunner> input_task_runner,
Scott Violet9778dcd2019-06-20 21:59:37120 scoped_refptr<base::SingleThreadTaskRunner> ui_task_runner);
dcheng562aba52014-10-21 12:30:14121 ~BasicDesktopEnvironmentFactory() override;
[email protected]ce404ca2013-01-16 17:23:53122
123 // DesktopEnvironmentFactory implementation.
dcheng562aba52014-10-21 12:30:14124 bool SupportsAudioCapture() const override;
[email protected]ce404ca2013-01-16 17:23:53125
[email protected]231316a2013-03-25 06:01:12126 protected:
127 scoped_refptr<base::SingleThreadTaskRunner> caller_task_runner() const {
128 return caller_task_runner_;
129 }
130
sergeyu85df3c482016-02-15 05:59:08131 scoped_refptr<base::SingleThreadTaskRunner> video_capture_task_runner()
132 const {
133 return video_capture_task_runner_;
134 }
135
[email protected]231316a2013-03-25 06:01:12136 scoped_refptr<base::SingleThreadTaskRunner> input_task_runner() const {
137 return input_task_runner_;
138 }
139
140 scoped_refptr<base::SingleThreadTaskRunner> ui_task_runner() const {
141 return ui_task_runner_;
142 }
143
[email protected]ce404ca2013-01-16 17:23:53144 private:
[email protected]231316a2013-03-25 06:01:12145 // Task runner on which methods of DesktopEnvironmentFactory interface should
146 // be called.
147 scoped_refptr<base::SingleThreadTaskRunner> caller_task_runner_;
148
sergeyu85df3c482016-02-15 05:59:08149 // Used to run video capture tasks.
150 scoped_refptr<base::SingleThreadTaskRunner> video_capture_task_runner_;
151
[email protected]231316a2013-03-25 06:01:12152 // Used to run input-related tasks.
153 scoped_refptr<base::SingleThreadTaskRunner> input_task_runner_;
154
155 // Used to run UI code.
156 scoped_refptr<base::SingleThreadTaskRunner> ui_task_runner_;
157
[email protected]ce404ca2013-01-16 17:23:53158 DISALLOW_COPY_AND_ASSIGN(BasicDesktopEnvironmentFactory);
159};
160
161} // namespace remoting
162
163#endif // REMOTING_HOST_BASIC_DESKTOP_ENVIRONMENT_H_