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_DESKTOP_ENVIRONMENT_H_
6#define REMOTING_HOST_DESKTOP_ENVIRONMENT_H_
7
8#include <string>
9
10#include "base/basictypes.h"
11#include "base/callback_forward.h"
12#include "base/memory/ref_counted.h"
13#include "base/memory/scoped_ptr.h"
14#include "base/memory/weak_ptr.h"
15
16namespace base {
17class SingleThreadTaskRunner;
18}  // namespace base
19
20namespace webrtc {
21class DesktopCapturer;
22class MouseCursorMonitor;
23}  // namespace webrtc
24
25namespace remoting {
26
27namespace protocol {
28class ClientStub;
29}  // namespace protocol
30
31class AudioCapturer;
32class ClientSessionControl;
33class GnubbyAuthHandler;
34class InputInjector;
35class ScreenControls;
36
37// Provides factory methods for creation of audio/video capturers and event
38// executor for a given desktop environment.
39class DesktopEnvironment {
40 public:
41  virtual ~DesktopEnvironment() {}
42
43  // Factory methods used to create audio/video capturers, event executor, and
44  // screen controls object for a particular desktop environment.
45  virtual scoped_ptr<AudioCapturer> CreateAudioCapturer() = 0;
46  virtual scoped_ptr<InputInjector> CreateInputInjector() = 0;
47  virtual scoped_ptr<ScreenControls> CreateScreenControls() = 0;
48  virtual scoped_ptr<webrtc::DesktopCapturer> CreateVideoCapturer() = 0;
49  virtual scoped_ptr<webrtc::MouseCursorMonitor> CreateMouseCursorMonitor() = 0;
50
51  // Returns the set of all capabilities supported by |this|.
52  virtual std::string GetCapabilities() const = 0;
53
54  // Passes the final set of capabilities negotiated between the client and host
55  // to |this|.
56  virtual void SetCapabilities(const std::string& capabilities) = 0;
57
58  // Factory method to create a gnubby auth handler suitable for the particular
59  // desktop environment.
60  virtual scoped_ptr<GnubbyAuthHandler> CreateGnubbyAuthHandler(
61      protocol::ClientStub* client_stub) = 0;
62};
63
64// Used to create |DesktopEnvironment| instances.
65class DesktopEnvironmentFactory {
66 public:
67  virtual ~DesktopEnvironmentFactory() {}
68
69  // Creates an instance of |DesktopEnvironment|. Returns a NULL pointer if
70  // the desktop environment could not be created for any reason (if the curtain
71  // failed to active for instance). |client_session_control| must outlive
72  // the created desktop environment.
73  virtual scoped_ptr<DesktopEnvironment> Create(
74      base::WeakPtr<ClientSessionControl> client_session_control) = 0;
75
76  // Enables or disables the curtain mode.
77  virtual void SetEnableCurtaining(bool enable) {}
78
79  // Returns |true| if created |DesktopEnvironment| instances support audio
80  // capture.
81  virtual bool SupportsAudioCapture() const = 0;
82
83  // Enables or disables gnubby authentication.
84  virtual void SetEnableGnubbyAuth(bool enable) {}
85};
86
87}  // namespace remoting
88
89#endif  // REMOTING_HOST_DESKTOP_ENVIRONMENT_H_
90