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_WIN_SESSION_DESKTOP_ENVIRONMENT_H_
6#define REMOTING_HOST_WIN_SESSION_DESKTOP_ENVIRONMENT_H_
7
8#include "base/basictypes.h"
9#include "base/callback.h"
10#include "base/compiler_specific.h"
11#include "base/memory/ref_counted.h"
12#include "remoting/host/me2me_desktop_environment.h"
13
14namespace remoting {
15
16// Used to create audio/video capturers and event executor that are compatible
17// with Windows sessions.
18class SessionDesktopEnvironment : public Me2MeDesktopEnvironment {
19 public:
20  virtual ~SessionDesktopEnvironment();
21
22  // DesktopEnvironment implementation.
23  virtual scoped_ptr<InputInjector> CreateInputInjector() OVERRIDE;
24
25 private:
26  friend class SessionDesktopEnvironmentFactory;
27  SessionDesktopEnvironment(
28      scoped_refptr<base::SingleThreadTaskRunner> caller_task_runner,
29      scoped_refptr<base::SingleThreadTaskRunner> input_task_runner,
30      scoped_refptr<base::SingleThreadTaskRunner> ui_task_runner,
31      const base::Closure& inject_sas);
32
33  // Used to ask the daemon to inject Secure Attention Sequence.
34  base::Closure inject_sas_;
35
36  DISALLOW_COPY_AND_ASSIGN(SessionDesktopEnvironment);
37};
38
39// Used to create |SessionDesktopEnvironment| instances.
40class SessionDesktopEnvironmentFactory : public Me2MeDesktopEnvironmentFactory {
41 public:
42  SessionDesktopEnvironmentFactory(
43      scoped_refptr<base::SingleThreadTaskRunner> caller_task_runner,
44      scoped_refptr<base::SingleThreadTaskRunner> input_task_runner,
45      scoped_refptr<base::SingleThreadTaskRunner> ui_task_runner,
46      const base::Closure& inject_sas);
47  virtual ~SessionDesktopEnvironmentFactory();
48
49  // DesktopEnvironmentFactory implementation.
50  virtual scoped_ptr<DesktopEnvironment> Create(
51      base::WeakPtr<ClientSessionControl> client_session_control) OVERRIDE;
52
53 private:
54  // Used to ask the daemon to inject Secure Attention Sequence.
55  base::Closure inject_sas_;
56
57  DISALLOW_COPY_AND_ASSIGN(SessionDesktopEnvironmentFactory);
58};
59
60}  // namespace remoting
61
62#endif  // REMOTING_HOST_WIN_SESSION_DESKTOP_ENVIRONMENT_H_
63