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_ME2ME_DESKTOP_ENVIRONMENT_H_ 6 #define REMOTING_HOST_ME2ME_DESKTOP_ENVIRONMENT_H_ 7 8 #include "base/macros.h" 9 #include "base/single_thread_task_runner.h" 10 #include "remoting/host/basic_desktop_environment.h" 11 12 namespace remoting { 13 14 class CurtainMode; 15 class HostWindow; 16 class LocalInputMonitor; 17 18 // Same as BasicDesktopEnvironment but supports desktop resizing and X DAMAGE 19 // notifications on Linux. 20 class Me2MeDesktopEnvironment : public BasicDesktopEnvironment { 21 public: 22 ~Me2MeDesktopEnvironment() override; 23 24 // DesktopEnvironment interface. 25 std::unique_ptr<ActionExecutor> CreateActionExecutor() override; 26 std::unique_ptr<ScreenControls> CreateScreenControls() override; 27 std::string GetCapabilities() const override; 28 29 protected: 30 friend class Me2MeDesktopEnvironmentFactory; 31 Me2MeDesktopEnvironment( 32 scoped_refptr<base::SingleThreadTaskRunner> caller_task_runner, 33 scoped_refptr<base::SingleThreadTaskRunner> video_capture_task_runner, 34 scoped_refptr<base::SingleThreadTaskRunner> input_task_runner, 35 scoped_refptr<base::SingleThreadTaskRunner> ui_task_runner, 36 base::WeakPtr<ClientSessionControl> client_session_control, 37 const DesktopEnvironmentOptions& options); 38 39 // Initializes security features of the desktop environment (the curtain mode 40 // and in-session UI). 41 bool InitializeSecurity( 42 base::WeakPtr<ClientSessionControl> client_session_control); 43 44 private: 45 // "Curtains" the session making sure it is disconnected from the local 46 // console. 47 std::unique_ptr<CurtainMode> curtain_; 48 49 // Presents the disconnect window to the local user. 50 std::unique_ptr<HostWindow> disconnect_window_; 51 52 // Notifies the client session about the local mouse movements. 53 std::unique_ptr<LocalInputMonitor> local_input_monitor_; 54 55 DISALLOW_COPY_AND_ASSIGN(Me2MeDesktopEnvironment); 56 }; 57 58 // Used to create |Me2MeDesktopEnvironment| instances. 59 class Me2MeDesktopEnvironmentFactory : public BasicDesktopEnvironmentFactory { 60 public: 61 Me2MeDesktopEnvironmentFactory( 62 scoped_refptr<base::SingleThreadTaskRunner> caller_task_runner, 63 scoped_refptr<base::SingleThreadTaskRunner> video_capture_task_runner, 64 scoped_refptr<base::SingleThreadTaskRunner> input_task_runner, 65 scoped_refptr<base::SingleThreadTaskRunner> ui_task_runner); 66 ~Me2MeDesktopEnvironmentFactory() override; 67 68 // DesktopEnvironmentFactory interface. 69 std::unique_ptr<DesktopEnvironment> Create( 70 base::WeakPtr<ClientSessionControl> client_session_control, 71 const DesktopEnvironmentOptions& options) override; 72 73 private: 74 DISALLOW_COPY_AND_ASSIGN(Me2MeDesktopEnvironmentFactory); 75 }; 76 77 } // namespace remoting 78 79 #endif // REMOTING_HOST_ME2ME_DESKTOP_ENVIRONMENT_H_ 80