blob: bb3c1ffe29da9f03f73e5b649251383692453196 [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;
Jamie Walch044a8cd382020-02-04 00:27:4050 std::unique_ptr<DesktopAndCursorConditionalComposer>
51 CreateComposingVideoCapturer() override;
[email protected]ce404ca2013-01-16 17:23:5352
[email protected]da457fc2013-03-14 16:32:1253 protected:
54 friend class BasicDesktopEnvironmentFactory;
[email protected]c308f5122013-04-05 03:32:0655
[email protected]231316a2013-03-25 06:01:1256 BasicDesktopEnvironment(
57 scoped_refptr<base::SingleThreadTaskRunner> caller_task_runner,
sergeyu85df3c482016-02-15 05:59:0858 scoped_refptr<base::SingleThreadTaskRunner> video_capture_task_runner,
[email protected]231316a2013-03-25 06:01:1259 scoped_refptr<base::SingleThreadTaskRunner> input_task_runner,
zijiehe4aa6ea42016-11-12 01:28:1660 scoped_refptr<base::SingleThreadTaskRunner> ui_task_runner,
Gary Kacmarcika7e33e42019-02-22 19:23:2861 base::WeakPtr<ClientSessionControl> client_session_control,
zijiehe4aa6ea42016-11-12 01:28:1662 const DesktopEnvironmentOptions& options);
[email protected]0c2dc372013-04-23 18:58:1663
[email protected]231316a2013-03-25 06:01:1264 scoped_refptr<base::SingleThreadTaskRunner> caller_task_runner() const {
65 return caller_task_runner_;
66 }
67
sergeyu85df3c482016-02-15 05:59:0868 scoped_refptr<base::SingleThreadTaskRunner> video_capture_task_runner()
69 const {
70 return video_capture_task_runner_;
71 }
72
[email protected]231316a2013-03-25 06:01:1273 scoped_refptr<base::SingleThreadTaskRunner> input_task_runner() const {
74 return input_task_runner_;
75 }
76
77 scoped_refptr<base::SingleThreadTaskRunner> ui_task_runner() const {
78 return ui_task_runner_;
79 }
[email protected]74b08f8c2013-01-30 09:48:5980
zijiehe4aa6ea42016-11-12 01:28:1681 webrtc::DesktopCaptureOptions* mutable_desktop_capture_options() {
82 return options_.desktop_capture_options();
83 }
84
85 const webrtc::DesktopCaptureOptions& desktop_capture_options() const {
86 return *options_.desktop_capture_options();
87 }
88
89 const DesktopEnvironmentOptions& desktop_environment_options() const {
90 return options_;
[email protected]20013202014-08-08 06:33:5091 }
92
[email protected]da457fc2013-03-14 16:32:1293 private:
[email protected]231316a2013-03-25 06:01:1294 // Task runner on which methods of DesktopEnvironment interface should be
95 // called.
96 scoped_refptr<base::SingleThreadTaskRunner> caller_task_runner_;
97
sergeyu85df3c482016-02-15 05:59:0898 // Used to run video capturer.
99 scoped_refptr<base::SingleThreadTaskRunner> video_capture_task_runner_;
100
[email protected]231316a2013-03-25 06:01:12101 // Used to run input-related tasks.
102 scoped_refptr<base::SingleThreadTaskRunner> input_task_runner_;
103
104 // Used to run UI code.
105 scoped_refptr<base::SingleThreadTaskRunner> ui_task_runner_;
106
Gary Kacmarcika7e33e42019-02-22 19:23:28107 // Used to send messages directly to the client session.
108 base::WeakPtr<ClientSessionControl> client_session_control_;
109
zijiehe4aa6ea42016-11-12 01:28:16110 DesktopEnvironmentOptions options_;
[email protected]20013202014-08-08 06:33:50111
[email protected]ce404ca2013-01-16 17:23:53112 DISALLOW_COPY_AND_ASSIGN(BasicDesktopEnvironment);
113};
114
115// Used to create |BasicDesktopEnvironment| instances.
116class BasicDesktopEnvironmentFactory : public DesktopEnvironmentFactory {
117 public:
[email protected]231316a2013-03-25 06:01:12118 BasicDesktopEnvironmentFactory(
119 scoped_refptr<base::SingleThreadTaskRunner> caller_task_runner,
sergeyu85df3c482016-02-15 05:59:08120 scoped_refptr<base::SingleThreadTaskRunner> video_capture_task_runner,
[email protected]231316a2013-03-25 06:01:12121 scoped_refptr<base::SingleThreadTaskRunner> input_task_runner,
Scott Violet9778dcd2019-06-20 21:59:37122 scoped_refptr<base::SingleThreadTaskRunner> ui_task_runner);
dcheng562aba52014-10-21 12:30:14123 ~BasicDesktopEnvironmentFactory() override;
[email protected]ce404ca2013-01-16 17:23:53124
125 // DesktopEnvironmentFactory implementation.
dcheng562aba52014-10-21 12:30:14126 bool SupportsAudioCapture() const override;
[email protected]ce404ca2013-01-16 17:23:53127
[email protected]231316a2013-03-25 06:01:12128 protected:
129 scoped_refptr<base::SingleThreadTaskRunner> caller_task_runner() const {
130 return caller_task_runner_;
131 }
132
sergeyu85df3c482016-02-15 05:59:08133 scoped_refptr<base::SingleThreadTaskRunner> video_capture_task_runner()
134 const {
135 return video_capture_task_runner_;
136 }
137
[email protected]231316a2013-03-25 06:01:12138 scoped_refptr<base::SingleThreadTaskRunner> input_task_runner() const {
139 return input_task_runner_;
140 }
141
142 scoped_refptr<base::SingleThreadTaskRunner> ui_task_runner() const {
143 return ui_task_runner_;
144 }
145
[email protected]ce404ca2013-01-16 17:23:53146 private:
[email protected]231316a2013-03-25 06:01:12147 // Task runner on which methods of DesktopEnvironmentFactory interface should
148 // be called.
149 scoped_refptr<base::SingleThreadTaskRunner> caller_task_runner_;
150
sergeyu85df3c482016-02-15 05:59:08151 // Used to run video capture tasks.
152 scoped_refptr<base::SingleThreadTaskRunner> video_capture_task_runner_;
153
[email protected]231316a2013-03-25 06:01:12154 // Used to run input-related tasks.
155 scoped_refptr<base::SingleThreadTaskRunner> input_task_runner_;
156
157 // Used to run UI code.
158 scoped_refptr<base::SingleThreadTaskRunner> ui_task_runner_;
159
[email protected]ce404ca2013-01-16 17:23:53160 DISALLOW_COPY_AND_ASSIGN(BasicDesktopEnvironmentFactory);
161};
162
163} // namespace remoting
164
165#endif // REMOTING_HOST_BASIC_DESKTOP_ENVIRONMENT_H_