desktop_environment.h revision 868fa2fe829687343ffae624259930155e16dbd8
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 { 212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class ScreenCapturer; 22868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)} // namespace webrtc 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace remoting { 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class AudioCapturer; 272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class ClientSessionControl; 282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class InputInjector; 292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class ScreenControls; 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Provides factory methods for creation of audio/video capturers and event 322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// executor for a given desktop environment. 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class DesktopEnvironment { 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual ~DesktopEnvironment() {} 362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Factory methods used to create audio/video capturers, event executor, and 382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // screen controls object for a particular desktop environment. 392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual scoped_ptr<AudioCapturer> CreateAudioCapturer() = 0; 402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual scoped_ptr<InputInjector> CreateInputInjector() = 0; 412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual scoped_ptr<ScreenControls> CreateScreenControls() = 0; 42868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) virtual scoped_ptr<webrtc::ScreenCapturer> CreateVideoCapturer() = 0; 43c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 44c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Returns the set of all capabilities supported by |this|. 45c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual std::string GetCapabilities() const = 0; 46c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 47c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Passes the final set of capabilities negotiated between the client and host 48c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // to |this|. 49c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual void SetCapabilities(const std::string& capabilities) = 0; 502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}; 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Used to create |DesktopEnvironment| instances. 532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class DesktopEnvironmentFactory { 542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public: 552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual ~DesktopEnvironmentFactory() {} 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 57b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) // Creates an instance of |DesktopEnvironment|. Returns a NULL pointer if 58b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) // the desktop environment could not be created for any reason (if the curtain 59b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) // failed to active for instance). |client_session_control| must outlive 60b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) // the created desktop environment. 612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual scoped_ptr<DesktopEnvironment> Create( 622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::WeakPtr<ClientSessionControl> client_session_control) = 0; 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 64b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) // Enables or disables the curtain mode. 65b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) virtual void SetEnableCurtaining(bool enable) {} 66b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) 672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Returns |true| if created |DesktopEnvironment| instances support audio 682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // capture. 692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual bool SupportsAudioCapture() const = 0; 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace remoting 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // REMOTING_HOST_DESKTOP_ENVIRONMENT_H_ 75