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 14 namespace base { 15 class SingleThreadTaskRunner; 16 } // namespace base 17 18 namespace 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. 23 class 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 InjectMouseEvent(const protocol::MouseEvent& event) OVERRIDE; 45 46 private: 47 // The actual implementation resides in SessionInputInjectorWin::Core class. 48 class Core; 49 scoped_refptr<Core> core_; 50 51 DISALLOW_COPY_AND_ASSIGN(SessionInputInjectorWin); 52 }; 53 54 } // namespace remoting 55 56 #endif // REMOTING_HOST_WIN_SESSION_INPUT_INJECTOR_H_ 57