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 15 namespace 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. 21 class 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