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_INPUT_INJECTOR_H_
6#define REMOTING_HOST_WIN_SESSION_INPUT_INJECTOR_H_
7
8#include "base/basictypes.h"
9#include "base/callback_forward.h"
10#include "base/memory/ref_counted.h"
11#include "base/memory/scoped_ptr.h"
12#include "remoting/host/input_injector.h"
13
14namespace base {
15class SingleThreadTaskRunner;
16} // namespace base
17
18namespace remoting {
19
20// Monitors and passes key/mouse events to a nested event executor. Injects
21// Secure Attention Sequence (SAS) when Ctrl+Alt+Del key combination has been
22// detected.
23class SessionInputInjectorWin : public InputInjector {
24 public:
25  // |inject_sas| is invoked on |inject_sas_task_runner| to generate SAS on
26  // Vista+.
27  SessionInputInjectorWin(
28      scoped_refptr<base::SingleThreadTaskRunner> input_task_runner,
29      scoped_ptr<InputInjector> nested_executor,
30      scoped_refptr<base::SingleThreadTaskRunner> inject_sas_task_runner,
31      const base::Closure& inject_sas);
32  virtual ~SessionInputInjectorWin();
33
34  // InputInjector implementation.
35  virtual void Start(
36      scoped_ptr<protocol::ClipboardStub> client_clipboard) OVERRIDE;
37
38  // protocol::ClipboardStub implementation.
39  virtual void InjectClipboardEvent(
40      const protocol::ClipboardEvent& event) OVERRIDE;
41
42  // protocol::InputStub implementation.
43  virtual void InjectKeyEvent(const protocol::KeyEvent& event) OVERRIDE;
44  virtual void InjectTextEvent(const protocol::TextEvent& event) OVERRIDE;
45  virtual void InjectMouseEvent(const protocol::MouseEvent& event) OVERRIDE;
46
47 private:
48  // The actual implementation resides in SessionInputInjectorWin::Core class.
49  class Core;
50  scoped_refptr<Core> core_;
51
52  DISALLOW_COPY_AND_ASSIGN(SessionInputInjectorWin);
53};
54
55}  // namespace remoting
56
57#endif  // REMOTING_HOST_WIN_SESSION_INPUT_INJECTOR_H_
58