blob: 8f1f249c63f3a7bda6fb72df136f7473017ebe8f [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"
[email protected]ce404ca2013-01-16 17:23:5313#include "base/memory/ref_counted.h"
[email protected]ce404ca2013-01-16 17:23:5314#include "remoting/host/desktop_environment.h"
15
jbriancee9b2ece2016-12-01 07:29:5216namespace base {
17class SingleThreadTaskRunner;
18}
19
[email protected]20013202014-08-08 06:33:5020namespace webrtc {
21
22class DesktopCaptureOptions;
23
24} // namespace webrtc
25
[email protected]ce404ca2013-01-16 17:23:5326namespace remoting {
27
28// Used to create audio/video capturers and event executor that work with
29// the local console.
[email protected]231316a2013-03-25 06:01:1230class BasicDesktopEnvironment : public DesktopEnvironment {
[email protected]ce404ca2013-01-16 17:23:5331 public:
Peter Boströme9178e42021-09-22 18:11:4932 BasicDesktopEnvironment(const BasicDesktopEnvironment&) = delete;
33 BasicDesktopEnvironment& operator=(const BasicDesktopEnvironment&) = delete;
34
dcheng562aba52014-10-21 12:30:1435 ~BasicDesktopEnvironment() override;
[email protected]ce404ca2013-01-16 17:23:5336
37 // DesktopEnvironment implementation.
Joe Downing505ae0d02018-10-17 17:47:3038 std::unique_ptr<ActionExecutor> CreateActionExecutor() override;
dcheng0765c492016-04-06 22:41:5339 std::unique_ptr<AudioCapturer> CreateAudioCapturer() override;
40 std::unique_ptr<InputInjector> CreateInputInjector() override;
41 std::unique_ptr<ScreenControls> CreateScreenControls() override;
42 std::unique_ptr<webrtc::DesktopCapturer> CreateVideoCapturer() override;
43 std::unique_ptr<webrtc::MouseCursorMonitor> CreateMouseCursorMonitor()
44 override;
Erik Jensenc08ecf112019-12-19 00:29:4945 std::unique_ptr<KeyboardLayoutMonitor> CreateKeyboardLayoutMonitor(
46 base::RepeatingCallback<void(const protocol::KeyboardLayout&)> callback)
47 override;
Erik Jensen5d500dd2018-12-10 23:27:5348 std::unique_ptr<FileOperations> CreateFileOperations() override;
Yuwei Huang84af8d22021-08-03 00:36:5849 std::unique_ptr<UrlForwarderConfigurator> CreateUrlForwarderConfigurator()
50 override;
dcheng562aba52014-10-21 12:30:1451 std::string GetCapabilities() const override;
52 void SetCapabilities(const std::string& capabilities) override;
joedow90b28f82016-06-24 04:46:4553 uint32_t GetDesktopSessionId() const override;
Jamie Walch044a8cd382020-02-04 00:27:4054 std::unique_ptr<DesktopAndCursorConditionalComposer>
55 CreateComposingVideoCapturer() override;
[email protected]ce404ca2013-01-16 17:23:5356
[email protected]da457fc2013-03-14 16:32:1257 protected:
58 friend class BasicDesktopEnvironmentFactory;
[email protected]c308f5122013-04-05 03:32:0659
[email protected]231316a2013-03-25 06:01:1260 BasicDesktopEnvironment(
61 scoped_refptr<base::SingleThreadTaskRunner> caller_task_runner,
sergeyu85df3c482016-02-15 05:59:0862 scoped_refptr<base::SingleThreadTaskRunner> video_capture_task_runner,
[email protected]231316a2013-03-25 06:01:1263 scoped_refptr<base::SingleThreadTaskRunner> input_task_runner,
zijiehe4aa6ea42016-11-12 01:28:1664 scoped_refptr<base::SingleThreadTaskRunner> ui_task_runner,
Gary Kacmarcika7e33e42019-02-22 19:23:2865 base::WeakPtr<ClientSessionControl> client_session_control,
zijiehe4aa6ea42016-11-12 01:28:1666 const DesktopEnvironmentOptions& options);
[email protected]0c2dc372013-04-23 18:58:1667
[email protected]231316a2013-03-25 06:01:1268 scoped_refptr<base::SingleThreadTaskRunner> caller_task_runner() const {
69 return caller_task_runner_;
70 }
71
sergeyu85df3c482016-02-15 05:59:0872 scoped_refptr<base::SingleThreadTaskRunner> video_capture_task_runner()
73 const {
74 return video_capture_task_runner_;
75 }
76
[email protected]231316a2013-03-25 06:01:1277 scoped_refptr<base::SingleThreadTaskRunner> input_task_runner() const {
78 return input_task_runner_;
79 }
80
81 scoped_refptr<base::SingleThreadTaskRunner> ui_task_runner() const {
82 return ui_task_runner_;
83 }
[email protected]74b08f8c2013-01-30 09:48:5984
zijiehe4aa6ea42016-11-12 01:28:1685 webrtc::DesktopCaptureOptions* mutable_desktop_capture_options() {
86 return options_.desktop_capture_options();
87 }
88
89 const webrtc::DesktopCaptureOptions& desktop_capture_options() const {
90 return *options_.desktop_capture_options();
91 }
92
93 const DesktopEnvironmentOptions& desktop_environment_options() const {
94 return options_;
[email protected]20013202014-08-08 06:33:5095 }
96
[email protected]da457fc2013-03-14 16:32:1297 private:
[email protected]231316a2013-03-25 06:01:1298 // Task runner on which methods of DesktopEnvironment interface should be
99 // called.
100 scoped_refptr<base::SingleThreadTaskRunner> caller_task_runner_;
101
sergeyu85df3c482016-02-15 05:59:08102 // Used to run video capturer.
103 scoped_refptr<base::SingleThreadTaskRunner> video_capture_task_runner_;
104
[email protected]231316a2013-03-25 06:01:12105 // Used to run input-related tasks.
106 scoped_refptr<base::SingleThreadTaskRunner> input_task_runner_;
107
108 // Used to run UI code.
109 scoped_refptr<base::SingleThreadTaskRunner> ui_task_runner_;
110
Gary Kacmarcika7e33e42019-02-22 19:23:28111 // Used to send messages directly to the client session.
112 base::WeakPtr<ClientSessionControl> client_session_control_;
113
zijiehe4aa6ea42016-11-12 01:28:16114 DesktopEnvironmentOptions options_;
[email protected]ce404ca2013-01-16 17:23:53115};
116
117// Used to create |BasicDesktopEnvironment| instances.
118class BasicDesktopEnvironmentFactory : public DesktopEnvironmentFactory {
119 public:
[email protected]231316a2013-03-25 06:01:12120 BasicDesktopEnvironmentFactory(
121 scoped_refptr<base::SingleThreadTaskRunner> caller_task_runner,
sergeyu85df3c482016-02-15 05:59:08122 scoped_refptr<base::SingleThreadTaskRunner> video_capture_task_runner,
[email protected]231316a2013-03-25 06:01:12123 scoped_refptr<base::SingleThreadTaskRunner> input_task_runner,
Scott Violet9778dcd2019-06-20 21:59:37124 scoped_refptr<base::SingleThreadTaskRunner> ui_task_runner);
Peter Boströme9178e42021-09-22 18:11:49125
126 BasicDesktopEnvironmentFactory(const BasicDesktopEnvironmentFactory&) =
127 delete;
128 BasicDesktopEnvironmentFactory& operator=(
129 const BasicDesktopEnvironmentFactory&) = delete;
130
dcheng562aba52014-10-21 12:30:14131 ~BasicDesktopEnvironmentFactory() override;
[email protected]ce404ca2013-01-16 17:23:53132
133 // DesktopEnvironmentFactory implementation.
dcheng562aba52014-10-21 12:30:14134 bool SupportsAudioCapture() const override;
[email protected]ce404ca2013-01-16 17:23:53135
[email protected]231316a2013-03-25 06:01:12136 protected:
137 scoped_refptr<base::SingleThreadTaskRunner> caller_task_runner() const {
138 return caller_task_runner_;
139 }
140
sergeyu85df3c482016-02-15 05:59:08141 scoped_refptr<base::SingleThreadTaskRunner> video_capture_task_runner()
142 const {
143 return video_capture_task_runner_;
144 }
145
[email protected]231316a2013-03-25 06:01:12146 scoped_refptr<base::SingleThreadTaskRunner> input_task_runner() const {
147 return input_task_runner_;
148 }
149
150 scoped_refptr<base::SingleThreadTaskRunner> ui_task_runner() const {
151 return ui_task_runner_;
152 }
153
[email protected]ce404ca2013-01-16 17:23:53154 private:
[email protected]231316a2013-03-25 06:01:12155 // Task runner on which methods of DesktopEnvironmentFactory interface should
156 // be called.
157 scoped_refptr<base::SingleThreadTaskRunner> caller_task_runner_;
158
sergeyu85df3c482016-02-15 05:59:08159 // Used to run video capture tasks.
160 scoped_refptr<base::SingleThreadTaskRunner> video_capture_task_runner_;
161
[email protected]231316a2013-03-25 06:01:12162 // Used to run input-related tasks.
163 scoped_refptr<base::SingleThreadTaskRunner> input_task_runner_;
164
165 // Used to run UI code.
166 scoped_refptr<base::SingleThreadTaskRunner> ui_task_runner_;
[email protected]ce404ca2013-01-16 17:23:53167};
168
169} // namespace remoting
170
171#endif // REMOTING_HOST_BASIC_DESKTOP_ENVIRONMENT_H_