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