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 16 namespace base { 17 class SingleThreadTaskRunner; 18 } // namespace base 19 20 namespace webrtc { 21 class DesktopCapturer; 22 class MouseCursorMonitor; 23 } // namespace webrtc 24 25 namespace remoting { 26 27 namespace protocol { 28 class ClientStub; 29 } // namespace protocol 30 31 class AudioCapturer; 32 class ClientSessionControl; 33 class GnubbyAuthHandler; 34 class InputInjector; 35 class ScreenControls; 36 37 // Provides factory methods for creation of audio/video capturers and event 38 // executor for a given desktop environment. 39 class DesktopEnvironment { 40 public: ~DesktopEnvironment()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. 65 class DesktopEnvironmentFactory { 66 public: ~DesktopEnvironmentFactory()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. SetEnableCurtaining(bool enable)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. SetEnableGnubbyAuth(bool enable)84 virtual void SetEnableGnubbyAuth(bool enable) {} 85 }; 86 87 } // namespace remoting 88 89 #endif // REMOTING_HOST_DESKTOP_ENVIRONMENT_H_ 90