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