Home | History | Annotate | Download | only in host
      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_BASIC_DESKTOP_ENVIRONMENT_H_
      6 #define REMOTING_HOST_BASIC_DESKTOP_ENVIRONMENT_H_
      7 
      8 #include <string>
      9 
     10 #include "base/basictypes.h"
     11 #include "base/compiler_specific.h"
     12 #include "base/memory/ref_counted.h"
     13 #include "base/memory/scoped_ptr.h"
     14 #include "remoting/host/desktop_environment.h"
     15 
     16 namespace webrtc {
     17 
     18 class DesktopCaptureOptions;
     19 
     20 }  // namespace webrtc
     21 
     22 namespace remoting {
     23 
     24 class GnubbyAuthHandler;
     25 
     26 // Used to create audio/video capturers and event executor that work with
     27 // the local console.
     28 class BasicDesktopEnvironment : public DesktopEnvironment {
     29  public:
     30   virtual ~BasicDesktopEnvironment();
     31 
     32   // DesktopEnvironment implementation.
     33   virtual scoped_ptr<AudioCapturer> CreateAudioCapturer() OVERRIDE;
     34   virtual scoped_ptr<InputInjector> CreateInputInjector() OVERRIDE;
     35   virtual scoped_ptr<ScreenControls> CreateScreenControls() OVERRIDE;
     36   virtual scoped_ptr<webrtc::DesktopCapturer> CreateVideoCapturer() OVERRIDE;
     37   virtual scoped_ptr<webrtc::MouseCursorMonitor> CreateMouseCursorMonitor()
     38       OVERRIDE;
     39   virtual std::string GetCapabilities() const OVERRIDE;
     40   virtual void SetCapabilities(const std::string& capabilities) OVERRIDE;
     41   virtual scoped_ptr<GnubbyAuthHandler> CreateGnubbyAuthHandler(
     42       protocol::ClientStub* client_stub) OVERRIDE;
     43 
     44  protected:
     45   friend class BasicDesktopEnvironmentFactory;
     46 
     47   BasicDesktopEnvironment(
     48       scoped_refptr<base::SingleThreadTaskRunner> caller_task_runner,
     49       scoped_refptr<base::SingleThreadTaskRunner> input_task_runner,
     50       scoped_refptr<base::SingleThreadTaskRunner> ui_task_runner);
     51 
     52   scoped_refptr<base::SingleThreadTaskRunner> caller_task_runner() const {
     53     return caller_task_runner_;
     54   }
     55 
     56   scoped_refptr<base::SingleThreadTaskRunner> input_task_runner() const {
     57     return input_task_runner_;
     58   }
     59 
     60   scoped_refptr<base::SingleThreadTaskRunner> ui_task_runner() const {
     61     return ui_task_runner_;
     62   }
     63 
     64   webrtc::DesktopCaptureOptions* desktop_capture_options() {
     65     return desktop_capture_options_.get();
     66   }
     67 
     68  private:
     69   // Task runner on which methods of DesktopEnvironment interface should be
     70   // called.
     71   scoped_refptr<base::SingleThreadTaskRunner> caller_task_runner_;
     72 
     73   // Used to run input-related tasks.
     74   scoped_refptr<base::SingleThreadTaskRunner> input_task_runner_;
     75 
     76   // Used to run UI code.
     77   scoped_refptr<base::SingleThreadTaskRunner> ui_task_runner_;
     78 
     79   // Options shared between |DesktopCapturer| and |MouseCursorMonitor|. It
     80   // might contain expensive resources, thus justifying the sharing.
     81   // Also: it's dynamically allocated to avoid having to bring in
     82   // desktop_capture_options.h which brings in X11 headers which causes hard to
     83   // find build errors.
     84   scoped_ptr<webrtc::DesktopCaptureOptions> desktop_capture_options_;
     85 
     86   DISALLOW_COPY_AND_ASSIGN(BasicDesktopEnvironment);
     87 };
     88 
     89 // Used to create |BasicDesktopEnvironment| instances.
     90 class BasicDesktopEnvironmentFactory : public DesktopEnvironmentFactory {
     91  public:
     92   BasicDesktopEnvironmentFactory(
     93       scoped_refptr<base::SingleThreadTaskRunner> caller_task_runner,
     94       scoped_refptr<base::SingleThreadTaskRunner> input_task_runner,
     95       scoped_refptr<base::SingleThreadTaskRunner> ui_task_runner);
     96   virtual ~BasicDesktopEnvironmentFactory();
     97 
     98   // DesktopEnvironmentFactory implementation.
     99   virtual bool SupportsAudioCapture() const OVERRIDE;
    100 
    101  protected:
    102   scoped_refptr<base::SingleThreadTaskRunner> caller_task_runner() const {
    103     return caller_task_runner_;
    104   }
    105 
    106   scoped_refptr<base::SingleThreadTaskRunner> input_task_runner() const {
    107     return input_task_runner_;
    108   }
    109 
    110   scoped_refptr<base::SingleThreadTaskRunner> ui_task_runner() const {
    111     return ui_task_runner_;
    112   }
    113 
    114  private:
    115   // Task runner on which methods of DesktopEnvironmentFactory interface should
    116   // be called.
    117   scoped_refptr<base::SingleThreadTaskRunner> caller_task_runner_;
    118 
    119   // Used to run input-related tasks.
    120   scoped_refptr<base::SingleThreadTaskRunner> input_task_runner_;
    121 
    122   // Used to run UI code.
    123   scoped_refptr<base::SingleThreadTaskRunner> ui_task_runner_;
    124 
    125   DISALLOW_COPY_AND_ASSIGN(BasicDesktopEnvironmentFactory);
    126 };
    127 
    128 }  // namespace remoting
    129 
    130 #endif  // REMOTING_HOST_BASIC_DESKTOP_ENVIRONMENT_H_
    131