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_REMOTE_INPUT_FILTER_H_ 6#define REMOTING_HOST_REMOTE_INPUT_FILTER_H_ 7 8#include <list> 9 10#include "base/basictypes.h" 11#include "base/compiler_specific.h" 12#include "base/time/time.h" 13#include "remoting/protocol/input_event_tracker.h" 14#include "remoting/protocol/input_stub.h" 15 16namespace remoting { 17 18// Filtering InputStub that filters remotely-injected input if it has been 19// notified of local input recently. 20class RemoteInputFilter : public protocol::InputStub { 21 public: 22 // Creates a filter forwarding events to the specified InputEventTracker. 23 // The filter needs a tracker to release buttons & keys when blocking input. 24 explicit RemoteInputFilter(protocol::InputEventTracker* event_tracker); 25 virtual ~RemoteInputFilter(); 26 27 // Informs the filter that local mouse activity has been detected. If the 28 // activity does not match events we injected then we assume that it is local, 29 // and block remote input for a short while. 30 void LocalMouseMoved(const webrtc::DesktopVector& mouse_pos); 31 32 // Informs the filter that injecting input causes an echo. 33 void SetExpectLocalEcho(bool expect_local_echo); 34 35 // InputStub overrides. 36 virtual void InjectKeyEvent(const protocol::KeyEvent& event) OVERRIDE; 37 virtual void InjectTextEvent(const protocol::TextEvent& event) OVERRIDE; 38 virtual void InjectMouseEvent(const protocol::MouseEvent& event) OVERRIDE; 39 40 private: 41 bool ShouldIgnoreInput() const; 42 43 protocol::InputEventTracker* event_tracker_; 44 45 // Queue of recently-injected mouse positions used to distinguish echoes of 46 // injected events from movements from a local input device. 47 std::list<webrtc::DesktopVector> injected_mouse_positions_; 48 49 // Time at which local input events were most recently observed. 50 base::TimeTicks latest_local_input_time_; 51 52 // If |true| than the filter assumes that injecting input causes an echo. 53 bool expect_local_echo_; 54 55 DISALLOW_COPY_AND_ASSIGN(RemoteInputFilter); 56}; 57 58} // namespace remoting 59 60#endif // REMOTING_HOST_REMOTE_INPUT_FILTER_H_ 61