// Copyright (c) 2012 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef REMOTING_HOST_BASIC_DESKTOP_ENVIRONMENT_H_ #define REMOTING_HOST_BASIC_DESKTOP_ENVIRONMENT_H_ #include #include "base/basictypes.h" #include "base/compiler_specific.h" #include "base/memory/ref_counted.h" #include "base/memory/scoped_ptr.h" #include "remoting/host/desktop_environment.h" namespace webrtc { class DesktopCaptureOptions; } // namespace webrtc namespace remoting { class GnubbyAuthHandler; // Used to create audio/video capturers and event executor that work with // the local console. class BasicDesktopEnvironment : public DesktopEnvironment { public: virtual ~BasicDesktopEnvironment(); // DesktopEnvironment implementation. virtual scoped_ptr CreateAudioCapturer() OVERRIDE; virtual scoped_ptr CreateInputInjector() OVERRIDE; virtual scoped_ptr CreateScreenControls() OVERRIDE; virtual scoped_ptr CreateVideoCapturer() OVERRIDE; virtual scoped_ptr CreateMouseCursorMonitor() OVERRIDE; virtual std::string GetCapabilities() const OVERRIDE; virtual void SetCapabilities(const std::string& capabilities) OVERRIDE; virtual scoped_ptr CreateGnubbyAuthHandler( protocol::ClientStub* client_stub) OVERRIDE; protected: friend class BasicDesktopEnvironmentFactory; BasicDesktopEnvironment( scoped_refptr caller_task_runner, scoped_refptr input_task_runner, scoped_refptr ui_task_runner); scoped_refptr caller_task_runner() const { return caller_task_runner_; } scoped_refptr input_task_runner() const { return input_task_runner_; } scoped_refptr ui_task_runner() const { return ui_task_runner_; } webrtc::DesktopCaptureOptions* desktop_capture_options() { return desktop_capture_options_.get(); } private: // Task runner on which methods of DesktopEnvironment interface should be // called. scoped_refptr caller_task_runner_; // Used to run input-related tasks. scoped_refptr input_task_runner_; // Used to run UI code. scoped_refptr ui_task_runner_; // Options shared between |DesktopCapturer| and |MouseCursorMonitor|. It // might contain expensive resources, thus justifying the sharing. // Also: it's dynamically allocated to avoid having to bring in // desktop_capture_options.h which brings in X11 headers which causes hard to // find build errors. scoped_ptr desktop_capture_options_; DISALLOW_COPY_AND_ASSIGN(BasicDesktopEnvironment); }; // Used to create |BasicDesktopEnvironment| instances. class BasicDesktopEnvironmentFactory : public DesktopEnvironmentFactory { public: BasicDesktopEnvironmentFactory( scoped_refptr caller_task_runner, scoped_refptr input_task_runner, scoped_refptr ui_task_runner); virtual ~BasicDesktopEnvironmentFactory(); // DesktopEnvironmentFactory implementation. virtual bool SupportsAudioCapture() const OVERRIDE; protected: scoped_refptr caller_task_runner() const { return caller_task_runner_; } scoped_refptr input_task_runner() const { return input_task_runner_; } scoped_refptr ui_task_runner() const { return ui_task_runner_; } private: // Task runner on which methods of DesktopEnvironmentFactory interface should // be called. scoped_refptr caller_task_runner_; // Used to run input-related tasks. scoped_refptr input_task_runner_; // Used to run UI code. scoped_refptr ui_task_runner_; DISALLOW_COPY_AND_ASSIGN(BasicDesktopEnvironmentFactory); }; } // namespace remoting #endif // REMOTING_HOST_BASIC_DESKTOP_ENVIRONMENT_H_