15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef REMOTING_HOST_DESKTOP_ENVIRONMENT_H_ 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define REMOTING_HOST_DESKTOP_ENVIRONMENT_H_ 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include <string> 92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/basictypes.h" 112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/callback_forward.h" 122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/memory/ref_counted.h" 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/scoped_ptr.h" 142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/memory/weak_ptr.h" 152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace base { 172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class SingleThreadTaskRunner; 182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // namespace base 192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 20868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)namespace webrtc { 216e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)class DesktopCapturer; 226e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)class MouseCursorMonitor; 23868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)} // namespace webrtc 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace remoting { 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 27a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)namespace protocol { 28a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)class ClientStub; 29a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} // namespace protocol 30a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class AudioCapturer; 322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class ClientSessionControl; 33a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)class GnubbyAuthHandler; 342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class InputInjector; 352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class ScreenControls; 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Provides factory methods for creation of audio/video capturers and event 382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// executor for a given desktop environment. 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class DesktopEnvironment { 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual ~DesktopEnvironment() {} 422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Factory methods used to create audio/video capturers, event executor, and 442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // screen controls object for a particular desktop environment. 452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual scoped_ptr<AudioCapturer> CreateAudioCapturer() = 0; 462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual scoped_ptr<InputInjector> CreateInputInjector() = 0; 472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual scoped_ptr<ScreenControls> CreateScreenControls() = 0; 486e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) virtual scoped_ptr<webrtc::DesktopCapturer> CreateVideoCapturer() = 0; 496e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) virtual scoped_ptr<webrtc::MouseCursorMonitor> CreateMouseCursorMonitor() = 0; 50c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 51c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Returns the set of all capabilities supported by |this|. 52c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual std::string GetCapabilities() const = 0; 53c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 54c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Passes the final set of capabilities negotiated between the client and host 55c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // to |this|. 56c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual void SetCapabilities(const std::string& capabilities) = 0; 57a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 58a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // Factory method to create a gnubby auth handler suitable for the particular 59a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // desktop environment. 60a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) virtual scoped_ptr<GnubbyAuthHandler> CreateGnubbyAuthHandler( 61a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) protocol::ClientStub* client_stub) = 0; 622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}; 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Used to create |DesktopEnvironment| instances. 652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class DesktopEnvironmentFactory { 662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public: 672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual ~DesktopEnvironmentFactory() {} 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 69b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) // Creates an instance of |DesktopEnvironment|. Returns a NULL pointer if 70b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) // the desktop environment could not be created for any reason (if the curtain 71b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) // failed to active for instance). |client_session_control| must outlive 72b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) // the created desktop environment. 732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual scoped_ptr<DesktopEnvironment> Create( 742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::WeakPtr<ClientSessionControl> client_session_control) = 0; 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 76b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) // Enables or disables the curtain mode. 77b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) virtual void SetEnableCurtaining(bool enable) {} 78b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) 792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Returns |true| if created |DesktopEnvironment| instances support audio 802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // capture. 812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual bool SupportsAudioCapture() const = 0; 82a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 83a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // Enables or disables gnubby authentication. 84a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) virtual void SetEnableGnubbyAuth(bool enable) {} 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace remoting 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // REMOTING_HOST_DESKTOP_ENVIRONMENT_H_ 90