basic_desktop_environment.h 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179
  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. #ifndef REMOTING_HOST_BASIC_DESKTOP_ENVIRONMENT_H_
  5. #define REMOTING_HOST_BASIC_DESKTOP_ENVIRONMENT_H_
  6. #include <cstdint>
  7. #include <memory>
  8. #include <string>
  9. #include "base/compiler_specific.h"
  10. #include "base/memory/ref_counted.h"
  11. #include "remoting/host/desktop_environment.h"
  12. #include "remoting/protocol/desktop_capturer.h"
  13. namespace base {
  14. class SingleThreadTaskRunner;
  15. }
  16. namespace webrtc {
  17. class DesktopCaptureOptions;
  18. } // namespace webrtc
  19. namespace remoting {
  20. class DesktopDisplayInfoMonitor;
  21. // Used to create audio/video capturers and event executor that work with
  22. // the local console.
  23. class BasicDesktopEnvironment : public DesktopEnvironment {
  24. public:
  25. BasicDesktopEnvironment(const BasicDesktopEnvironment&) = delete;
  26. BasicDesktopEnvironment& operator=(const BasicDesktopEnvironment&) = delete;
  27. ~BasicDesktopEnvironment() override;
  28. // DesktopEnvironment implementation.
  29. std::unique_ptr<ActionExecutor> CreateActionExecutor() override;
  30. std::unique_ptr<AudioCapturer> CreateAudioCapturer() override;
  31. std::unique_ptr<InputInjector> CreateInputInjector() override;
  32. std::unique_ptr<ScreenControls> CreateScreenControls() override;
  33. std::unique_ptr<DesktopCapturer> CreateVideoCapturer() override;
  34. DesktopDisplayInfoMonitor* GetDisplayInfoMonitor() override;
  35. std::unique_ptr<webrtc::MouseCursorMonitor> CreateMouseCursorMonitor()
  36. override;
  37. std::unique_ptr<KeyboardLayoutMonitor> CreateKeyboardLayoutMonitor(
  38. base::RepeatingCallback<void(const protocol::KeyboardLayout&)> callback)
  39. override;
  40. std::unique_ptr<FileOperations> CreateFileOperations() override;
  41. std::unique_ptr<UrlForwarderConfigurator> CreateUrlForwarderConfigurator()
  42. override;
  43. std::string GetCapabilities() const override;
  44. void SetCapabilities(const std::string& capabilities) override;
  45. uint32_t GetDesktopSessionId() const override;
  46. std::unique_ptr<DesktopAndCursorConditionalComposer>
  47. CreateComposingVideoCapturer() override;
  48. std::unique_ptr<RemoteWebAuthnStateChangeNotifier>
  49. CreateRemoteWebAuthnStateChangeNotifier() override;
  50. protected:
  51. friend class BasicDesktopEnvironmentFactory;
  52. BasicDesktopEnvironment(
  53. scoped_refptr<base::SingleThreadTaskRunner> caller_task_runner,
  54. scoped_refptr<base::SingleThreadTaskRunner> video_capture_task_runner,
  55. scoped_refptr<base::SingleThreadTaskRunner> input_task_runner,
  56. scoped_refptr<base::SingleThreadTaskRunner> ui_task_runner,
  57. base::WeakPtr<ClientSessionControl> client_session_control,
  58. const DesktopEnvironmentOptions& options);
  59. scoped_refptr<base::SingleThreadTaskRunner> caller_task_runner() const {
  60. return caller_task_runner_;
  61. }
  62. scoped_refptr<base::SingleThreadTaskRunner> video_capture_task_runner()
  63. const {
  64. return video_capture_task_runner_;
  65. }
  66. scoped_refptr<base::SingleThreadTaskRunner> input_task_runner() const {
  67. return input_task_runner_;
  68. }
  69. scoped_refptr<base::SingleThreadTaskRunner> ui_task_runner() const {
  70. return ui_task_runner_;
  71. }
  72. webrtc::DesktopCaptureOptions* mutable_desktop_capture_options() {
  73. return options_.desktop_capture_options();
  74. }
  75. const webrtc::DesktopCaptureOptions& desktop_capture_options() const {
  76. return *options_.desktop_capture_options();
  77. }
  78. const DesktopEnvironmentOptions& desktop_environment_options() const {
  79. return options_;
  80. }
  81. private:
  82. // Task runner on which methods of DesktopEnvironment interface should be
  83. // called.
  84. scoped_refptr<base::SingleThreadTaskRunner> caller_task_runner_;
  85. // Used to run video capturer.
  86. scoped_refptr<base::SingleThreadTaskRunner> video_capture_task_runner_;
  87. // Used to run input-related tasks.
  88. scoped_refptr<base::SingleThreadTaskRunner> input_task_runner_;
  89. // Used to run UI code.
  90. scoped_refptr<base::SingleThreadTaskRunner> ui_task_runner_;
  91. // Used to send messages directly to the client session.
  92. base::WeakPtr<ClientSessionControl> client_session_control_;
  93. std::unique_ptr<DesktopDisplayInfoMonitor> display_info_monitor_;
  94. DesktopEnvironmentOptions options_;
  95. };
  96. // Used to create |BasicDesktopEnvironment| instances.
  97. class BasicDesktopEnvironmentFactory : public DesktopEnvironmentFactory {
  98. public:
  99. BasicDesktopEnvironmentFactory(
  100. scoped_refptr<base::SingleThreadTaskRunner> caller_task_runner,
  101. scoped_refptr<base::SingleThreadTaskRunner> video_capture_task_runner,
  102. scoped_refptr<base::SingleThreadTaskRunner> input_task_runner,
  103. scoped_refptr<base::SingleThreadTaskRunner> ui_task_runner);
  104. BasicDesktopEnvironmentFactory(const BasicDesktopEnvironmentFactory&) =
  105. delete;
  106. BasicDesktopEnvironmentFactory& operator=(
  107. const BasicDesktopEnvironmentFactory&) = delete;
  108. ~BasicDesktopEnvironmentFactory() override;
  109. // DesktopEnvironmentFactory implementation.
  110. bool SupportsAudioCapture() const override;
  111. protected:
  112. scoped_refptr<base::SingleThreadTaskRunner> caller_task_runner() const {
  113. return caller_task_runner_;
  114. }
  115. scoped_refptr<base::SingleThreadTaskRunner> video_capture_task_runner()
  116. const {
  117. return video_capture_task_runner_;
  118. }
  119. scoped_refptr<base::SingleThreadTaskRunner> input_task_runner() const {
  120. return input_task_runner_;
  121. }
  122. scoped_refptr<base::SingleThreadTaskRunner> ui_task_runner() const {
  123. return ui_task_runner_;
  124. }
  125. private:
  126. // Task runner on which methods of DesktopEnvironmentFactory interface should
  127. // be called.
  128. scoped_refptr<base::SingleThreadTaskRunner> caller_task_runner_;
  129. // Used to run video capture tasks.
  130. scoped_refptr<base::SingleThreadTaskRunner> video_capture_task_runner_;
  131. // Used to run input-related tasks.
  132. scoped_refptr<base::SingleThreadTaskRunner> input_task_runner_;
  133. // Used to run UI code.
  134. scoped_refptr<base::SingleThreadTaskRunner> ui_task_runner_;
  135. };
  136. } // namespace remoting
  137. #endif // REMOTING_HOST_BASIC_DESKTOP_ENVIRONMENT_H_