1// Copyright 2013 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 MEDIA_BASE_KEYBOARD_EVENT_COUNTER_H_ 6#define MEDIA_BASE_KEYBOARD_EVENT_COUNTER_H_ 7 8#include <set> 9 10#include "base/synchronization/lock.h" 11#include "media/base/media_export.h" 12#include "ui/events/event_constants.h" 13#include "ui/events/keycodes/keyboard_codes.h" 14 15namespace media { 16 17// This class tracks the total number of keypresses based on the OnKeyboardEvent 18// calls it receives from the client. 19// Multiple key down events for the same key are counted as one keypress until 20// the same key is released. 21class MEDIA_EXPORT KeyboardEventCounter { 22 public: 23 KeyboardEventCounter(); 24 ~KeyboardEventCounter(); 25 26 // Resets the count to 0. Must be called on the same thread as 27 // OnKeyboardEvent. 28 void Reset(); 29 30 // Returns the total number of keypresses since its creation or last Reset() 31 // call. Can be called on any thread. 32 size_t GetKeyPressCount() const; 33 34 // The client should call this method on key down or key up events. 35 // Must be called on a single thread. 36 void OnKeyboardEvent(ui::EventType event, ui::KeyboardCode key_code); 37 38 private: 39 // The set of keys currently held down. 40 std::set<ui::KeyboardCode> pressed_keys_; 41 42 size_t total_key_presses_; 43 44 DISALLOW_COPY_AND_ASSIGN(KeyboardEventCounter); 45}; 46 47} // namespace media 48 49#endif // MEDIA_BASE_KEYBOARD_EVENT_COUNTER_H_ 50