Upstream version 10.39.233.0
[platform/framework/web/crosswalk.git] / src / remoting / host / basic_desktop_environment.h
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_BASIC_DESKTOP_ENVIRONMENT_H_
6 #define REMOTING_HOST_BASIC_DESKTOP_ENVIRONMENT_H_
7
8 #include <string>
9
10 #include "base/basictypes.h"
11 #include "base/compiler_specific.h"
12 #include "base/memory/ref_counted.h"
13 #include "base/memory/scoped_ptr.h"
14 #include "remoting/host/desktop_environment.h"
15
16 namespace webrtc {
17
18 class DesktopCaptureOptions;
19
20 }  // namespace webrtc
21
22 namespace remoting {
23
24 class GnubbyAuthHandler;
25
26 // Used to create audio/video capturers and event executor that work with
27 // the local console.
28 class BasicDesktopEnvironment : public DesktopEnvironment {
29  public:
30   virtual ~BasicDesktopEnvironment();
31
32   // DesktopEnvironment implementation.
33   virtual scoped_ptr<AudioCapturer> CreateAudioCapturer() OVERRIDE;
34   virtual scoped_ptr<InputInjector> CreateInputInjector() OVERRIDE;
35   virtual scoped_ptr<ScreenControls> CreateScreenControls() OVERRIDE;
36   virtual scoped_ptr<webrtc::DesktopCapturer> CreateVideoCapturer() OVERRIDE;
37   virtual scoped_ptr<webrtc::MouseCursorMonitor> CreateMouseCursorMonitor()
38       OVERRIDE;
39   virtual std::string GetCapabilities() const OVERRIDE;
40   virtual void SetCapabilities(const std::string& capabilities) OVERRIDE;
41   virtual scoped_ptr<GnubbyAuthHandler> CreateGnubbyAuthHandler(
42       protocol::ClientStub* client_stub) OVERRIDE;
43
44  protected:
45   friend class BasicDesktopEnvironmentFactory;
46
47   BasicDesktopEnvironment(
48       scoped_refptr<base::SingleThreadTaskRunner> caller_task_runner,
49       scoped_refptr<base::SingleThreadTaskRunner> input_task_runner,
50       scoped_refptr<base::SingleThreadTaskRunner> ui_task_runner);
51
52   scoped_refptr<base::SingleThreadTaskRunner> caller_task_runner() const {
53     return caller_task_runner_;
54   }
55
56   scoped_refptr<base::SingleThreadTaskRunner> input_task_runner() const {
57     return input_task_runner_;
58   }
59
60   scoped_refptr<base::SingleThreadTaskRunner> ui_task_runner() const {
61     return ui_task_runner_;
62   }
63
64   webrtc::DesktopCaptureOptions* desktop_capture_options() {
65     return desktop_capture_options_.get();
66   }
67
68  private:
69   // Task runner on which methods of DesktopEnvironment interface should be
70   // called.
71   scoped_refptr<base::SingleThreadTaskRunner> caller_task_runner_;
72
73   // Used to run input-related tasks.
74   scoped_refptr<base::SingleThreadTaskRunner> input_task_runner_;
75
76   // Used to run UI code.
77   scoped_refptr<base::SingleThreadTaskRunner> ui_task_runner_;
78
79   // Options shared between |DesktopCapturer| and |MouseCursorMonitor|. It
80   // might contain expensive resources, thus justifying the sharing.
81   // Also: it's dynamically allocated to avoid having to bring in
82   // desktop_capture_options.h which brings in X11 headers which causes hard to
83   // find build errors.
84   scoped_ptr<webrtc::DesktopCaptureOptions> desktop_capture_options_;
85
86   DISALLOW_COPY_AND_ASSIGN(BasicDesktopEnvironment);
87 };
88
89 // Used to create |BasicDesktopEnvironment| instances.
90 class BasicDesktopEnvironmentFactory : public DesktopEnvironmentFactory {
91  public:
92   BasicDesktopEnvironmentFactory(
93       scoped_refptr<base::SingleThreadTaskRunner> caller_task_runner,
94       scoped_refptr<base::SingleThreadTaskRunner> input_task_runner,
95       scoped_refptr<base::SingleThreadTaskRunner> ui_task_runner);
96   virtual ~BasicDesktopEnvironmentFactory();
97
98   // DesktopEnvironmentFactory implementation.
99   virtual bool SupportsAudioCapture() const OVERRIDE;
100
101  protected:
102   scoped_refptr<base::SingleThreadTaskRunner> caller_task_runner() const {
103     return caller_task_runner_;
104   }
105
106   scoped_refptr<base::SingleThreadTaskRunner> input_task_runner() const {
107     return input_task_runner_;
108   }
109
110   scoped_refptr<base::SingleThreadTaskRunner> ui_task_runner() const {
111     return ui_task_runner_;
112   }
113
114  private:
115   // Task runner on which methods of DesktopEnvironmentFactory interface should
116   // be called.
117   scoped_refptr<base::SingleThreadTaskRunner> caller_task_runner_;
118
119   // Used to run input-related tasks.
120   scoped_refptr<base::SingleThreadTaskRunner> input_task_runner_;
121
122   // Used to run UI code.
123   scoped_refptr<base::SingleThreadTaskRunner> ui_task_runner_;
124
125   DISALLOW_COPY_AND_ASSIGN(BasicDesktopEnvironmentFactory);
126 };
127
128 }  // namespace remoting
129
130 #endif  // REMOTING_HOST_BASIC_DESKTOP_ENVIRONMENT_H_